从 CLI 脚本中批量删除 IAM 角色

Posted

技术标签:

【中文标题】从 CLI 脚本中批量删除 IAM 角色【英文标题】:Batch Delete IAM Roles from CLI Script 【发布时间】:2020-06-22 13:59:54 【问题描述】:

我正在清理一个拥有数百个未使用的 IAM 角色的 AWS 账户。我不想通过从控制台一次选择几个来删除它们,我想删除所有符合其上次活动大于 60 天前的条件。使用 list-roles AWS IAM CLI 命令的示例角色返回以下 JSON:

 
        "Path": "/service-role/",
        "RoleName": "ExampleRoleName",
        "RoleId": "ExampleRoleID",
        "Arn": "ExampleRoleARN",
        "CreateDate": "ExampleRoleDate",
        "AssumeRolePolicyDocument": 
            "Version": "2012-10-17",
            "Statement": [
                
                    "Effect": "Allow",
                    "Principal": 
                        "Service": "lambda.amazonaws.com"
                    ,
                    "Action": "sts:AssumeRole"
                
            ]
        ,
        "MaxSessionDuration": 3600
    

有没有办法收集他们最近一次活动的数据并在脚本中使用这些数据来删除过去 180 天内没有活动的角色?提前感谢您的帮助。

【问题讨论】:

上一个活动可从get-role 命令获得。因此,您可以使用 list-roles 和查询来提取角色名称,然后对其进行迭代。 但是我没有把它变成答案的原因是它不是一个很好的方法。除了bash,你还知道其他编程语言吗? @Parsifal - Python 也是另一种可行的方法!我已经更新了这个问题,以便为更广泛的受众提供服务并让您回答。 【参考方案1】:

这是 Python 中的基本循环(IAM 还支持“资源”API,这有点简单,但这是我已经拥有的代码的复制粘贴编辑):

import boto3

client = boto3.client('iam')

paginator = client.get_paginator('list_roles')
for page in paginator.paginate():
    for listed_role in page['Roles']:
        role_name = listed_role['RoleName']
        role = client.get_role(RoleName=role_name)['Role']
        last_used = role.get('RoleLastUsed', ).get('LastUsedDate')
        print(f"role_name: last_used") 

注意:删除角色时,您首先必须使用client.detach_role_policy()从角色中分离所有托管策略。

【讨论】:

以上是关于从 CLI 脚本中批量删除 IAM 角色的主要内容,如果未能解决你的问题,请参考以下文章

redis cluster集群批量删除中的key

如何批量删除redis中keys

从文件名中批量删除“@2x”的 Bash 脚本/命令(视网膜图像 -> 正常)

python脚本,批量删除文件或文件夹中特定字符

redis批量删除

redis-cli批量删除key