Это возможно с помощью AWS SDK.
После завершения этой задачи я чистил вкладки и решил написать ответ, чтобы помочь другим людям.
Версии:
aws-cli/2.0.61
go1.15.3 Linux/AMD64
Давайте сделаем это в Golang с правильным импортом.
#! /bin/bash
ROLES=$(aws iam list-roles | jq -r .Roles[].Arn)
for ROLE in $ROLES
do
echo $ROLE
JOBID=$(aws iam generate-service-last-accessed-details --arn $ROLE | jq -r .JobId)
echo $JOBID
NAMESPACES=$(aws iam get-service-last-accessed-details --job-id $JOBID | jq -r .ServicesLastAccessed[].ServiceNamespace)
for NAMESPACE in $NAMESPACES
do
echo $NAMESPACE
aws iam get-service-last-accessed-details-with-entities --job-id $JOBID --service-namespace $NAMESPACE | jq '.JobCompletionDate,.EntityDetailsList[].EntityInfo.Name,.EntityDetailsList[].EntityInfo.Id'
done
done
Сначала вы хотите инициализировать сеанс и клиент:
aws iam get-service-last-accessed-details-with-entities
Затем вы хотите получить список ролей для перебора всех имен ролей. Вы также можете использовать определенное имя роли, потому что это единственное, что вам нужно для получения LastUsedDate:
aws iam generate-service-last-accessed-details
Наконец, выполните итерацию по циклу, если вам нужно получить LastUsedDate для всех ролей. Просто установите ввод с правильными аргументами GetRoleInput, а затем вызовите svc.GetRole, чтобы получить структуру с вашей информацией.
/** Declare slice 'unused_roles' containing string unused role names **/
var unused_roles []string
for i := range roles_list {
role_name := *roles_list[i].RoleName
input := &iam.GetRoleInput{
RoleName: aws.String(*roles_list[i].RoleName),
}
role_info, err := svc.GetRole(context.Background(), input)
if err != nil {
fmt.Println("Error", err)
}
/** Check if role has never been used **/
if (role_info.Role.RoleLastUsed.LastUsedDate) == nil {
fmt.Printf("Role %s has never been used\n", role_name)
unused_roles = append(unused_roles, role_name)
continue
}
last_used_date := *role_info.Role.RoleLastUsed.LastUsedDate
}
Дополнительная информация:
https://docs.aws.amazon.com/IAM/latest/APIReference/API_Role.html
https://docs.aws.amazon.com/IAM/latest/APIReference/API_RoleLastUsed.html