【问题标题】:S3 bucket policy to deny all except a particular AWS service role and IAM roleS3 存储桶策略拒绝除特定 AWS 服务角色和 IAM 角色之外的所有内容
【发布时间】:2020-11-26 10:08:29
【问题描述】:

您能否编写一个 s3 存储桶策略来拒绝访问除特定 IAM 角色AWS 服务角色 之外的所有委托人(例如 billingreports.amazonaws.com)。

我尝试将“Deny”与“NotPrincipal”一起使用,但以下示例均无效,因为我认为无法拥有多种类型的主体AWS 支持吗?

这允许您保存策略,但锁定存储桶(警告:只有 root 用户可以更新策略以解锁)

"Effect": "Deny",
     "NotPrincipal": {
          "AWS": [
          "arn:aws:iam::<account_id>:root",
          "arn:aws:iam::<account_id>:role/specialBillingRole"
     ],
     "Service": "billingreports.amazonaws.com"
}

因此,我尝试使用条件,但找不到合适的组合。这是一个示例策略。

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "billingreports.amazonaws.com"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my-bucket/*"
        },
        {
            "Sid": "",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::my-bucket/*",
                "arn:aws:s3:::my-bucket"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:PrincipalArn": [
                        "arn:aws:iam::<account_id>:role/specialBillingRole",
                        "billingreports.amazonaws.com",
                        "<account_id>"
                    ]
                }
            }
        }
    ]
}

更新根据一些评论建议的问题。

第二次更新还尝试了以下方法,仍然可以访问帐户中的所有角色/用户(不能在Principal 中使用通配符)。

{
     "Effect": "Deny",
     "Principal": {
          "AWS": "arn:aws:iam::<account_id>:root"
     },
     "Action": "s3:*",
     "Resource": [
          "arn:aws:s3:::my-bucket/*",
          "arn:aws:s3:::my-bucket"
     ],
     "Condition": {
          "ArnNotEquals": {
               "aws:PrincipalArn": [
                    "arn:aws:iam::<account_id>:role/specialBillingRole",
                    "<account_id>"
               ]
          }
     }
}

【问题讨论】:

  • 为什么不能指定角色,角色有信任策略限制哪些服务可以使用
  • 当您拥有NotPrincipalDeny 时,您“还必须指定未被拒绝的主体的帐户ARN。”来自here。我不知道这是否有帮助,但是您在前两次尝试中没有提供帐户原则。
  • @ChrisWilliams 您的意思是将角色指定为PrincipalAllow?这对我不起作用,因为帐户中的其他角色将可以通过其 IAM 策略(即具有 PowerUserAccess、ReadOnly 策略等的角色)访问存储桶。
  • @Marcin 你是正确的关于需要帐户本金。我刚刚尝试使用多种 types 委托人(IAM 角色 + AWS 服务角色)并将存储桶锁定。所以看起来即使我能够保存策略,它实际上是无效的并且使所有其他角色无效,因此它是 Deny all。
  • @playdoz Deny 和 NonPrinciple 策略难以管理。你确定没有其他方法可以做到这一点,比如通过克里斯提到的角色吗?文档(与以前的链接相同)还写道“建议您在决定使用 NotPrincipal 之前探索其他授权选项。”

标签: amazon-web-services amazon-s3 amazon-iam


【解决方案1】:

您当然可以创建仅授予服务角色和 IAM 角色访问权限的存储桶策略,但需要明确的是,服务role仍将以“ arn:aws:iam:::role..."。

您是否尝试创建一个存储桶策略来授予对特定服务服务角色的访问权限?我之所以问,是因为如果您创建了一个以 billingreports.amazonaws.com 作为其受信任实体的角色,并且该角色旨在访问存储桶,那么您无需列出该服务单独在您的存储桶策略中(如果情况与我想象的一样)。

另外请注意,您确实可以将通配符与主体结合使用,并结合条件 - 我一直这样做(请参阅下面的示例策略)。当我想限制对特定角色的存储桶访问时,我只需包含一个 Allow 语句,其 Principal 是我想要允许的角色,然后是一个 Deny 语句,其 Principal 为“AWS”:“*”,然后是条件,像这样:

{
    "Version": "2008-10-17",
    "Id": "PolicyScopedToSecurity",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::[accountID]:role/[roleName]",
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::[bucketName]",
                "arn:aws:s3:::[bucketName]/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::[bucketName]",
                "arn:aws:s3:::[bucketName]/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:PrincipalArn": [
                        "arn:aws:iam::[accountID]:role/[roleName]",
                        "[accountID]"
                    ]
                }
            }
        }
    ]
}

如果您确实需要服务本身来访问存储桶,则解决方案会略有不同。我的回复假定服务角色需要访问。

【讨论】:

    猜你喜欢
    • 2019-09-29
    • 2018-06-08
    • 2016-12-23
    • 1970-01-01
    • 2021-01-03
    • 2021-04-25
    • 2021-08-13
    • 2017-02-12
    • 2020-09-07
    相关资源
    最近更新 更多