跨账户访问使用boto3为AWS账户创建角色

时间:2017-04-17 10:36:06

标签: amazon-web-services roles boto3

我想使用boto3创建AWS Cross帐户角色。从Console创建角色。但是无法使用boto3创建。我有两个不同的AWS账户。我想使用Assume Role从其他帐户访问。为此,我需要在帐户1中创建权限,以便帐户2可以访问相同的帐户。但是,我只需要使用boto3执行所有功能。我使用了这段代码 -

    iam = boto3.client('iam',aws_access_key_id='XXXXX',aws_secret_access_key='YYYY')
    role = iam.create_role(RoleName=<Role Name>,AssumeRolePolicyDocument='{"Version" : "2012-10-17","Statement": [{"Effect": "Allow","Principal":{"AWS":"arn:aws:iam::<Account ID to which permission is granted>:root"} ,"Action":["sts:AssumeRole" ]}]}')
    policy = iam.create_policy(PolicyName=<Policy Name>, PolicyDocument='{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": "*","Resource": "*"}]}')
    policy_arn =  policy['Policy']['Arn']
    iam.attach_role_policy(PolicyArn=<Policy arn>,RoleName=<Name of the role to which policy need to be attached>)

此代码可以更优化,可能是较少的调用

2 个答案:

答案 0 :(得分:0)

无需优化。代码工作正常。

答案 1 :(得分:-1)

为了承担帐户B中帐户A的角色,这是程序。

在帐户A中创建具有以下信任关系的角色。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "Root arn of the account B"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

将上述json保存在其中一个文件中。然后使用上面的信任关系编写一个函数来创建一个角色。

import boto3
role_name = "Name of the role"
client = boto3.client('iam')
client.create_role(RoleName=role_name,
                   AssumeRolePolicyDocument=trust_relationship())

def trust_relationship(self, role_name):
    with open('json_file_name', 'r') as data_file:
            trust_relationship = json.load(data_file)
        return json.dumps(trust_relationship)

现在在帐户B中,使用以下json文档创建一个角色,以承担帐户A的角色。

政策文件:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole",
        "Any other required actions"
            ],
            "Resource": "*"
        }
    ]
}

现在使用此政策文件附加到帐户B中的角色,该角色随后承担帐户A的角色。