我想使用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>)
此代码可以更优化,可能是较少的调用
答案 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的角色。