如何查看和跟踪特定 IAM 用户、角色和 AWS 访问密钥的账户活动历史记录?

上次更新时间:2020 年 9 月 11 日

我想要查看和监控 AWS Identity and Access Management (IAM) 身份的账户活动。

解决方法

使用 AWS CloudTrail 事件历史记录、Amazon CloudWatch 查询或 Amazon Athena 查询以访问 IAM 用户和角色的账户活动历史记录。

CloudTrail 事件历史记录

您可以使用 CloudTrail 来搜索过去 90 天的事件历史记录。

  1. 打开 CloudTrail 控制台,然后选择事件历史记录
  2. 筛选条件中,选择下拉菜单,然后选择用户名称
    注意:您也可以按 AWS 访问密钥进行筛选。
  3. 输入用户或角色名称文本框中,输入用户友好的 IAM 名称或代入的角色会话名称。
  4. 时间范围字段中,输入所需的时间范围,然后选择应用
  5. 事件时间中展开事件,然后选择查看事件

userIdentity 元素包含有关发出请求的 IAM 身份类型的详细信息,以及使用了哪些凭证。

以下是使用 IAM 用户凭证调用 API 的 userIdentity 元素示例:

注意:Alice 替换为要搜索的用户名。

"userIdentity": {
  "type": "IAMUser",
  "principalId": "AIDAJ45Q7YFFAREXAMPLE",
  "arn": "arn:aws:iam::123456789012:user/Alice",
  "accountId": "123456789012",
  "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
  "userName": "Alice"
}

以下是使用临时安全凭证的 userIdentity 元素示例:

"userIdentity": {
    "type": "AssumedRole",
    "principalId": "AROAIDPPEZS35WEXAMPLE:AssumedRoleSessionName",
    "arn": "arn:aws:sts::123456789012:assumed-role/RoleToBeAssumed/AssumedRoleSessionName", 
    "accountId": "123456789012",
    "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
    "sessionContext": {
      "attributes": {
        "mfaAuthenticated": "false",
        "creationDate": "20131102T010628Z"
      },
      "sessionIssuer": {
        "type": "Role",
        "principalId": "AROAIDPPEZS35WEXAMPLE",
        "arn": "arn:aws:iam::123456789012:role/RoleToBeAssumed",
        "accountId": "123456789012",
        "userName": "RoleToBeAssumed"
      }
   }
}

注意:CloudTrail 事件历史记录使用代入的角色会话名称作为筛选事件的用户名称。

API 调用过程使用代入一个 IAM 角色获取的临时安全凭证。该元素包含代入角色获取凭证的额外详情。

注意:如果您看不到用户活动,请确认 AWS 服务是否受支持并且 API 活动是否已由 CloudTrail 记录。有关更多信息,请参阅 CloudTrail 的 AWS 服务主题

CloudWatch 查询

您可以使用 CloudWatch 查询来搜索 90 天之前的 API 历史记录。

注意: 您必须创建并配置跟踪,以便登录到 Amazon CloudWatch logs。有关更多信息,请参阅创建跟踪

  1. 打开 CloudWatch 控制台,然后选择日志
  2. 日志组中,选择您的日志组。
  3. 选择搜索日志组
  4. 筛选事件中,输入类似于以下内容的查询,以搜索用户 API 调用的日志,然后选择刷新图标。
{ $.userIdentity.userName = “Alice” }

您还可以查询特定 API 操作。此示例查询搜索 API 操作的 DescribeInstances

{ ($.eventName = “DescribeInstances") && ($.requestParameters.userName = “Alice"  ) }

Athena 查询

您可以使用 Athena 查询 90 天前的 CloudTrail 日志。

1.    打开 Athena 控制台,然后选择查询编辑器

2.    输入以下示例查询将返回由 IAM 用户 Alice 执行的所有 CloudTrail 事件,然后选择运行查询

注意:athena-table 替换为您的 Athena 表名称

下面的示例查询会返回 IAM 用户 Alice 执行的所有 CloudTrail 事件:

SELECT *
FROM athena-table
WHERE useridentity.type = 'IAMUser'
AND useridentity.username LIKE 'Alice';

3.    输入以下示例查询来筛选某 IAM 角色执行的所有 API 活动,然后选择运行查询

注意:role-name 替换为您 IAM 角色的名称。

SELECT *
FROM athena-table
WHERE useridentity.sessionContext.sessionissuer.arn LIKE '%role-name%’
AND useridentity.sessionContext.sessionissuer.type = ‘Role’;

4.    输入以下示例查询以匹配角色 ARN,然后选择运行查询

SELECT *
FROM athena-table
WHERE useridentity.sessionContext.sessionissuer.arn = 'arn:aws:iam::account-id123456789:role/role-name'
AND useridentity.sessionContext.sessionissuer.type = ‘Role’;

5.    输入以下示例查询来筛选使用 IAM 访问密钥 ID 的所有活动,然后选择运行查询

SELECT eventTime, eventName, userIdentity.principalId,eventSource
FROM athena-table
WHERE useridentity.accesskeyid like 'AKIAIOSFODNN7EXAMPLE'