Amazon web services 从CLI或SDK获取AWS IAM策略访问顾问记录

Amazon web services 从CLI或SDK获取AWS IAM策略访问顾问记录,amazon-web-services,boto3,amazon-iam,aws-cli,Amazon Web Services,Boto3,Amazon Iam,Aws Cli,我正在审查过去N天内未使用的IAM策略和角色 在控制台中,我可以在Access Advisor下轻松查看最近的使用情况 我希望以自动化的方式获得相同的结果,但我找不到任何关于使用CLI或SDK获得此结果的文档 这可能吗?据我所知,不可能。您可能会幸运地找到一种方法,可以使用Selenium来自动化该过程,但这是一个漫长的解决方法 使用CloudTrail也没有这样的运气。我能找到的最接近的事情是上次更新策略的时间 希望亚马逊能考虑到这一点。我已经联系过他们了 Netflix有一个名为Aardva

我正在审查过去N天内未使用的IAM策略和角色

在控制台中,我可以在Access Advisor下轻松查看最近的使用情况

我希望以自动化的方式获得相同的结果,但我找不到任何关于使用CLI或SDK获得此结果的文档


这可能吗?

据我所知,不可能。您可能会幸运地找到一种方法,可以使用Selenium来自动化该过程,但这是一个漫长的解决方法

使用CloudTrail也没有这样的运气。我能找到的最接近的事情是上次更新策略的时间


希望亚马逊能考虑到这一点。我已经联系过他们了

Netflix有一个名为Aardvark的工具,可以从控制台中获取Access Advisor数据。你可能想看看这个


现在可用,请查看下面的链接


这可以使用AWS SDK实现。

版本:

  • 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
}
更多信息:


我不知道这个存在。我去看看!非常方便!坦白地说,我也不知道这存在。很高兴终于有了一个api可以处理这个问题。