首页 > 解决方案 > Terraform 覆盖 AWS 托管策略

问题描述

我的要求似乎很简单,但我无法使用 Terraform 实现它。我想根据要添加条件的托管策略创建新的AWS 策略SecurityAudit

"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 策略吗?

标签: amazon-web-servicesterraformamazon-iamterraform-provider-aws

解决方案


从理论上讲,您可以这样做,但不能使用SecurityAudit. 这是因为该策略有超过 12000 个字符。但用户管理的策略限制为6,144。

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


推荐阅读