当前位置: 首页 > 知识库问答 >
问题:

S3 网站跨账户权限不起作用

郎祯
2023-03-14

如果将对象放入不同帐户(“帐户B”)的“帐户A”所拥有的存储桶中,您将无法从“帐户A”(存储桶所有者)通过S3静态网站(http)访问文件。

无论在所有对象上授予GetObject的存储桶策略如何,也无论存储桶-所有者-完全控制ACL是否在对象上启用,这都是正确的。

  • 如果尝试通过S3API(控制台/cli)从帐户a下载文件,它可以正常工作
  • 如果试图通过S3静态网站(http)从帐户a下载文件,如果文件是由帐户B上传的,则S3响应http 403禁止。由帐户a上传的文件下载罚款
  • 禁用对象ACL可以修复该问题,但不可行(如下所述)

我有一个独特的设置,需要将文件从不拥有存储桶的帐户发布到S3存储桶。

上传操作工作正常。我的问题是,如果文件是从其他帐户发布的,我无法通过S3静态网站访问bucket所有者帐户中的文件(403禁止响应)。

只有当文件从不同的帐户被推送到S3时,问题才会存在。因为问题仅出在这些文件上,所以问题似乎出在对象所有权ACL配置上。我已经确认我可以通过S3静态网站endpoint访问bucket中的其他文件(不是由其他帐户上传的),因此我知道我的bucket策略和VPCendpoint配置是正确的。

如果我完全禁用对象ACL,它可以正常工作,但是由于两个问题,我无法做到这一点:

    < li>Ansible不支持将文件发布到禁用ACL的存储桶。(禁用ACL是相对较新的S3功能,Ansible不支持它) < li >我用来(适当地)发布文件的主要实用程序也不支持发布到禁用ACL的存储桶。(禁用ACL是相对较新的S3功能,因此不支持它)

由于上述这些约束,我必须使用存储桶上启用的对象 ACL。我已经尝试了“对象编写器”和“存储桶拥有者首选”的设置,两者都不起作用。所有文件都使用存储桶拥有者完全控制对象 ACL 上传。

如前所述,禁用ACL可以修复一切,但由于我的客户端工具(Anable和Aply)在没有ACL集的情况下无法上传到S3,因此ACL必须保持启用状态。(禁用ACL是S3的一项相对较新的功能,于2021年底添加)

