Terraform 覆盖 AWS 托管策略

时间:2021-07-02 10:27:07

标签: amazon-web-services terraform amazon-iam terraform-provider-aws

我的请求看似简单,但我无法通过 Terraform 实现。 我想根据 SecurityAudit 托管策略创建一个新的 AWS 策略,我想向其中添加条件

"Condition": {
   "StringNotEquals": {
      "aws:TagKeys/MyTag": "disabled"
   }
}

我尝试使用 aws_iam_policy_document 功能,然后将我的政策附加到我的角色

data "aws_iam_policy_document" "security-audit-policy-override" {
  statement {
    principals {
      type        = "Federated"
      identifiers = ["arn:aws:iam::aws:policy/SecurityAudit"]
    }

    condition {
      test     = "StringNotEquals"
      values   = ["aws:TagKeys/MyTag"]
      variable = "disabled"
    }
  }
}

resource "aws_iam_role_policy" "security-audit-override" {
  policy     = data.aws_iam_policy_document.security-audit-policy-override.json
  role       = aws_iam_role.my_role.name
}

但是当我执行 terraform apply 命令时出现以下错误:

Error: Error putting IAM role policy terraform-XXXXXXXXX: MalformedPolicyDocument: Policy document should not specify a principal.

那么,您知道如何覆盖现有的托管 AWS IAM 策略吗?

1 个答案:

答案 0 :(得分:4)

理论上,您可以这样做,但不能使用 SecurityAudit。这是因为此政策有超过 12000 个字符。但用户管理的政策是 limited to 6,144。

因此您必须自己将 SecurityAudit 拆分为两个或三个用户管理的策略。最好的方法是手动构建这些政策,或大幅削减 SecurityAudit