假设我们有两个 AWS 帐户:Account-A、Account-B 和一个在 AccountA 上运行的 ec2 实例。
aws ec2 describe-instances
~/.aws/credentials
对于没有具有实例角色的文件的实例自己的帐户,可以按预期工作。
我的目标是aws ec2 describe-instances
从这个实例中为 Account-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/config
[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
的股票ReadOnlyAccess
IAM 策略。
如果有人仍然对答案感兴趣,您必须保存 aws 凭据才能在这些调用之间使用 AccountB:
<< 在此处保存 aws_access_key_id、aws_secret_access_key、AWS_SESSION_TOKEN>>
然后你打电话
以确保您已设置好它们。另外,AWS_SESSION_TOKEN 可以在一段时间后过期吗
这篇文章详细解释
在您的 IAM 面板中,还可以授予跨账户 IAM 用户访问权限,这听起来像是您正在寻找的。
http://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html