我正在努力清理一个包含数百个未使用的 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 天内没有活动的角色? 提前感谢您的帮助。
这是 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()
将所有托管策略与角色分离。