【发布时间】:2022-01-01 04:04:06
【问题描述】:
我正在尝试使用 terraform 在 S3 存储桶的 IAM 策略上设置多个委托人(IAM 角色)。计划如下:
Terraform will perform the following actions:
# module.log_bucket.aws_s3_bucket_policy.policy will be updated in-place
~ resource "aws_s3_bucket_policy" "policy" {
id = "log_bucket"
~ policy = jsonencode(
~ {
~ Statement = [
+ {
+ Action = [
+ "s3:PutObject",
+ "s3:PutObjectAcl",
]
+ Effect = "Allow"
+ Principal = {
+ AWS = [
+ "arn:aws:iam::<account1-id>:role/my_log_role",
+ "arn:aws:iam::<account2-id>:role/my_log_role",
+ "arn:aws:iam::<account3-id>:role/my_log_role",
+ "arn:aws:iam::<account4-id>:role/my_log_role",
]
}
+ Resource = [
+ "arn:aws:s3:::log_bucket/*",
+ "arn:aws:s3:::log_bucket",
]
+ Sid = "DelegateS3Access"
},
]
# (1 unchanged element hidden)
}
)
# (1 unchanged attribute hidden)
}
但是当我申请时,我收到以下错误:
│ Error: Error putting S3 policy: MalformedPolicy: Invalid principal in policy
│ status code: 400
│ with module.log_bucket.aws_s3_bucket_policy.policy,
│ on .terraform/mypath/main.tf line 63, in resource "aws_s3_bucket_policy" "policy":
│ 63: resource "aws_s3_bucket_policy" "policy" {
│
对我来说似乎是正确的,为什么会抛出错误?
【问题讨论】:
-
感谢您的提示。
-
如果你的代码块格式正确,你就不会遇到这个问题
-
确认角色确实存在。
-
@gshpychka 就是这样!
标签: amazon-web-services amazon-s3 terraform amazon-iam terraform-provider-aws