S3 拒绝管理员访问

Posted

技术标签:

【中文标题】S3 拒绝管理员访问【英文标题】:S3 deny access to administrators 【发布时间】:2020-04-10 09:46:21 【问题描述】:

对于一个 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/*"
        
    ]

【问题讨论】:

角色 ARN 通常为 arn:aws:iam::********:role/my-role,但请测试 arn:aws:sts::**********:assumed-role/myrole/mysession,其中会话名称为 mysession 【参考方案1】:

我会这样做:


  "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 策略 我们将使用存储桶策略拒绝任何用户 id 的存储桶 MyExampleBucket 的所有 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/

【讨论】:

如果它对你有用,请接受答案,以便我确认我的理解 这很好用,谢谢!在本例中,我使用此存储桶来存储 API 凭据,因此我将访问权限限制为仅 GetObject。我希望自己和其他管理员能够放置新对象,但只有指定的 Lambda 函数才能读取它们。【参考方案2】:

拒绝对特定存储桶的访问实际上非常困难

例如,管理员可能有权担任角色,因此他们仍然可以访问存储桶。

您还需要查看所有政策,以确保只有授权人员才能使用iam:PassRole通过 Amazon EC2 实例担任该角色

更安全的方法是将存储桶放在单独的 AWS 账户中。然后,仅向特定用户(而不是角色)授予跨账户访问权限。这样,默认情况下管理员的访问权限为零,然后您将访问权限授予所需的人员。 “绕过”此类访问的方法较少。

【讨论】:

感谢您的洞察力。在这种情况下,我不介意管理员是否可以担任该角色,因为我们彼此信任不会做坏事。我只是想防止意外轻松访问。但实际上,由于我使用的是 Lambda 服务角色,我认为不可能假设这些。

以上是关于S3 拒绝管理员访问的主要内容,如果未能解决你的问题,请参考以下文章

S3 错误:使用嵌套堆栈部署 CFN 模板时访问被拒绝

尽管获得了完全许可,但 aws iam 用户访问被拒绝

如何用几个逻辑“或”编写 s3 条件存储桶策略?

无法访问S3存储桶

AWS S3 公开存储桶

S3“拒绝访问”到存储桶