我试图从帐户b访问帐户A中的s3桶
我遵循这个指南跨帐户IAM角色选项。然后,为了承担这个角色,我在代码中使用以下aws cli命令:
aws sts assume-role --role-arn "arn:aws:iam::*********:role/cross-account-s3-access" --role-session-name AWSCLI-Session
我可以看到这个角色被假设了:
{
"Credentials": {
"AccessKeyId": "********",
"SecretAccessKey": "********",
"SessionToken": "********",
"Expiration": "2021-07-29T08:46:33Z"
},
"AssumedRoleUser": {
"AssumedRoleId": "********:AWSCLI-Session",
"Arn": "arn:aws:sts::********:assumed-role/cross-account-s3-access/AWSCLI-Session"
}
}
然后,为了检查跨帐户访问是否有效,我执行以下命令,返回拒绝访问:
+ aws s3 ls s3://digibank-endofday-files-stg
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
我的问题是什么是——role-session-name国旗吗?我可能放错了值,但我找不到合适的解释。我在哪里找到它的价值?
流程如下:
- 使用永久凭据(例如来自您的IAM用户),调用
AssumeRole()
并提供所需角色的ARN - 如果您有权在此角色上调用presumerole, AWS STS将返回一组临时凭据
- 您将需要在后续调用AWS服务时使用这些凭据
所以,将来的呼叫将不会从您的IAM用户(因为它不有权限访问S3)。相反,调用将需要使用新的凭据进行。
如果你正在使用一种编程语言,你将使用这些凭证来创建一个新的Session
对象,然后使用它来进行API调用。
然而,考虑到您正在使用AWS CLI,假设调用的最简单方法是在~/.aws/config
文件中添加类似于以下内容的配置:
[profile prodaccess]
role_arn = arn:aws:iam::123456789012:role/ProductionAccessRole
source_profile = default
此配置显示:"使用默认配置文件中的我的凭据来承担此IAM角色"。
你可以这样使用:
aws s3 ls s3://digibank-endofday-files-stg --profile prodaccess
详情请参见:切换到IAM角色(AWS CLI) - AWS身份和访问管理
AWS CLI将自动调用AssumeRole()
,然后使用返回的临时凭据进行请求的调用。