>

  • Buckettest-buc-a位于“帐户A”中,它不是“私有”存储桶,但不允许公共访问。访问是通过策略授予的(下面的片段)。

    存储桶对象(文件)从“账户 B”角色推送到测试存储桶 a

    • 通过策略(此处未显示)授予从“帐户B”将文件放入存储桶的访问权限。文件上传没有问题
    • 上传时,对象被赋予<code>bucket-owner完全控制

    我已验证ACL的外观正确,并且“帐户A”和“帐户B”都具有对象访问权限。(问题底部的截图)

    我试图通过S3静态网站访问(通过http)从bucket-owner帐户(帐户A)访问文件。我可以访问不是由“帐户B”上传的文件,但是由“帐户B”上传的文件返回403禁止

    以下是如何使用Ansible上传该文件的示例:

    提醒:进行上传的角色不是bucket所有者帐户的一部分。

    - name: "publish gpg pubkey to s3 from Account B"
      aws_s3:
        bucket: "test-bucket-a"
        object: "/files/pubkey.gpg"
        src: "/home/file/pubkey.gpg"
        mode: "put"
        permission: "bucket-owner-full-control"
    

    我正在使用 VPC 终端节点进行访问,这已添加到存储桶策略中。所有需要的路由和endpoint配置都已就地。我知道我的策略配置是好的,因为如果我禁用对象ACL,一切都可以完美地工作。

    {
        "Sid": "AllowGetThroughVPCEndpoint",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::test-bucket-a/*",
        "Condition": {
          "StringEquals": {
            "aws:sourceVpce": "vpce-0bfb94<scrubbed>"
          }
        }
    },
    

    一些关键故障排除注意事项:

      < li >当登录到控制台时,我可以从“帐户A”下载文件。这非常奇怪,表明API对GetObject的请求正在工作。S3网站的配置遵循一些不同的规则结构吗?? < li >当从HTTPendpoint(S3网站)访问文件时,从“帐户A”返回HTTP 403禁止 < li >我已经多次尝试删除并重新上传该文件。 < li >我尝试过通过aws cli手动设置对象ACL(例如:< code > AWS s3api put-object-ACL-ACL bucket-owner-full-control...) < li >授予“公共”ACL,例如< code>public-read和< code>public-read-write解决了访问问题,但是存储桶内容应该只能从VPC内部访问 < li >当查看“对象”ACL时,我已确认“帐户A”和“帐户B”都具有访问权限。见下图截图。请注意,它确认对象所有者是外部帐户。

  • 共有1个答案

    陶刚豪
    2023-03-14

    这个问题一直是Ansible的错。

    尽管在上传期间设置了< code >权限:“bucket-owner-full-control”,但该设置无法正常工作。我相信作为这个问题的副作用:https://github . com/ansi ble-collections/Amazon . AWS/issues/219

    修复:

    最后,我做了一个ansible-galaxy集合安装-升级amazon.aws,并尝试重新上传文件,一切都按预期进行。

     类似资料:
    • 本章将详细介绍百度统计分析云的账户权限系统。通过对账户权限的管理,您可以实现将自有的分析云站点授权给其他账户,并控制被授权账户可见/可操作的功能范围,数据范围及资源范围。 账户权限的相关概念 功能权限及配置 资源权限及配置 数据权限及配置

    • 帐户是存储在区块链中的人类可读标识符。 每个交易都根据配置的帐户权限对其权限进行评估。 每个已命名的权限都有一个阈值,必须满足该权限下签署的交易才能被视为有效的阈值。 交易 通过使用已经安装和解锁钱包的客户端来签署。 钱包是保护和利用你的密钥的软件。 这些密 钥可能授权也可能不授权区块链上的账户权限。 钱包 钱包是一个存储可能与账户有关的密匙的客户端。通常情况下,钱包有锁定和解锁两种状态并通过 一

    • 使用指南 - 账户管理 - 站点管理 - 什么是权限网站(如何看到其它账户的报告) 权限网站:如果您接受了其他账户某一站点的网站报告授权,该站点即成为了您的权限站点。 该站点的域名和权限来源账户会在“网站列表”的“权限网站列表”中展示。 其他账户在授权时会设置您可以查看报告的范围。 当您选中权限站点查看数据的时候,如果左侧菜单栏中的某些报告是不可点击的,则证明您没有查看改分析报表的权限。 如果您有

    • 问题内容: 我正在尝试创建一个可以从Gallery应用程序获取图像并将其显示在imageButton上的简单应用程序。我正在运行Android 5.0.1的手机上使用API​​ 21进行测试。不幸的是,无论我尝试什么,即使我指定了权限,我仍然会遇到安全错误。 我获取图像的代码是: 当我尝试从Dropbox选择图像时,该代码有效,但是当我从图库中选择图像时,我得到 我将READ_EXTERNAL_S

    • 我使用GoogleAPI php客户端库访问网站管理员工具数据。当我想列出网站地图时,它出现了致命错误:未捕获的异常“Google\u Service\u exception”(403)用户没有足够的网站权限。另见:https://support.google.com/webmasters/answer/2451999.'我将服务帐户电子邮件地址添加为我网站的限制用户,但错误仍然存在。 最后我找到

    • 我正在开发一个应用程序,它需要AndroidMarshmallow的位置权限。我遵循了实现它所需的所有步骤(函数调用)。当我运行应用程序时,它会弹出一个请求用户权限的框。当我选择是时,它会显示另一个弹出窗口,上面写着“检测到屏幕覆盖”,并将我带到显示应用程序列表的设置屏幕。在那里,我取消选中所有应用程序,然后按后退按钮返回我的应用程序。当调用回调时,我可以看到权限未被授予。它一直在发生。 为什么它