我的请求看起来很简单,但我无法用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政策吗?
理论上,您可以做到这一点,但SecurityAudit
不能做到。这是因为此策略有超过12000个字符。但用户管理的策略仅限于6144。
因此,您必须自己将SecurityAudit
拆分为两个或三个用户管理的策略。最好的方法是手动构建这些策略,或者大幅削减SecurityAudit
。