gpt4 book ai didi

amazon-web-services - AWS CLI s3 复制失败并出现 403 错误,尝试管理用户上传的对象

转载 作者:行者123 更新时间:2023-12-04 08:32:23 25 4
gpt4 key购买 nike

尝试将文件从 S3 存储桶复制到我的本地机器:

aws s3 cp s3://my-bucket-name/audio-0b7ea3d0-13ab-4c7c-ac66-1bec2e572c14.wav ./

fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden

我已经确认的事情:
  • 我正在使用版本 aws-cli/1.11.13 Python/3.5.2 Linux/4.4.0-75-generic botocore/1.4.70
  • S3 对象 key 正确。我直接从 S3 Web 界面复制了它。
  • AWS CLI 配置了有效凭证。我生成了一个新的 key / secret 对。在重新配置 aws cli 之前,我删除了 ~/.aws 文件夹。 IAM Web 界面在线确认由 arn 指定的用户实际上是通过 CLI 使用 S3。
  • 根据 this SO post,IAM 用户被授予 S3 完全访问托管策略。 .我删除了所有这些用户的策略,然后只添加了名为 AdministratorAccess 的 AWS 托管策略,其中包括“S3、完全访问权限、所有资源”。 是否有其他方法可以通过 CLI 授予访问权限?我不相信。

  • 存储桶策略旨在授予广泛的开放访问权限:
        {
    "Sid": "AdminAccess",
    "Effect": "Allow",
    "Principal": "*",
    "Action": [
    "s3:*"
    ],
    "Resource": [
    "arn:aws:s3:::my-bucket-name",
    "arn:aws:s3:::my-bucket-name/*"
    ]
    }

    我是如何上传这个对象的?

    我使用 AWS Signature v4 签名上传策略将此对象从客户端浏览器中的 Web 应用程序直接上传到 AWS。

    最佳答案

    事实证明,查看对象属性,我可以看到 OBJECT 的所有者是“匿名”,并且“匿名”用户对该对象具有完全权限。

    我相信这就是我无法访问此对象的原因(我已通过身份验证)。示例:由于“匿名”用户具有完全权限,我可以使用 Web 浏览器通过 GET 进行访问。这是按设计运行的。 S3 存储桶用于上传文件,然后这些文件可供公众使用。

    因此,当使用上传策略发布文件时,生成的所有者为“匿名”。

    在这种情况下,acl=bucket-owner-full-control应在上传对象时使用,以便存储桶所有者可以控制对象。
    这样做,所有者仍将是“匿名的”,但是,它将授予存储桶所有者(我)完全权限,之后我应该能够通过 AWS CLI 访问该对象。

    请注意 acl=ec2-bundle-read是默认值,实际上硬编码到最新的 AWS 开发工具包中。见 https://github.com/aws/aws-sdk-java/blob/7844c64cf248aed889811bf2e871ad6b276a89ca/aws-java-sdk-ec2/src/main/java/com/amazonaws/services/ec2/util/S3UploadPolicy.java#L77

    有必要复制 S3UploadPolicy.java 进入我自己的代码库(它是一个完全可移植的小实用程序类,事实证明)并修改它以使用 acl=bucket-owner-full-control .而且我已经证实这可以通过 AWS CLI 管理上传的对象。

    关于amazon-web-services - AWS CLI s3 复制失败并出现 403 错误,尝试管理用户上传的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44051074/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com