如何限制用户将公共S3对象创建到私有存储桶中

时间:2019-10-10 17:34:57

标签: amazon-web-services amazon-s3 amazon-ec2 aws-java-sdk

我创建了一个Amazon S3存储桶,该存储桶本质上是私有的,但是我不希望我的用户在该存储桶内创建任何公共对象。我应该如何通过该存储桶的S3策略来做到这一点?我尝试过,但收到错误消息,指出该政策资源无效。

{
    "Version": "2012-10-17",
    "Statement": [

        {
            "Sid": "DenyPublicReadGetObject",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": [
               " arn:aws:s3:::aws-my-bucket-s3-vk/*"
            ]
        }
    ]
}

用户应该能够访问存储桶并创建新对象/从具有必要权限的EC2实例内部获取对象。

在S3控制台上,存储桶名称之后有一个访问列,应显示为“存储桶和对象不能为公共对象”。

2 个答案:

答案 0 :(得分:1)

默认情况下,所有Amazon S3存储桶均为私有。除非已通过IAM策略,存储桶策略或对象级权限被授予访问权限,否则任何人都无法访问/使用存储桶或其内容。

您似乎希望特定的Amazon EC2实例能够使用存储桶。因此:

  • 创建 IAM角色
  • 授予IAM角色所需的权限(例如该存储分区上的PutObjectGetObject
  • 将分配给Amazon EC2实例
  • 然后,EC2实例上的应用程序将能够访问存储桶

无需使用Deny策略。它将始终覆盖其他策略。最好使用Allow策略来授予访问权限,但只授予所需的实体。

以下是一些政策示例:User Policy Examples - Amazon Simple Storage Service

答案 1 :(得分:1)

您应该在S3存储桶上启用Block Public Access。这样可以防止任何人在该存储桶中公开对象。您还应该限制哪些IAM用户/角色/策略有权修改阻止公共访问设置。

Amazon S3阻止公共访问设置将覆盖S3存储桶策略和对象级别权限,以防止公共访问。