【发布时间】:2011-11-17 05:24:34
【问题描述】:
我已经使用 Amazon AWS 管理控制台上传了一些文件。
我收到了HTTP 403 Access denied 错误。我发现我需要将权限设置为view。
我将如何对存储桶中的所有文件执行此操作?
我知道可以为每个文件设置权限,但是当有许多文件需要所有人查看时,这很耗时。
【问题讨论】:
标签: amazon-s3 amazon-web-services
我已经使用 Amazon AWS 管理控制台上传了一些文件。
我收到了HTTP 403 Access denied 错误。我发现我需要将权限设置为view。
我将如何对存储桶中的所有文件执行此操作?
我知道可以为每个文件设置权限,但是当有许多文件需要所有人查看时,这很耗时。
【问题讨论】:
标签: amazon-s3 amazon-web-services
我建议您对要存储公共内容的存储桶应用存储桶策略1。这样您就不必为每个对象设置 ACL。下面是一个将桶 mybucket 中的所有文件公开的策略示例。
{
"Version": "2008-10-17",
"Id": "http better policy",
"Statement": [
{
"Sid": "readonly policy",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucket/sub/dirs/are/supported/*"
}
]
}
"Resource": "arn:aws:s3:::mybucket/sub/dirs/are/supported/*" 中的 * 允许递归。
1 请注意,存储桶策略与 IAM 策略不同。 (如果您尝试在 IAM 策略中包含 Principal,则会收到错误消息。)可以通过在 AWS Web 控制台中转到存储桶的根目录并展开“属性”>“权限”来编辑存储桶策略。 Bucket的子目录也有Properties > Permissions,但是没有Edit bucket policy
【讨论】:
您可以选择要公开的目录。
按“更多”并将其标记为公开;它将使目录和所有文件都可以公开访问。
【讨论】:
您只能修改唯一项目(存储桶或项目)的 ACL,因此您必须一一更改它们。
一些 S3 管理应用程序允许您将相同的 ACL 应用于存储桶中的所有项目,但在内部,它会将 ACL 逐个应用于每个项目。
如果您以编程方式上传文件,请务必在上传文件时指定 ACL,这样您以后就不必修改它。使用 S3 管理应用程序(如 Cloudberry、Transmit 等)的问题在于,它们中的大多数在您上传每个文件时都使用默认 ACL(私有只读)。
【讨论】:
我使用Cloudberry Explorer 来完成这项工作:)
使用S3 Browser,您可以使用 gui 更新权限,也可以递归。这是一个有用的工具,可免费用于非商业用途。
【讨论】:
要公开大量文件,请执行以下操作:
【讨论】:
您可以使用 aws cli 在每个文件上设置 ACL:
BUCKET_NAME=example
BUCKET_DIR=media
NEW_ACL=public-read
aws s3 ls $BUCKET_NAME/$BUCKET_DIR/ | \
awk '{$1=$2=$3=""; print $0}' | \
xargs -t -I _ \
aws s3api put-object-acl --acl $NEW_ACL --bucket $BUCKET_NAME --key "$BUCKET_DIR/_"
【讨论】:
boto3's ObjectAcl或更准确地说S3.ObjectAcl.put在python中编写类似的东西,这将导致更容易阅读。
我在通过程序(java)将文件上传到 s3 存储桶时遇到了同样的问题..
错误:请求的资源上不存在“Access-Control-Allow-Origin”标头。
因此,Origin 'http://localhost:9000' 不允许访问。响应的 HTTP 状态代码为 403
我添加了来源身份并更改了存储桶策略和CORS配置,然后一切正常。
【讨论】:
我想在此处为已经拥有名为 Transmit by Panic 的精美 FTP 应用程序的潜在 macOS 用户添加此功能。
我已经有了 Panic,它支持 S3 存储桶(不确定这是什么版本,但我认为升级是免费的)。它还支持递归更新读写权限。
您只需右键单击要更新的目录,然后选择要设置的读取和写入权限。
它看起来不是特别快,但你可以通过 Window > Transcript 打开日志文件,这样你至少知道它正在做某事。
【讨论】:
使用AWS policy generator 生成适合您需要的策略。策略生成器中的委托人应该是您将用于访问对象的 IAM 用户/角色。
资源 ARN 应为 arn:aws:s3:::mybucket/sub/dirs/are/supported/*
接下来,单击“添加声明”并继续执行。您最终将获得一个表示该策略的 JSON。将此粘贴到您的 s3 存储桶策略管理部分,该部分位于“AWS 中的 s3 存储桶页面 -> 权限 -> 存储桶策略”。
【讨论】: