【问题标题】:AWS s3 cross-account policy to ensure that all accounts can readAWS s3跨账户策略,确保所有账户都能读取
【发布时间】:2018-05-04 11:34:07
【问题描述】:

我有多个 AWS 账户。假设账户 A、B 和 C,IAM 用户 IA、IB 和 IC。 B 中有一个 S3 存储桶,S3B。我已经进行了配置,因此如果 IB 将文件放入 S3B 中,所有三个用户都可以读取它。我已经能够进一步配置它,以便 IA 和 IC 可以上传——但只有他们可以读取这些文件。我能够对其进行限制,以便 IA 和 IC 也必须授予 IB 读取权限 - 但是,授予此权限仍然不允许 IA 或 IC 中的另一个读取它,并且需要来自客户端代码。

有没有什么办法可以让IA和IC上传并自动授予权限,让三个账户都有读权限?

谢谢!

【问题讨论】:

标签: amazon-web-services amazon-s3


【解决方案1】:

您的问题相当混乱,但我假设您问的是如何允许其他 AWS 账户中的用户访问 Amazon S3 存储桶(包括创建和读取文件)。

你有:

  • 帐户 A 中的用户 A
  • 帐户 B 中的存储桶 B

首先,您需要向帐户 B 添加一个允许用户 A 访问的策略。它看起来像:

{
    "Id": "Policy1",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Action": "s3:*",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::bucket-b",
                "arn:aws:s3:::bucket-b/*"
            ],
            "Principal": "arn:aws:iam::<Account-A>:user/User-A"
        }
    ]
}

请注意,此策略适用于 Account-B 中的 Bucket-B,但它授予 Account-A 中的 User-A 访问权限。

其次,User-A 需要使用 S3 的权限。这可能已经授予用户,但值得一提的是,他们需要被授予实际调用 S3 的权限。以下是他们需要的政策示例:

{
    "Id": "Policy1",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Action": "s3:*",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::bucket-b",
                "arn:aws:s3:::bucket-b/*"
            ]
        }
    ]
}

澄清一下:如果他们已经有一个允许他们在任何存储桶上调用 S3 的策略(例如 Resource: * 上的 s3:*),那么他们将不需要上述策略,因为他们已经有权调用 S3。

但是……

如果您实际上是想限制一些事情,以便用户 A 上传的文件对用户 B 是只读的,而用户 B 创建的文件对用户 A 是只读的,这很多更难,最好避免使用,除非您编写自己的管理应用程序或使用单独的路径来控制权限。

【讨论】:

    【解决方案2】:

    您可以通过在 S3 存储桶级别管理且独立于身份访问管理 (IAM) 的存储桶策略来实现此目的。 IAM、存储桶策略和对象访问控制(文件/对象级别)之间的访问联合将授予委托人(用户或组)访问权限。确保没有明确的拒绝,因为任何明确的拒绝都会胜过任何访问权限。

    https://docs.aws.amazon.com/AmazonS3/latest/dev/example-walkthroughs-managing-access-example2.html

    【讨论】:

    • 当问题的约束得到充分考虑时,我不相信它是如此简单。如果 A 拥有存储桶而 B 上传了一个对象,则 B 拥有该对象,并且 A 的存储桶所有权不赋予 A 对该对象的访问权限给 C。bucket-owner-full-control 固定 ACL 可能允许 A 进行某些覆盖,但可能不允许 A通过策略将 A 存储桶中 B 的对象暴露给 C。
    • 我认为它可以通过 ACL 实现。 docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html
    • 在受让人部分下,请看那里。我相信通过对象 ACL 授予 READ 和 READ_ACP 权限就可以了
    • 是的,但这会将负担转移给对象创建者,而不是通过存储桶策略的存储桶所有者。
    • 根据文档,ACL 可以应用于存储桶和对象级别。 docs.aws.amazon.com/AmazonS3/latest/dev/…
    猜你喜欢
    • 2017-09-13
    • 2021-02-06
    • 2021-04-25
    • 2019-04-23
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2022-09-24
    相关资源
    最近更新 更多