如何从另一个AWS角色承担AWS角色?

Pra*_*ant 28 python amazon-web-services amazon-iam boto3

我有两个AWS账户 - 比方说A和B.

在帐户B中,我定义了一个角色,允许从帐户A访问另一个角​​色.让我们将其称为Role-B

{
  "Version": "2012-10-17",
  "Statement": [
  {
     "Effect": "Allow",
     "Principal": {
         "AWS": "arn:aws:iam::********:role/RoleA"
     },
    "Action": "sts:AssumeRole"
  }]
}
Run Code Online (Sandbox Code Playgroud)

在帐户A中,我定义了一个允许root用户承担角色的角色.让我们称之为Role-A

{
  "Version": "2012-10-17",
  "Statement": [
  {
     "Effect": "Allow",
     "Principal": {
         "AWS": "arn:aws:iam::********:root"
     },
    "Action": "sts:AssumeRole"
  }]
}
Run Code Online (Sandbox Code Playgroud)

角色A附加了以下策略

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::****:role/RoleB",
            "Effect": "Allow"
       }]
 }
Run Code Online (Sandbox Code Playgroud)

作为帐户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'])
Run Code Online (Sandbox Code Playgroud)

此代码适用于我从客户端获得的一组角色,但不适用于我在我有权访问的两个AWS账户之间定义的角色.

Pra*_*ant 27

终于搞定了这个.以上配置是正确的.政策中存在拼写错误.

我会在这里保留这个问题,因为它可以帮助那些想要使用角色实现双跳认证的人.

  • 这真的很有帮助,谢谢.我认为你修正了政策中的拼写错误.:-) (6认同)
  • 非常感谢。经过几个小时尝试随机解决方案后,我找到了你的答案:) (2认同)
  • 谢谢你,这真的帮助了我,我遇到了问题,并陷入了 MalformedPolicyDocument: 禁止字段资源错误,而我应该使用主体声明!这有帮助:) (2认同)