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

How to restrict users to create a public S3 object into a private bucket

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

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

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

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

在 S3 控制台上,在存储桶名称之后有访问列,应该是 "bucket and object cannot be public"。

默认情况下,所有 Amazon S3 存储桶都是私有的。除非通过 IAM 策略、存储桶策略或对象级权限授予权限,否则任何人都不能 access/use 存储桶或其内容。

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

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

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

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

您应该在 S3 存储桶上启用 Block Public Access。这将防止任何人在该存储桶中创建对象 public。您还应该限制哪些 IAM users/roles/policies 有权修改块 Public 访问设置。

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