如何使用 python boto3 将新角色权限附加到 aws 中的 iam_role?
Posted
技术标签:
【中文标题】如何使用 python boto3 将新角色权限附加到 aws 中的 iam_role?【英文标题】:How to attach new role permissions to iam_role in aws using python boto3? 【发布时间】:2021-02-20 11:19:22 【问题描述】:我正在尝试使用 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?
谢谢。
【问题讨论】:
【参考方案1】:向 IAM 角色添加新权限实际上并没有对角色进行任何更改..?
这不起作用,因为您实际上并未更新 AWS 的策略。您只是将它添加到 python 变量add_permission
。这不会自动转换为 AWS 政策的实际更改。
为此,您必须使用 put_role_policy 调用 AWS 来更新策略。
你可以试试下面的代码:
#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)
)
【讨论】:
以上是关于如何使用 python boto3 将新角色权限附加到 aws 中的 iam_role?的主要内容,如果未能解决你的问题,请参考以下文章
AWS lambda 使用启动模板和 boto3 创建 ec2 实例,仅使用所需的权限
如何使用boto3在Beanstalk上运行的应用程序中验证会话
python 简单的python函数,用于从角色ARN承担AWS IAM角色并返回boto3会话对象