【问题标题】:Amazon S3 Permission problem - How to set permissions for all files at once?Amazon S3 权限问题 - 如何一次为所有文件设置权限?
【发布时间】:2011-11-17 05:24:34
【问题描述】:

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

我收到了HTTP 403 Access denied 错误。我发现我需要将权限设置为view

我将如何对存储桶中的所有文件执行此操作?

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

【问题讨论】:

    标签: amazon-s3 amazon-web-services


    【解决方案1】:

    我建议您对要存储公共内容的存储桶应用存储桶策略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

    的选项

    【讨论】:

    • 以防万一其他人被这个发现,版本必须与指定的完全一致。
    • 以防万一有人想知道如何设置存储桶策略,这里是 AWS 官方文档:docs.amazonwebservices.com/AmazonS3/latest/dev/…
    • 他们还有一个有用的工具来生成这些:awspolicygen.s3.amazonaws.com/policygen.html
    • S3 Browser 是一个可以做他的 UI 工具包。它有一个免费软件版本,我认为它应该可以满足您的需求。 s3browser.com 我们使用他们的付费版本(大约 30 美元),我知道它只需点击几下就可以完成所有这些事情,以完成您不需要编码的快速任务
    • 我尝试将其复制粘贴到 S3 控制台中。它抱怨它不是有效的 json,您必须删除“资源”行之后的尾随逗号和第一个 {. 之前的初始空格
    【解决方案2】:

    您可以选择要公开的目录。

    按“更多”并将其标记为公开;它将使目录和所有文件都可以公开访问。

    【讨论】:

      【解决方案3】:

      您只能修改唯一项目(存储桶或项目)的 ACL,因此您必须一一更改它们。

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

      如果您以编程方式上传文件,请务必在上传文件时指定 ACL,这样您以后就不必修改它。使用 S3 管理应用程序(如 Cloudberry、Transmit 等)的问题在于,它们中的大多数在您上传每个文件时都使用默认 ACL(私有只读)。

      【讨论】:

        【解决方案4】:

        我使用Cloudberry Explorer 来完成这项工作:)

        【解决方案5】:

        使用S3 Browser,您可以使用 gui 更新权限,也可以递归。这是一个有用的工具,可免费用于非商业用途。

        【讨论】:

          【解决方案6】:

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

          1. 转到S3 web interface
          2. 打开需要的桶
          3. 通过单击列表左侧的复选框选择所需的文件和文件夹
          4. 点击列表顶部的«更多»按钮,点击«公开»
          5. 点击«公开»确认。尽管警告显示“...读取此对象,读取和写入权限”,但文件不会具有公共写入权限。

          【讨论】:

            【解决方案7】:

            您可以使用 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中编写类似的东西,这将导致更容易阅读。
            【解决方案8】:

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

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

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

            【讨论】:

              【解决方案9】:

              Transmit 5

              我想在此处为已经拥有名为 Transmit by Panic 的精美 FTP 应用程序的潜在 macOS 用户添加此功能。

              我已经有了 Panic,它支持 S3 存储桶(不确定这是什么版本,但我认为升级是免费的)。它还支持递归更新读写权限。

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

              它看起来不是特别快,但你可以通过 Window > Transcript 打开日志文件,这样你至少知道它正在做某事。

              【讨论】:

                【解决方案10】:

                使用AWS policy generator 生成适合您需要的策略。策略生成器中的委托人应该是您将用于访问对象的 IAM 用户/角色。 资源 ARN 应为 arn:aws:s3:::mybucket/sub/dirs/are/supported/*

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-04-30
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多