首页 > 解决方案 > 从 CLI 脚本中批量删除 IAM 角色

问题描述

我正在清理一个拥有数百个未使用的 IAM 角色的 AWS 账户。我不想通过从控制台一次选择几个来删除它们,我想删除所有符合他们上次活动标准的所有内容,时间超过 60 天。使用 AWS IAM CLI 命令的示例角色list-roles返回以下 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 天内没有活动的角色?在此先感谢您的帮助。

标签: bashamazon-web-servicesamazon-iamaws-cli

解决方案


这是 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().


推荐阅读