如何查看 AWS IAM 角色的最后使用时间

75次阅读
没有评论

问题描述

想要在 AWS 中了解 IAM 角色的最后使用时间,类似于在 GUI 中选择一个角色并点击删除,然后在确认删除时显示角色的最后使用时间。用户希望能够在不使用 GUI 的情况下获取 IAM 角色的最后使用时间。最理想的情况是通过 AWS CLI 或 Boto3 脚本获取这些数据。是否有办法实现这个需求?

解决方案

请注意以下操作可能涉及 AWS 的版本差异及数据隐私,确保按照官方文档操作,并妥善保护敏感数据。

方案1:使用 Amazon CloudTrail 和 CloudWatch

Amazon CloudTrail 可以追踪所有 API 使用情况,而 CloudWatch 可以用于监控和分析日志事件。以下是如何通过 CloudTrail 和 CloudWatch 获取 IAM 角色的最后使用时间的步骤:

  1. 创建一个 CloudTrail。
  2. 在 AWS 控制台中,创建一个新的 CloudTrail。
  3. 配置 CloudTrail 将日志事件发送到 CloudWatch Logs。
  4. 在 CloudWatch 中搜索 “AssumedRole” 事件。
  5. 在 CloudWatch Logs 中,选择刚刚创建的日志组,搜索包含 “AssumedRole” 的日志事件。
  6. 这些事件将显示角色的最后使用时间以及其他相关信息。

方案2:使用 AWS SDKs 编写脚本

你可以使用 AWS SDKs 编写脚本来获取 IAM 角色的最后使用时间。以下是使用 AWS SDK for Go(Golang)编写脚本的步骤:

  1. 导入必要的包。
    go
    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"
    )
  2. 初始化 AWS 会话和 IAM 客户端。
    go
    cfg, err := config.LoadDefaultConfig()
    svc := iam.NewFromConfig(cfg)
  3. 获取角色列表,并遍历角色。
    “`go
    roles_iam, err := svc.ListRoles(context.Background(), &iam.ListRolesInput{PathPrefix: aws.String(“/”)})
    if err != nil {
    fmt.Println(“Error”, err)
    return
    }
    roles_list := roles_iam.Roles

for i := range roles_list {
role_name := roles_list[i].RoleName
// 使用 GetRoleInput 获取角色信息
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)
}

   // 检查角色是否从未使用过
   if role_info.Role.RoleLastUsed.LastUsedDate == nil {
       fmt.Printf("Role %s has never been used\n", role_name)
       // 可以将未使用的角色名称保存在一个列表中
       continue
   }
   last_used_date := *role_info.Role.RoleLastUsed.LastUsedDate
   // 处理最后使用时间数据

}
“`
通过以上步骤,你可以获取 IAM 角色的最后使用时间以及其他相关信息。

方案3:使用 AWS CLI 命令

你也可以使用 AWS CLI 命令来获取 IAM 角色的最后使用时间。以下是一个示例脚本:

#!/bin/bash

# 获取所有角色的 ARN 列表
ROLES=$(aws iam list-roles --query "Roles[*].Arn" --output text)

for ROLE in $ROLES
do
    # 使用 generate-service-last-accessed-details 命令生成服务最后访问详情
    JOBID=$(aws iam generate-service-last-accessed-details --arn $ROLE --query "JobId" --output text)

    # 使用 get-service-last-accessed-details-with-entities 命令获取最后访问详情
    NAMESPACES=$(aws iam get-service-last-accessed-details --job-id $JOBID --query "ServicesLastAccessed[*].ServiceNamespace" --output text)

    for NAMESPACE in $NAMESPACES
    do
        # 获取每个命名空间的详细信息
        aws iam get-service-last-accessed-details-with-entities --job-id $JOBID --service-namespace $NAMESPACE
    done
done

以上脚本使用了 AWS CLI 命令来生成和获取 IAM 角色的最后使用时间信息。

请根据实际情况选择适合的方案,并确保在操作 AWS 资源时遵循安全和最佳实践。

方案4:使用 AWS CLI 命令(最佳回答)

经过与 AWS 支持的咨询,可以使用 AWS CLI 的一些函数来获取 IAM 角色的最后访问时间。以下是使用 AWS CLI 命令的示例脚本:

#!/bin/bash

# 获取所有角色的 ARN 列表
ROLES=$(aws iam list-roles --query "Roles[*].Arn" --output text)

for ROLE in $ROLES
do
    # 使用 generate-service-last-accessed-details 命令生成服务最后访问详情
    JOBID=$(aws iam generate-service-last-accessed-details --arn $ROLE --query "JobId" --output text)

    # 使用 get-service-last-accessed-details-with-entities 命令获取最后访问详情
    NAMESPACES=$(aws iam get-service-last-accessed-details --job-id $JOBID --query "ServicesLastAccessed[*].ServiceNamespace" --output text)

    for NAMESPACE in $NAMESPACES
    do
        # 获取每个命名空间的详细信息
        aws iam get-service-last-accessed-details-with-entities --job-id $JOBID --service-namespace $NAMESPACE
    done
done

通过以上操作,你可以使用 AWS CLI 获取 IAM 角色的最后使用时间。请注意,根据 AWS 文档操作,确保脚本的可靠性和数据的安全性。

结论

通过以上不同的方案,你可以获取 AWS IAM 角色的最后使用时间。根据你的需求和

正文完