目前,我有数百个带有内联策略的AWS角色。
我想以某种方式将这些内联策略转换为托管策略。
而AWS文档有一种通过控制台进行此操作的方法。,这将是非常耗时的。
有没有人知道一种方法,或者有一个脚本通过BOTO或AWS CLI...or引导我使用某种我可以编程完成的方法?
提前感谢
发布于 2021-11-13 10:26:55
boto3代码将是这样的。
在此代码中,嵌入到指定IAM用户中的内联策略将被复制到客户管理策略中。
注:删除部分被注释掉。
import json
import boto3
user_name = 'xxxxxxx'
client = boto3.client("iam")
response = client.list_user_policies(UserName=user_name)
for policy_name in response["PolicyNames"]:
response = client.get_user_policy(UserName=user_name, PolicyName=policy_name)
policy_document = json.dumps(response["PolicyDocument"])
response = client.create_policy(
PolicyName=policy_name, PolicyDocument=policy_document_json
)
# response = client.delete_user_policy(
# UserName=user_name,
# PolicyName=policy_name
# )更新:
对于IAM角色,将User更改为Role,将user更改为role (区分大小写)是可行的。
此外,如果您执行多个角色,请使用list_roles获取role_name。
response=client.list_roles()
for i in response['Roles']:
role_name = i['RoleName']
# print(role_name)发布于 2021-11-15 10:43:21
使用@shimo代码段,以下操作可以添加错误处理并将新创建的托管策略附加到IAM角色:
import json
import boto3
from botocore.exceptions import ClientError
role_name = 'xxxxxxxx'
account_id = '123456789'
client = boto3.client("iam")
resource = boto3.resource('iam')
response = client.list_role_policies(RoleName=role_name)
for policy_name in response["PolicyNames"]:
response = client.get_role_policy(RoleName=role_name, PolicyName=policy_name)
policy_document = json.dumps(response["PolicyDocument"])
print(policy_document)
try:
response = client.create_policy(
PolicyName=policy_name, PolicyDocument=policy_document
)
print(policy_name + 'Policy Created')
except ClientError as error:
if error.response['Error']['Code'] == 'EntityAlreadyExists':
print(policy_name + ' policy already exists')
else:
print("Unexpected error: %s" % error)
policy_arn = f'arn:aws:iam::{account_id}:policy/{policy_name}'
role = resource.Role(role_name)
role.attach_policy(PolicyArn=policy_arn)
response = client.delete_role_policy(
RoleName=role_name,
PolicyName=policy_name
)https://stackoverflow.com/questions/69949735
复制相似问题