Amazon S3权限问题-如何一次为所有文件设置权限?


76

我已经使用Amazon AWS管理控制台上传了一些文件。

我有一个HTTP 403 Access denied错误。我发现我需要将权限设置为view

对于存储桶中的所有文件,我该怎么做?

我知道可以对每个文件设置权限,但是当有许多文件需要每个人查看时,这很费时间。

Answers:


123

建议您将存储桶策略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


4
以防万一其他人被这个问题所吸引,版本必须完全符合规定。
opsb 2012年

9
万一有人想知道如何设置存储桶策略,以下是AWS的官方文档:docs.amazonwebservices.com/AmazonS3/latest/dev/…–
Herman J. Radtke III

6
他们还有一个有用的工具来生成这些信息:awspolicygen.s3.amazonaws.com/policygen.html
Ben Sharpe

2
S3浏览器是可以执行此操作的UI工具包。它具有一个免费软件版本,我认为应该可以满足您的需求。s3browser.com 我们使用其付费版本(约30美元),而且我知道它只需几次单击即可完成所有这些操作,而您无需付费即可完成编码这样的快速任务
Glenn

3
我尝试将其粘贴到S3控制台中。它抱怨说它不是有效的json,您必须删除“ Resource”行之后的结尾逗号和第一个{之前的初始空格。
乔恩·提尔森


4

您只能修改唯一商品(存储桶或商品)的ACL,对于大豆,您将必须一次一个地更改它们。

某些S3管理应用程序允许您将相同的ACL应用于存储桶中的所有项目,但在内部,它将ACL逐一应用于每个对象。

如果您以编程方式上传文件,则在上传文件时指定ACL非常重要,这样您以后就不必对其进行修改。使用S3管理应用程序(如Cloudberry,Transmit等)的问题是,当您上载每个文件时,大多数应用程序都使用默认ACL(专用只读)。




2

您可以使用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/_"

该解决方案是好的,以防文件对他们设置的属性不好直接:)人们还可以使用python的类似写点东西boto3的ObjectAcl或者更准确地说S3.ObjectAcl.put,这将导致一些更易于阅读。
GabLeRoux

2

通过程序(java)将文件上传到s3存储桶时,我遇到了同样的问题。

错误:所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问
源' http:// localhost:9000 '。响应的HTTP状态码为403

我添加了原始身份并更改了存储区策略CORS配置,然后一切正常。


1

传输5

我想在这里为潜在的macOS用户添加此功能,这些用户已经拥有精心制作的FTP应用程序,称为Panic的Transmit。

我已经有了Panic,它支持S3存储桶(不知道它是哪个版本的,但我认为升级是免费的)。它还支持递归更新读取和写入权限。

您只需右键单击要更新的目录,然后选择要将其设置为的读取和写入权限。

它的运行速度似乎并不快,但是您可以通过以下方式打开日志文件:进入“窗口”>“文字记录”,这样您至少知道它在做什么。


1

要公开大量文件,请执行以下操作:

  1. 转到S3 Web界面
  2. 打开所需的存储桶
  3. 通过单击列表左侧的复选框来选择所需的文件和文件夹
  4. 点击列表顶部的«更多»按钮,点击«公开»
  5. 点击“公开”进行确认。尽管警告说“ ...读取此对象,读取和写入权限”,但文件将没有公共写入权限。

0

使用AWS策略生成器生成适合您需求的策略。策略生成器中的主体应该是用于访问对象的IAM用户/角色。资源ARN应该是arn:aws:s3:::mybucket/sub/dirs/are/supported/*

接下来,单击“添加语句”并遵循。您最终将获得一个表示策略的JSON。将其粘贴到“ s3存储桶策略管理”部分中,该部分位于“ AWS的s3存储桶页面->权限->存储桶策略”中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.