从 CLI 脚本批量删除 IAM 角色



我正在努力清理一个包含数百个未使用的 IAM 角色的 AWS 账户。 与其通过从控制台中一次选择几个来删除它们,我想删除所有符合其上次活动条件超过 60 天的活动。 具有list-rolesAWS 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 天内没有活动的角色? 提前感谢您的帮助。

这是 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()将所有托管策略与角色分离。

最新更新