如何在 s3 私有存储桶中公开 s3 对象而不使用预签名 URL

Ahm*_*med 1 policy amazon-s3 bucket amazon-web-services

我有一个具有以下策略的 s3 存储桶

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:DeleteObject"
        ],
        "Resource": [
            "arn:aws:s3:::bucket",
            "arn:aws:s3:::bucket/*"
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

}

存储桶的公共访问也被阻止。这是存储桶策略的快照

在此输入图像描述

基本上,我希望存储桶是私有的,以防止未经授权的用户上传文件,但我想向任何用户授予对存储桶内对象的公共读取访问权限

Joh*_*ein 5

看来您希望允许任何人检索对象,但不应该允许他们执行任何其他操作。

有两种方法可以实现此目的:

1. 使用ACL

您可以将public-readACL 分配给各个对象。这还需要为两个 ACL 相关选项停用 S3 阻止公共访问。

通过这种方式,您的存储桶仍然是私有的,但如果对象的名称已知,则可以访问对象。(列表未启用。)

2. 使用桶策略

此策略将允许任何人访问存储桶中的对象:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Effect":"Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

它将允许任何获取对象的尝试,但不允许列出、删除等。

对于上述两个选项,如果您希望“授权”用户能够执行上传和删除对象等操作,则应将这些权限直接分配给 IAM 用户(不使用 S3 存储桶策略)。