繁体   English   中英

如何使用 IAM 策略 AWS 仅向根账户用户授予对 S3 存储桶的访问权限?

[英]How to grant access only to the Root Account User for an S3 bucket with IAM Policy AWS?

我想创建一个只有 Root 帐户才能拥有完全访问权限的 s3 存储桶策略,我该怎么做?

例子:

   {
    "Version": "2012-10-17",
    "Statement": [            
        {
            "Sid": "Allow full access for root account user",
            "Effect": "Allow",
            "Principal": {
                "AWS": "root"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::ih-deploy-bucket/*",
                "arn:aws:s3:::ih-deploy-bucket"
            ]
        }
    ]
}

或者添加一个条件像

"Condition": {
    "StringEquals" : {"aws:username" : "rootUser"} 
}

这是使用NotPrincipal的显式Deny的极少数(如果不是唯一的)用例NotPrincipal

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "NotPrincipal": {
        "AWS": "arn:aws:iam::<your-account-number>:root"
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::ih-deploy-bucket/*",
        "arn:aws:s3:::ih-deploy-bucket"
      ]
    }
  ]
}

这将明确拒绝所有不是(且不仅是)根账户用户的委托人,包括该账户中的 IAM 用户、代入角色会话和联合用户。 并且由于 root 用户始终对所有资源的所有操作具有明确的 Allows,实际的 Allow 由 root 用户的基于身份的权限给出,因此 root 用户将有权访问该存储桶。

之所以有效,是因为在您的账户中工作的调用者身份始终同时具有多个委托人,IAM 正在评估这些委托人以获取策略声明:

  1. 账户主体arn:aws:iam::<your-account-number>:root
  2. 用户、承担的角色或联合用户主体

在显式Allow的情况下,如果您仅在策略语句的Principal规则中使用 root 帐户主体,则该帐户中的任何用户都将匹配允许并获得访问权限,因为帐户主体始终是用户的一部分该帐户中的主体列表。

但是,在使用NotPrincipalDeny的情况下,情况有点不同。 在这里, NotPrincipal的列表必须将调用者身份的所有主体列入白名单,以使其不被拒绝。

这个事实在关于NotPrincipal的 AWS 文档中NotPrincipalhttps : NotPrincipal

当您将 NotPrincipal 与 Deny 结合使用时,您还必须指定未被拒绝的委托人的账户 ARN。 否则,该策略可能会拒绝访问包含主体的整个帐户。 根据您在策略中包含的服务,AWS 可能会先验证账户,然后再验证用户。 如果正在评估代入角色用户(正在使用角色的人),AWS 可能首先验证账户,然后是角色,然后是代入角色用户。

"AWS": "root"

应该改为

"AWS": "arn:aws:iam::<your-account-number>:root"

就像 httpdigest 在这个答案中所说的那样,root 用户总是明确允许对所有资源的所有操作。

所以我阻止了所有其他状态不佳的用户的所有权限。 并且 root 用户始终可以访问。

{
    "Version": "2012-10-17",
    "Statement": [            
        {
            "Sid": "Block all user not in condition, but the root has permission",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket/*",
                "arn:aws:s3:::bucket"
            ],
              "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "175.222.100.192"
                },
                "StringNotEquals": {
                    "aws:username": "user1"
                }
            }
        }
    ]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM