如何仅允许将某些类型的文件上传到 Amazon S3 存储桶?

上次更新日期:2021 年 7 月 22 日

我想仅将某些文件类型存储在我的 Amazon Simple Storage Service (Amazon S3) 存储桶上。如何限制上传,以便我的存储桶仅接受这些文件类型?

解决方法

向存储桶策略添加可执行以下操作的语句:

  • 仅针对具有所需文件类型扩展名的对象允许 s3:PutObject 操作。
  • 针对没有所需文件类型扩展名的对象显式拒绝 s3:PutObject 操作。
    注意:此显式拒绝语句将文件类型要求应用于可完全访问 Amazon S3 资源的用户。

例如,以下存储桶策略示例允许对 exampleusers3:PutObject 操作,仅限于具有 .jpg.png.gif 文件扩展名的对象:

警告:此示例存储桶策略包括显式拒绝语句。如果未满足指定条件,即便用户已输入存储桶策略也会被拒绝访问存储桶。因此,您必须先仔细检查存储桶策略,然后再保存。如果您意外锁定了存储桶,则请参阅我意外拒绝了所有人对我的 Amazon S3 存储桶的访问。如何重新获得访问权限?

{
  "Version": "2012-10-17",
  "Id": "Policy1464968545158",
  "Statement": [
    {
      "Sid": "Stmt1464968483619",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:user/exampleuser"
      },
      "Action": "s3:PutObject",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.jpg",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.png",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.gif"
      ]
    },
    {
      "Sid": "Stmt1464968483619",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "NotResource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.jpg",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.png",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.gif"
      ]
    }
  ]
}

注意:

  • 对于第一个 Principal 值,列出要向其授予上传权限的用户的 Amazon Resource Name (ARN)。
  • 对于 ResourceNotResource 值,确保将 DOC-EXAMPLE-BUCKET 替换为您的存储桶名称。
  • 当您在存储桶策略中指定资源时,存储桶策略评估区分大小写。拒绝 NotResource“arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.jpg”的 s3:PutObject 操作的存储桶策略将允许您上传“my_image.jpg”。但是,如果您尝试上传“my_image.JPG”,Amazon S3 将返回 Access Denied(访问被拒绝)错误。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?