ebn*_*ius 9 amazon-ec2 amazon-web-services amazon-iam
我在我的一个帐户(比如帐户A)中创建了一个跨帐户IAM角色,并希望将该角色附加到另一个帐户(帐户B)中的ec2实例.
我尝试在帐户B中使用sts创建一个新角色:AssumeRole指向A中的角色并将其附加到B中的ec2实例.似乎不起作用.
ec2实例如何在A中承担交叉帐户角色?
Mat*_*ser 20
您无法直接将跨帐户IAM角色附加到EC2实例.拥有sts:AssumeRole
权限不会自动使一个角色承担另一个角色.
代替:
sts:AssumeRole
.然后,当您想要从EC2实例访问AWS API时:
sts:AssumeRole
以承担帐户A的跨帐户角色,以获取临时凭证.Exe*_*ero 14
假设有两个账户 A 和 B 的场景,解释步骤应该是:
RoleForB
)来信任账户 B,并将IAM 策略附加到之前创建的角色以允许它在账户 A 中执行一些读取操作。e.g ReadOnlyAccess
AssumeRoleInA
)并附加了一个策略以允许它承担在账户 A 中创建的角色。ec2-profile
的 IAM 角色 ( AssumeRoleInA
)关联到您的 EC2 实例。aws sts assume-role --role-arn "arn:aws:iam::Account_A_ID:role/RoleForB" --role-session-name "EC2FromB"
。stdout
中手动或使用脚本。然后,您可以将这些值分配给环境变量 ( AWS_ACCESS_KEY_ID
, AWS_SECRET_ACCESS_KEY
, AWS_SESSION_TOKEN
)所以让我们一步一步检查上面提到的配置,但有一些模式细节:
RoleForB
并ReadOnlyAccess
为其附加权限来建立对账户 B的信任。{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::Account_B_ID:root"},
"Action": "sts:AssumeRole"
}
}
Run Code Online (Sandbox Code Playgroud)
AssumeRoleInA
然后附上相应的policy
允许它承担命名角色RoleForB
的账户A。{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::Account_A_ID:role/RoleForB"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
AssumeRoleInA
。{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"Service": "ec2.amazonaws.com"},
"Action": "sts:AssumeRole"
}
}
Run Code Online (Sandbox Code Playgroud)
aws sts assume-role --role-arn "arn:aws:iam::Account_A_ID:role/RoleForB" --role-session-name "EC2FromB"`
Run Code Online (Sandbox Code Playgroud)
例如:
jenkins@bb-jenkins-vault:~$ aws sts assume-role --role-arn arn:aws:iam::521111111144:role/DeployMaster --role-session-name "project-dev-jenkins-deploy"
{
"AssumedRoleUser": {
"AssumedRoleId": "AROAJBXGEHOQBXGEHOQ:project-dev-jenkins-deploy",
"Arn": "arn:aws:sts::521111111144:assumed-role/DeployMaster/project-dev-jenkins-deploy"
},
"Credentials": {
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "FQoGZXIvYXCUm8iG6/zLdQ7foognvCDpxKP7cRJiZgc...CUm8iG6/zLdQ7foognvCDpxKP7c+OQF",
"Expiration": "2019-03-29T15:41:02Z",
"AccessKeyId": "AKIAI44QH8DHBEXAMPLE"
}
}
Run Code Online (Sandbox Code Playgroud)
stdout
中手动或使用脚本。然后您可以将这些值分配给环境变量$ export AWS_ACCESS_KEY_ID=AKIAI44QH8DHBEXAMPLE
$ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
$ export AWS_SESSION_TOKEN=FQoGZXIvYXCUm8iG6/zLdQ...<remainder of security token>
$ aws ec2 describe-instances --region us-east-1
Run Code Online (Sandbox Code Playgroud)
补充阅读: https : //docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html
归档时间: |
|
查看次数: |
6645 次 |
最近记录: |