如何使用 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 boto3将IAM角色附加/替换为ec2

python 简单的python函数,用于从角色ARN承担AWS IAM角色并返回boto3会话对象

AWS ECS - 如何将任务的执行角色传递给 Boto3?

带有 Boto3 附加策略的所有角色列表