我有两个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用户承担角色。让我们称之为角色A
{ "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账户之间定义的角色。
终于成功了。上面的配置是正确的。该政策中有一个拼写错误。
我将在此处保留此问题,因为它可能会对希望使用角色实现双跳身份验证的人有所帮助。