使用根用户(=存储桶所有者)在AWS S3存储桶上放置存储桶策略时出现访问被拒绝的错误。

30

我有一个AWS的根用户,用它在亚马逊上创建了一个S3存储桶。
现在我想通过添加以下策略来使此存储桶公开:

{
   "Version": "2012-10-17",
   "Statement": [{
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::<my bucket name>/*"
   }]
}

其中<my bucket name>是存储桶名称。当我尝试保存此策略时,出现403访问被拒绝的错误。

我已经尝试显式设置s3:PutBucketPolicy权限,但仍然返回403错误。有人知道原因吗?

这是错误图片:

aws错误信息的图片


请问您是否可以验证您所拥有的“root”用户是否具备修改S3的正确权限? - AlexK
如果根用户创建了存储桶,他不是总能拥有对该存储桶的完全访问权限吗?我还为该存储桶创建了一个具有权限的 IAM 用户,但该用户也无法调整存储桶策略。 - Tijl .Reynhout
是的,它直接附在了上面。 - Tijl .Reynhout
你的策略中缺少 "Principal": {"AWS": "*"}。 - AlexK
问题在于我无法更新存储桶策略,因为我收到了403禁止访问的错误。我已经尝试通过AWS控制台和AWS CLI设置策略。我还确认了我是存储桶的所有者,并且使用正确的帐户登录。 - Tijl .Reynhout
显示剩余5条评论
6个回答

35

我的 AWS S3 截图

取消选中 2 行以修复访问被拒绝的问题。但在创建新的存储桶之前,请务必仔细阅读并考虑它。权限非常重要。


2
这是不正确的。Tijl 正在设置存储桶策略,而不是 ACL。需要取消“阻止新公共策略”复选框。 - Ken Krueger
3
@KenKrueger 这是2018年的答案,我已经4年没有使用AWS了。请随意在下面分享您的解决方案。谢谢。 - Phong

22

如果通过CloudFormationAWS SAM部署,您需要显式允许桶公开,如下所示:

  MyExampleBucket:
    Type: AWS::S3::Bucket
    Properties:
      PublicAccessBlockConfiguration:
        BlockPublicPolicy: false
        RestrictPublicBuckets: false

然后您可以指定一个AWS :: S3 :: BucketPolicy,允许公共访问。


这是从AWS方面的变化。以前不需要指定这两个属性。谢谢! - undefined

6
我尝试创建了一个新的存储桶,并通过取消选中(false)以下权限参数来设置存储桶策略,以使存储桶对象变为公共。然后我勾选了之前的四个复选框,现在它可以正常工作。
权限设置截图: permissions
图片链接: enter image description here

5

对于在使用aws-cdk并已经存在存储桶的用户出现此错误的情况:

请注意,如果您在设置了"blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL"或任何其他阻止s3.BlockPublicAccess的Bucket属性时,不要尝试修改Bucket策略。

如果您想修改策略,请关闭或删除该属性。在部署(修改)策略后,您可以再次设置blockPublicAccess属性。


0

关于阻止公共访问的原始博客文章(https://aws.amazon.com/blogs/aws/amazon-s3-block-public-access-another-layer-of-protection-for-your-accounts-and-buckets/)解释了观察到的行为。

看起来您是通过控制台创建的存储桶,这意味着“阻止公共访问”规则默认开启。这包括“阻止通过新的公共存储桶策略授予的存储桶和对象的公共访问”。此选项“禁止...公共存储桶策略,未来包含它们的PUT请求将失败。”这就是所描述的确切错误。

由于您正在尝试使用存储桶策略而不是ACL,因此需要禁用“阻止通过新的公共存储桶策略授予的存储桶和对象的公共访问”。取消选中该块选项,您的PUT操作将成功。
这假定您有能力在帐户级别上解除阻止公共访问。

请注意,自2023年4月起,您创建存储桶的方式不再影响此行为,请参见https://aws.amazon.com/blogs/aws/heads-up-amazon-s3-security-changes-are-coming-in-april-of-2023/。无论是通过控制台、CLI、SDK、CloudFormation、CDK等方式创建存储桶,块行为都是相同的。

0
2023年更新:cdk创建了存储桶
如果有人来这里尝试部署一个存储桶: 我需要添加blockPublicAccess: BlockPublicAccess.BLOCK_ACLS,
  const siteBucket = new Bucket(stack, BUCKET_ID, {
    bucketName: `${BUCKET_NAME}-${buildConfig.Environment}`,
    publicReadAccess: true,
    blockPublicAccess: BlockPublicAccess.BLOCK_ACLS,
    removalPolicy: RemovalPolicy.DESTROY,
    websiteIndexDocument: 'index.html',
  })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接