s3存储桶主体结尾处的通配符

时间:2019-06-20 03:23:58

标签: amazon-s3 terraform

我想允许帐户中具有共享前缀的角色能够从S3存储桶中读取。例如,我们有许多名为RolePrefix1RolePrefix2等的角色,并且将来可能会创建更多这样的角色。我们希望以RolePrefix开头的帐户中的所有角色都能够访问S3存储桶,而无需将来更改策略文档。

我的存储桶策略文档的terraform如下:

data "aws_iam_policy_document" "bucket_policy_document" {
  statement {
    effect = "Allow"
    actions = ["s3:GetObject"]

    principals = {
      type = "AWS"
      identifiers = ["arn:aws:iam::111122223333:role/RolePrefix*"]
    }

    resources = ["${aws_s3_bucket.bucket.arn}/*"]
  }
}

这给了我以下错误:

Error putting S3 policy: MalformedPolicy: Invalid principal in policy

是否可以通过其他方式实现此功能?

1 个答案:

答案 0 :(得分:1)

您不能在IAM原则中将通配符与ARN一起使用。您只能使用“ *”。

https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html

“在Principal元素中指定用户时,不能使用通配符(*)表示“所有用户”。Principal必须始终命名一个或多个特定用户。”

解决方法: 保留“主体”:{“ AWS”:“ *”} 并基于ARNLike等条件创建条件,因为他们接受条件中带有通配符的用户信息。 示例:

https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/