如何从另一个 AWS 角色假设一个 AWS 角色?

我有两个 AWS 帐户-让我们说 A 和 B。

在帐户 B 中,我定义了一个角色,允许从帐户 A 访问另一个角色。让我们称之为角色 B

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::********:role/RoleA"
},
"Action": "sts:AssumeRole"
}]
}

在帐户 A 中,我已经定义了一个角色,它允许 root 用户扮演某个角色

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::********:root"
},
"Action": "sts:AssumeRole"
}]
}

角色 A 附带了以下策略

 {
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::****:role/RoleB",
"Effect": "Allow"
}]
}

作为帐户 A 的用户,我假设角色 A。现在使用这个临时凭证,我想假设角色 B 并访问帐户 B 拥有的资源

client = boto3.client('sts')


firewall_role_object = client.assume_role(
RoleArn=INTERMEDIARY_IAM_ROLE_ARN,
RoleSessionName=str("default"),
DurationSeconds=3600)


firewall_credentials = firewall_role_object['Credentials']


firewall_client = boto3.client(
'sts',
aws_access_key_id=firewall_credentials['AccessKeyId'],
aws_secret_access_key=firewall_credentials['SecretAccessKey'],
aws_session_token=firewall_credentials['SessionToken'], )


optimizely_role_object = firewall_client.assume_role(
RoleArn=CUSTOMER_IAM_ROLE_ARN,
RoleSessionName=str("default"),
DurationSeconds=3600)


print(optimizely_role_object['Credentials'])

此代码适用于我从客户端获得的角色集,但不适用于我在我可以访问的两个 AWS 帐户之间定义的角色。

39658 次浏览

终于让这个工作。以上配置是正确的。有一个拼写错误的政策。

我将把这个问题保留在这里,因为它可能有助于那些希望使用角色实现双跳身份验证的人。