amazon-web-services - 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 策略吗?
解决方案
从理论上讲,您可以这样做,但不能使用SecurityAudit
. 这是因为该策略有超过 12000 个字符。但用户管理的策略限制为6,144。
因此,您必须自己拆分SecurityAudit
为两个或三个用户管理的策略。最好的方法是手动构建这些策略,或者SecurityAudit
大幅削减。