aws cli假设-role工作,但仍然在s3上被拒绝权限



我试图从帐户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(),然后使用返回的临时凭据进行请求的调用。