我正在审核过去N天内未使用过的IAM政策和角色。
在控制台中,我可以轻松查看Access Advisor下的最新用法。
我希望以自动方式获得相同内容,但我无法找到有关使用CLI或SDK获取此内容的任何文档。
这可能吗?
答案 0 :(得分:2)
Netflix有一个名为Aardvark的工具可以从控制台中删除Access Advisor数据。你可能想看一下。
https://medium.com/netflix-techblog/introducing-aardvark-and-repokid-53b081bf3a7e
答案 1 :(得分:1)
答案 2 :(得分:0)
据我所知,没有。您可能会很幸运地找到使用Selenium来自动化该过程的方法,但这是一个漫长的解决方法。
使用CloudTrail也没有这样的运气。我能找到的最接近的事情是上次更新政策时。
希望亚马逊能够考虑到这一点。我已就这件事与他们联系过了。
答案 3 :(得分:0)
使用AWS开发工具包可以做到这一点。
版本:
aws-cli / 2.0.61
go1.15.3 linux / amd64
让我们在Golang中通过正确的导入来做到这一点。
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"context"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/iam"
)
首先,您要启动一个会话和一个客户端:
cfg, err := config.LoadDefaultConfig()
svc := iam.NewFromConfig(cfg)
然后,您想要获取角色列表,以遍历所有角色名称。您还可以使用特定的角色名称,因为这是获取LastUsedDate的唯一条件:
roles_iam, err := svc.ListRoles(context.Background(), &iam.ListRolesInput{
PathPrefix: aws.String("/")})
if err != nil {
fmt.Println("Error", err)
return
}
/** For simplicity and less dereferencing: more execution speed **/
roles_list := roles_iam.Roles
最后,如果需要为所有角色获取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