首页 > 解决方案 > 如何使用 python boto3 将新角色权限附加到 aws 中的 iam_role?

问题描述

我正在尝试使用 python boto3 将新权限附加到现有 IAM 角色。我正在使用append()方法将新权限附加到 IAM 角色,但它并没有真正为角色添加权限。

Python:

import boto3
iam = boto3.client('iam',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY)
rolename = ROLENAME
policyname = POLICYNAME

#Get rolepolicy 
response = iam.get_role_policy(RoleName=rolename,PolicyName=policyname)
add_permission = response['PolicyDocument']['Statement']

#Assume json_perm is the  permission that needs to be attached inside Statement block of policydocument.
json_perm = """ {'Action':'*','Resource':'','Effect':'Allow'})""" 

#Attaching new permissions to the role
add_permission.append(json_perm)
print(add_permission)

#Get response after appending
new_response = iam.get_role_policy(RoleName=rolename,PolicyName=policyname)
print(new_response)

打印时add_permission,我可以看到策略文档中附加了新权限。但我无法在 AWS 控制台中看到该权限,并且在附加后,如果我打印new_response,我也无法在输出终端中看到新添加的权限。

将新权限附加到 IAM 角色实际上不会对角色进行任何更改..?如何使用 python boto3 将新权限附加到 IAM 角色 PolicyDocument?

谢谢。

标签: pythonamazon-web-servicesboto3amazon-iam

解决方案


将新权限附加到 IAM 角色实际上不会对角色进行任何更改..?

这不起作用,因为您实际上并未在 AWS 更新策略。您只是将它添加到 python 变量add_permission中。这不会自动转化为 AWS 策略的实际更改。

为此,您必须使用对 AWS 的put_role_policy调用来更新策略。

您可以尝试以下代码:

#Get rolepolicy 
response = iam.get_role_policy(
    RoleName=rolename,
    PolicyName=policyname)

add_permission = response['PolicyDocument']
#print(add_permission)

#Attaching new permissions to the role
#add_permission.append(json_perm)
#print(add_permission)

# NOT a good idea to allow all actions on all resources
add_permission['Statement'].append({
                       'Action':'*',
                       'Resource':'*',
                       'Effect':'Allow',
                       'Sid': 'AllowAlll'})

response = iam.put_role_policy(
    RoleName=rolename,
    PolicyName=policyname,
    PolicyDocument=json.dumps(add_permission)
)

推荐阅读