我想使用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>)
这段代码可以更优化,可能是较少的调用
无需优化。代码工作正常。
为了承担帐户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的角色。