我正在尝试使用 AWS 控制台为用户分配角色,但并没有取得很大成功。所以我创建了一个用户大卫,我创建了一个具有信任策略的角色,其中我将大卫(即 IAM 用户)分配为委托人,如下所示:-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::Account-ID:user/David"
},
"Action": "sts:AssumeRole"
}
]
}
我还为角色附加了一个策略,允许用户listbuckets
和getobject
。政策如下所示:-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allowsusertotolistbuckets",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::*"
}
]
}
现在,当我运行aws configure
并使用正确的访问密钥和秘密访问密钥以 David 用户身份进行身份验证并运行aws s3 ls
.我遇到以下情况:An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
.如何让用户代入角色。任何帮助将不胜感激。
IAM 角色不会"附加"到用户。相反,可以允许 IAM 用户代入IAM 角色。
使用 AWS CLI,他们将代入如下所示的 IAM 角色:
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/xaccounts3access --role-session-name s3-access-example
作为响应,AWS STS 将返回一组临时凭证:
{
"AssumedRoleUser": {
"AssumedRoleId": "AROA3XFRBF535PLBIFPI4:s3-access-example",
"Arn": "arn:aws:sts::123456789012:assumed-role/xaccounts3access/s3-access-example"
},
"Credentials": {
"SecretAccessKey": "9drTJvcXLB89EXAMPLELB8923FB892xMFI",
"SessionToken": "AQoXdzELDDY//////////wEaoAK1wvxJY12r2IrDFT2IvAzTCn3zHoZ7YNtpiQLF0MqZye/qwjzP2iEXAMPLEbw/m3hsj8VBTkPORGvr9jM5sgP+w9IZWZnU+LWhmg+a5fDi2oTGUYcdg9uexQ4mtCHIHfi4citgqZTgco40Yqr4lIlo4V2b2Dyauk0eYFNebHtYlFVgAUj+7Indz3LU0aTWk1WKIjHmmMCIoTkyYp/k7kUG7moeEYKSitwQIi6Gjn+nyzM+PtoA3685ixzv0R7i5rjQi0YE0lf1oeie3bDiNHncmzosRM6SFiPzSvp6h/32xQuZsjcypmwsPSDtTPYcs0+YN/8BRi2/IcrxSpnWEXAMPLEXSDFTAQAM6Dl9zR0tXoybnlrZIwMLlMi1Kcgo5OytwU=",
"Expiration": "2016-03-15T00:05:07Z",
"AccessKeyId": "ASIAJEXAMPLEXEG2JICEA"
}
}
然后,这些凭证可用于"作为 IAM 角色"而不是"作为 IAM 用户"调用 AWS 服务。
请参阅:代入角色 — AWS CLI 命令参考
为简化起见,可以定义使用 IAM 角色的配置文件。AWS CLI 将自动使用 IAM 用户凭证调用AssumeRole()
,然后使用生成的凭证进行所需的 API 调用。
下面是一个示例配置文件条目:
[profile marketingadmin]
role_arn = arn:aws:iam::123456789012:role/marketingadminrole
source_profile = user1
这是说:"使用配置文件user1
中的 IAM 用户凭证在marketingadminrole
上调用AssumeRole()
">
然后可以像这样使用它:
aws s3 ls s3://marketing-bucket --profile marketingadmin
请参阅:在 AWS CLI 中使用 IAM 角色 - AWS 命令行界面