【发布时间】:2017-10-17 16:55:29
【问题描述】:
我正在审查过去 N 天内未使用的 IAM 政策和角色。
在控制台中,我可以在 Access Advisor 下轻松查看最近的使用情况。
我想以自动化的方式获得相同的结果,但我找不到任何有关使用 CLI 或 SDK 获得它的文档。
这可能吗?
【问题讨论】:
标签: amazon-web-services boto3 amazon-iam aws-cli
我正在审查过去 N 天内未使用的 IAM 政策和角色。
在控制台中,我可以在 Access Advisor 下轻松查看最近的使用情况。
我想以自动化的方式获得相同的结果,但我找不到任何有关使用 CLI 或 SDK 获得它的文档。
这可能吗?
【问题讨论】:
标签: amazon-web-services boto3 amazon-iam aws-cli
Netflix 有一个名为 Aardvark 的工具,用于从控制台抓取 Access Advisor 数据。你可能想看看那个。
https://medium.com/netflix-techblog/introducing-aardvark-and-repokid-53b081bf3a7e
【讨论】:
【讨论】:
据我所知,没有。您可能会很幸运地找到一种使用 Selenium 来自动化该过程的方法,但这是一个漫长的解决方法。
使用 CloudTrail 也没有这样的运气。我能找到的最接近的信息是上次更新政策的时间。
希望亚马逊会考虑到这一点。我已经就此事联系过他们。
【讨论】:
这可以使用 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
【讨论】: