从CLI或SDK获取AWS IAM策略Access Advisor记录

时间:2017-10-17 16:55:29

标签: amazon-web-services boto3 amazon-iam aws-cli

我正在审核过去N天内未使用过的IAM政策和角色。

在控制台中,我可以轻松查看Access Advisor下的最新用法。

我希望以自动方式获得相同内容,但我无法找到有关使用CLI或SDK获取此内容的任何文档。

这可能吗?

4 个答案:

答案 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