【问题标题】:Amazon S3 bucket policy, what am I doing wrong?Amazon S3 存储桶策略,我做错了什么?
【发布时间】:2018-04-19 15:22:00
【问题描述】:

我使用Policy Generator 为我的存储桶创建了一个简单的规则;规则应允许以下预期效果:

  • root 访问权限
  • 限制对给定 IAM 用户的访问
  • 允许所有人只读访问

为此,我编写了以下规则,但没有按预期工作,特别是,我完全失去了对存储桶元素的访问权限,在所有情况下都“拒绝访问”,包括根:

编辑:使用@jarmod 回答我可以设置预期的功能,但是它会触发警告,关于存储桶是公开的,我没有看到没有策略的区别,存储桶仍然以只读方式公开访问。有什么区别?

【问题讨论】:

  • 显式拒绝 > 显式允许 > 隐式拒绝。您的第 1 条和第 2 条语句应该被删除,并且您缺少允许“所有人只读访问”的语句。
  • @jarmod 所以 root 是隐式允许的?我正在阅读this guide,在示例中,他们为其他所有人设置了deny *,并指定允许root 访问。
  • 你不能有一个拒绝 * 和一个允许 x,因为拒绝 * 是明确的并且胜过每个允许。 Root 具有对所有内容的隐式访问权限,但您不应该对任何内容使用 root 凭证(请参阅 AWS 对 root 用户的最佳实践)。
  • 您所指的指南中的拒绝示例(如果我阅读正确的示例)具有条件策略声明,拒绝除特定角色和 root 用户之外的所有访问。如果您特别想要覆盖 S3 存储桶的 IAM 级别权限(例如,您可以拒绝对实际拥有该存储桶权限的 IAM 用户的访问),您可以使用此选项。据我所知,这不是您想要做的,因此该政策不相关。
  • @jarmod 是的,先生!根据列表中的第二个点,我正在尝试限制对给定 IAM 用户的访问

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


【解决方案1】:

也许你可以这样做:

  1. 对于所有用户,允许操作 s3:GetObject
  2. 对于除 root 和您的特定 IAM 用户之外的所有用户,拒绝除 s3:GetObject 之外的所有操作

您可以使用类似这样的策略来做到这一点:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::mybucket/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "NotAction": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::mybucket/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userId": [
                        "iam-userid-here",
                        "root-userid-here"
                    ]
                }
            }
        }
    ]
}

要获取 iam-userid-here,请运行 aws iam list-users 并检索 IAM 用户的 UserId。

同样,要获得root-userid-here,只需从先前aws iam list-users 输出的Arn 中检索帐号。根账户 userId AWS 账号。

iam-userid-here 指示的 IAM 用户随后可以拥有允许 S3 访问的 IAM 策略。

【讨论】:

  • 这是部分工作,通过允许只读给我的意思的每个人也没有登录的用户,比如公共客人。在存储桶中,我上传要共享的文件并提供 URL,而我的根和 IAM 用户可以访问存储桶,公共访问者被拒绝访问该文件。
  • 我不确定您的评论是什么意思。您是说要提供对对象的公共读取访问权限,但不允许 IAM 用户(除了一个特定用户)读取它们吗?如果是这样,为什么?授予公共读取权限肯定意味着所有人。
  • 我错过了您共享的代码,使用的工具我无法设置 NotAction 并且最初无法正常工作。我想创建一个共享文件夹来发送文件,IAM 用户是一个上传文件的应用程序。我只是想知道为什么它将存储桶标记为公共,而在没有策略的情况下也可以访问它。
  • 我假设您指的是 AWS S3 控制台如何突出存储桶是公共的这一事实。如果没有某种形式的政策允许,存储桶内容将无法公开访问。
  • 如果您说您可以访问s3.amazonaws.com/yourbucket/yourkey 并且浏览器成功下载或显示您的文件,则 S3 对象是公开的。它是公开的,因为您有一个将其公开的存储桶策略,或者您有使其公开的对象级 ACL。
猜你喜欢
  • 2011-09-10
  • 2023-02-26
  • 2013-01-08
  • 1970-01-01
  • 2013-12-21
  • 2023-03-31
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
相关资源
最近更新 更多