如何监控特定 IAM 用户、角色和 AWS 访问密钥的账户活动?

上次更新日期:2022 年 5 月 27 日

我想要查看和监控特定 AWS Identity and Access Management (IAM) 身份的账户活动。该如何操作?

简短描述

要查看和监控特定 IAM 身份的账户活动,您可以使用以下任一 AWS 服务和功能:

解决方法

使用 CloudTrail 事件历史记录

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

1.    打开 CloudTrail 控制台

2.    选择事件历史记录

3.    在筛选条件中,选择下拉菜单。然后,选择用户名
注意:您也可以按 AWS 访问密钥进行筛选。

4.    在 Enter user or role name(输入用户或角色名称)文本框中,输入 IAM 用户的“易于识别的名称”或代入的角色会话名称。

注意:特定会话的角色会话名称是在代入该角色时作为会话名称提供的值。“User name”(用户名)字段的值不是使用 IAM 角色进行调用的角色名称。 

5.    在时间范围中,输入所需的时间范围。然后,选择应用

6.    在 Event time(事件时间)中,展开事件。然后选择查看事件

userIdentity 元素包含有关发出请求的 IAM 身份类型的详细信息,以及提供的凭证。

包括用于进行 API 调用的 IAM 用户凭证的 userIdentity 元素示例

注意:Alice 替换为您要搜索的用户名,输入 IAM 用户的“易于识别的名称”或代入的角色的“会话名称”。 特定会话的角色会话名称是在代入该角色时作为会话名称提供的值。“User name”(用户名)字段的值不是使用 IAM 角色进行调用的角色名称。 

"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 Logs Insights

注意:您可以使用 CloudWatch Logs Insights 来搜索 90 天之前的 API 历史记录。您必须创建并配置跟踪,以便登录到 Amazon CloudWatch logs。有关更多信息,请参阅创建跟踪

1.    打开 CloudWatch 控制台

2.    选择日志

3.    在日志组中,选择您的日志组。

4.    选择搜索日志组

5.    在筛选事件中,输入查询以搜索用户的 API 调用或特定 API 操作。然后,选择刷新图标。

在日志中搜索用户的 API 调用的查询示例

注意:Alice 替换为您要搜索的用户名,输入 IAM 用户的“易于识别的名称”或代入的角色的“会话名称”。 特定会话的角色会话名称是在代入该角色时作为会话名称提供的值。“User name”(用户名)字段的值不是使用 IAM 角色进行调用的角色名称。

{ $.userIdentity.userName = “Alice” }

用于搜索特定 API 操作的日志的查询示例

注意:以下示例查询将搜索 DescribeInstances API 操作。

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

有关更多信息,请参阅 CloudWatch Logs Insights 查询语法

使用 Athena 查询

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

1.    打开 Athena 控制台

2.    选择查询编辑器

3.    根据您的使用案例输入以下示例查询之一。然后,选择运行查询

返回特定 IAM 用户执行的所有 CloudTrail 事件的示例查询

重要提示:athena-table 替换为您的 Athena 表名称。将 Alice 替换为您要查看其账户活动的 IAM 用户。

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

用于筛选 IAM 角色执行的所有 API 活动的示例查询

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

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

匹配角色 ARN 的示例查询

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

使用 IAM 访问密钥 ID 筛选所有活动的示例查询

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