我已经使用Amazon AWS管理控制台上传了一些文件。
我有一个HTTP 403 Access denied
错误。我发现我需要将权限设置为view
。
对于存储桶中的所有文件,我该怎么做?
我知道可以对每个文件设置权限,但是当有许多文件需要每个人查看时,这很费时间。
Answers:
建议您将存储桶策略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策略不同。(对于其中一个,如果尝试将其包含Principal
在IAM策略中,则会出现错误。)可以通过在AWS Web控制台中进入存储桶的根目录并展开“属性”>“权限”来编辑存储桶策略。存储桶的子目录也具有“属性”>“权限”,但是没有选择Edit bucket policy
您可以选择要公开的目录。
点击“更多”并将其标记为公开;它将使目录和所有文件可以公共访问。
您可以使用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
的ObjectAcl或者更准确地说S3.ObjectAcl.put
,这将导致一些更易于阅读。
通过程序(java)将文件上传到s3存储桶时,我遇到了同样的问题。
错误:所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问
源' http:// localhost:9000 '。响应的HTTP状态码为403
我添加了原始身份并更改了存储区策略和CORS配置,然后一切正常。
我想在这里为潜在的macOS用户添加此功能,这些用户已经拥有精心制作的FTP应用程序,称为Panic的Transmit。
我已经有了Panic,它支持S3存储桶(不知道它是哪个版本的,但我认为升级是免费的)。它还支持递归更新读取和写入权限。
您只需右键单击要更新的目录,然后选择要将其设置为的读取和写入权限。
它的运行速度似乎并不快,但是您可以通过以下方式打开日志文件:进入“窗口”>“文字记录”,这样您至少知道它在做什么。