如何跨AWS账户配置S3存储桶访问权限?含信任关系咨询
跨账户授予S3存储桶访问权限的配置步骤
1. 调整权限策略的存放位置
权限策略不能放在用户所属账户(记为账户A),必须和S3资源所在的目标账户(记为账户B)关联。你需要在账户B创建针对S3存储桶的权限策略,并附加到ExampleRole:
- 登录账户B的IAM控制台,新建策略(比如命名为
S3CrossAccountAccessPolicy),JSON示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" // 按需添加其他S3操作,比如s3:PutObject等 ], "Resource": [ "arn:aws:s3:::bucket-name-1", "arn:aws:s3:::bucket-name-1/*", "arn:aws:s3:::bucket-name-2", "arn:aws:s3:::bucket-name-2/*" // 替换为实际需要授权的存储桶ARN及对象路径 ] } ] }
- 将该策略直接附加到账户B的
ExampleRole上。
2. 配置ExampleRole的信任关系(账户B)
信任关系要明确允许账户A的指定角色来扮演ExampleRole。登录账户B的IAM控制台,找到ExampleRole并编辑信任关系,替换为以下JSON(注意替换ACCOUNT-A-ID为账户A的ID,USER-ROLE-NAME为用户常用的角色名称):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT-A-ID:role/USER-ROLE-NAME" }, "Action": "sts:AssumeRole" } ] }
如果需要放宽范围(不推荐,尽量遵循最小权限原则),也可以用"AWS": "arn:aws:iam::ACCOUNT-A-ID:root"允许账户A下所有实体,但仅限必要场景使用。
3. 给账户A的用户角色添加扮演权限(账户A)
回到账户A,找到用户常用的角色,附加你之前创建的ExamplePolicy,这个策略的作用是允许该角色调用AssumeRole获取账户B的ExampleRole凭证,JSON示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::ACCOUNT-B-ID:role/ExampleRole" } ] }
4. 用户访问流程
用户需要先通过账户A的角色获取基础凭证,再调用AssumeRole接口获取账户B的ExampleRole临时凭证,之后用该凭证访问S3存储桶。以AWS CLI为例,执行以下命令获取临时凭证:
aws sts assume-role --role-arn arn:aws:iam::ACCOUNT-B-ID:role/ExampleRole --role-session-name cross-account-s3-access
将返回的AccessKeyId、SecretAccessKey、SessionToken作为新的凭证配置,即可访问目标S3存储桶。
内容的提问来源于stack exchange,提问作者mags355
相关产品推荐
相关产品推荐

