假设我们有两个 AWS 账户:Account-A、Account-B 和在 AccountA 上运行的 ec2 实例。
aws ec2 describe-instances
~/.aws/credentials
对于没有具有实例角色的文件的实例自己的帐户,它可以按预期工作。
我的目标是从这个实例中竞选aws ec2 describe-instances
帐户 B。
以下命令有效并输出凭证:
$ aws sts assume-role --role-arn arn:aws:iam::012345678901:role/accountb-role --role-session-name test
然而,这并不:
$ aws ec2 describe-instances --profile AccountB
'aws_access_key_id'
~/.aws/配置
[default]
region = us-east-1
[profile AccountB]
role_arn = arn:aws:iam::012345678901:role/accountb-role
source_profile = default
正如我提到的,~/.aws/credentials
由于实例使用 IAM 的实例角色,因此不存在。
accountb-role 信任关系策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::012345678900:role/accounta-role"
},
"Action": "sts:AssumeRole"
}
]
}
实例内联策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1490625590000",
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::012345678901:role/accountb-role"
]
}
]
}
accounta-role
实例角色和附加的accountb-role
股票IAM 策略都ReadOnlyAccess
。
答案1
如果仍然有人对答案感兴趣,您必须保存 aws 凭证才能在这些调用之间使用 AccountB:
aws sts assume-role --role-arn arn:aws:iam::012345678901:role/accountb-role --role-session-name test
<< 在此处保存 aws_access_key_id、aws_secret_access_key、AWS_SESSION_TOKEN>>
然后你打电话
aws configure --profile AccountB
确保您已设置它们。此外,AWS_SESSION_TOKEN 是否会在一段时间后过期
aws ec2 describe-instances --profile AccountB
本文详细解释
答案2
在您的 IAM 面板中,还可以授予跨账户 IAM 用户访问权限,这正是您正在寻找的。
http://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html