首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式将所有AWS内联策略转换为当前IAM角色的托管策略

以编程方式将所有AWS内联策略转换为当前IAM角色的托管策略
EN

Stack Overflow用户
提问于 2021-11-12 22:33:28
回答 2查看 413关注 0票数 2

目前,我有数百个带有内联策略的AWS角色。

我想以某种方式将这些内联策略转换为托管策略。

AWS文档有一种通过控制台进行此操作的方法。,这将是非常耗时的。

有没有人知道一种方法,或者有一个脚本通过BOTO或AWS CLI...or引导我使用某种我可以编程完成的方法?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-13 10:26:55

boto3代码将是这样的。

在此代码中,嵌入到指定IAM用户中的内联策略将被复制到客户管理策略中。

注:删除部分被注释掉。

代码语言:javascript
复制
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

代码语言:javascript
复制
response=client.list_roles()

for i in response['Roles']:
    role_name = i['RoleName']
    # print(role_name)
票数 3
EN

Stack Overflow用户

发布于 2021-11-15 10:43:21

使用@shimo代码段,以下操作可以添加错误处理并将新创建的托管策略附加到IAM角色:

代码语言:javascript
复制
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
    )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69949735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档