【问题标题】:S3 deny access to administratorsS3 拒绝管理员访问
【发布时间】:2023-03-22 23:26:01
【问题描述】:

对于一个 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

标签: amazon-web-services amazon-s3


【解决方案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 服务角色,我认为不可能假设这些。
猜你喜欢
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
相关资源
最近更新 更多