我在其中一个帐户(比如帐户A)中创建了一个跨帐户IAM角色,并希望将该角色附加到另一个帐户(帐户B)中的ec2实例。
我尝试在帐户B中使用sts创建一个新角色:AssumeRole指向A中的角色并将其附加到B中的ec2实例。似乎没有工作。
ec2实例如何在A?
中承担交叉帐户角色答案 0 :(得分:17)
您无法直接将跨帐户IAM角色附加到EC2实例。拥有sts:AssumeRole
权限不会自动将一个角色假定为另一个角色。
相反:
sts:AssumeRole
的权限。然后,当您想要从EC2实例访问AWS API时:
sts:AssumeRole
以承担帐户A的跨帐户角色,以获取临时凭证。答案 1 :(得分:3)
假设有两个帐户A和B的方案,说明步骤应为:
RoleForB
)来信任帐户B ,并附加到为角色创建了 IAM策略,以使其能够在帐户A 中执行某些读取操作。 e.g ReadOnlyAccess
AssumeRoleInA
),并附加了一个策略以使其能够承担在帐户A 中创建的角色。ec2-profile
与步骤2中创建的IAM角色(AssumeRoleInA
)相关联。aws sts assume-role --role-arn "arn:aws:iam::Account_A_ID:role/RoleForB" --role-session-name "EC2FromB"
登录此EC2实例,以承担帐户A 中的角色。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"
}
}
AssumeRoleInA
的角色,然后附加相应的policy
以使其担任名为{{1 }}中的帐户A 。RoleForB
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::Account_A_ID:role/RoleForB"
]
}
]
}
。AssumeRoleInA
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"Service": "ec2.amazonaws.com"},
"Action": "sts:AssumeRole"
}
}
例如:
aws sts assume-role --role-arn "arn:aws:iam::Account_A_ID:role/RoleForB" --role-session-name "EC2FromB"`
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"
}
}
)。然后,您可以将这些值分配给环境变量stdout
互补阅读: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html
答案 2 :(得分:0)
对于上面的第5步,您也可以按照以下步骤进行导出:
Promise.all()