如何将驻留在账户 A 中的 s3 存储桶的访问权限授予来自多个 aws 账户的不同 iam 用户?

Posted

技术标签:

【中文标题】如何将驻留在账户 A 中的 s3 存储桶的访问权限授予来自多个 aws 账户的不同 iam 用户?【英文标题】:How to give access of s3 bucket residing in Account A to different iam users from multiple aws accounts? 【发布时间】:2021-03-27 08:21:23 【问题描述】:

我正在从事 aws SAM 项目,我需要将我的 S3 存储桶的访问权限授予来自未知 aws 帐户的多个 iam 用户,但我无法使存储桶公开访问。我想保护我的存储桶以及我希望来自任何 aws 帐户的任何 iam 用户访问我的 S3 存储桶的内容。这可能吗?

以下是我尝试过并且效果很好的策略。


    "Version": "2012-10-17",
    "Id": "Policy1616828964582",
    "Statement": [
        
            "Sid": "Stmt1616828940658",
            "Effect": "Allow",
            "Principal": 
                "AWS": "arn:aws:iam::123456789012:role/STS_Role_demo"
            ,
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::new-demo-bkt/*"
        
    ]

上述政策适用于一个用户,但我希望其他 AWS 账户中的任何用户都可以访问我的内容,而无需公开存储桶和对象,那么我该如何实现呢?

【问题讨论】:

你不能这样做。如果您不知道其他帐户,则必须将存储桶公开。 【参考方案1】:

这可以通过对传入请求使用一组条件来实现。

我能想到两个选择:

    您创建一个 IAM 角色,供您的 SAM 应用程序使用,即使在其他帐户中运行也是如此 您创建允许未知用户访问的 S3 存储桶策略

如果您决定研究 S3 存储桶策略,我建议您使用 S3 Access Point 来更好地管理访问策略。

接入点是附加到存储桶的命名网络端点 可用于执行 S3 对象操作,例如 GetObject 和放置对象。每个接入点都有不同的权限和网络 控制 S3 应用通过它发出的任何请求 切入点。每个接入点强制执行一个定制的接入点 与存储桶策略结合使用的策略 附加到底层存储桶。

您可以使用S3 Conditions 的组合来限制访问。例如,您的 SAM 应用程序可以在发出 S3 请求时包含特定的条件键,然后存储桶策略允许根据这些条件进行访问。

您还可以将global IAM conditions 应用于 S3 策略。

虽然这不是很好的安全措施,但恶意行为者可能能够找出标头并欺骗对您的存储桶的请求。正如aws:UserAgent等某些条件所指出的:

此密钥应谨慎使用。因为aws:UserAgent 的值是 由调用者在 HTTP 标头中提供,未经授权的各方可以使用 修改或自定义浏览器以提供任何 aws:UserAgent 值 他们选择。因此,aws:UserAgent 不应用于 防止未经授权的各方直接提出 AWS 请求。你可以 使用它仅允许特定的客户端应用程序,并且仅在 测试您的政策。

【讨论】:

以上是关于如何将驻留在账户 A 中的 s3 存储桶的访问权限授予来自多个 aws 账户的不同 iam 用户?的主要内容,如果未能解决你的问题,请参考以下文章

S3:如何授予对多个存储桶的访问权限?

如何允许 cognito 身份验证的用户获得对 s3 存储桶的公共访问权限

在 CloudFront 的账户之间共享 S3 存储桶

授予用户对所有外部存储桶的访问权限,但排除我们自己的帐户存储桶

向 Amazon S3 存储桶授予权限

创建单个 IAM 用户以仅访问特定的 S3 存储桶