首页 > 解决方案 > S3 拒绝管理员访问

问题描述

对于一个 AWS S3 存储桶,我想拒绝除一个特定 IAM 角色之外的所有人访问。我创建了一个基于角色的策略来允许访问并且有效。但其他 IAM 用户也可以访问对象,我想阻止这种情况。我尝试添加这样的存储桶策略,它拒绝除此主体之外的所有人,然后允许此主体。但是此策略会阻止包括该角色在内的所有人访问。

我试图阻止的其他 IAM 用户附加到内置的 AdminstratorAccess 策略。

{
    "Version": "2012-10-17",
    "Id": "PolicySecretBucket",
    "Statement": [
        {
            "Sid": "StmtDenyAll",
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": "arn:aws:iam::********:role/service-role/my-role"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my-bucket/*"
        },
        {
            "Sid": "StmtAllowLambdaBot",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::********:role/service-role/my-role"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my-bucket/*"
        }
    ]
}

标签: amazon-web-servicesamazon-s3

解决方案


我会这样做:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*",
            "ACCOUNT NUMBER"
          ]
        }
      }
    }
  ]
}

这就是它的工作原理。

  • 用户将有一个允许s3.*操作的 IAM 策略
  • 我们将使用存储桶MyExampleBucket策略拒绝任何用户 id 的存储桶的所有 s3 操作,但角色的用户 id(以及根帐户的用户 id,如果角色被删除)

获取角色的用户 ID:

aws iam get-role --role-name ROLE-NAME

最后,为什么你的不起作用:https ://serverfault.com/a/988136

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


推荐阅读