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

2 分钟阅读
0

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

概述

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

解决方法

CloudTrail 事件历史

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

1.    打开 CloudTrail 控制台

  1. 选择事件历史记录

  2. 筛选器中,选择下拉列表。然后,选择用户名
    **注意:您也可以按 ** AWS 访问密钥进行筛选

4.在输入用户名或角色名称文本框中,输入 IAM 用户的 “友好名称” 或代入的角色会话名称。

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

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

  2. 事件时间中,扩展事件。然后,选择查看事件

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

包含用于发出 API 调用的 IAM 用户凭证的 UserIdentity 元素示例

**注意:**用您要搜索的用户名替换 Alice。输入 IAM 用户的 “友好名称” 或代入角色的 “角色会话名称”。“ 特定会话的角色会话名称是代入该角色时作为会话名称提供的值。对于使用 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 服务是,CloudTrail 是否记录API 事件。有关更多信息,请参阅 CloudTrail 的 AWS 服务主题

使用 CloudWatch Logs Insights

**注意:**您可以使用 CloudWatch Logs Insights 来搜索过去 90 天之后的 API 历史记录。您必须创建并配置跟踪才能登录到 Amazon CloudWatch 日志。有关详细信息,请参阅创建记录

  1. 打开 CloudWatch 控制台

  2. 选择日志

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

  4. 选择搜索日志组

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

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

**注意:**用您要搜索的用户名替换 Alice。输入 IAM 用户的 “友好名称” 或代入角色的 “角色会话名称”。“ 特定会话的角色会话名称是代入该角色时作为会话名称提供的值。对于使用 IAM 角色进行的调用,用户名字段的值不是角色名称。

{ $.userIdentity.userName = "Alice" }

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

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

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

有关更多信息,请参阅 CloudWatch 日志见解查询语法

使用 Athena 查询

**注意:**您可以使用 Athena 查询过去 90 天内的 CloudTrail 日志。

1.    打开 Athena 控制台

  1. 选择查询编辑器

  2. 根据您的用例输入以下示例查询。然后,选择运行查询

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

**重要事项:用您的 ** Athena 表名替换 athena 表。将 Alice 替换为您想要查看其账户活动的 IAM 用户。

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

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

注意:角色名称替换为您的 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'

相关信息

如何使用 AWS CloudTrail 跟踪我的 Amazon EC2 实例的 API 调用?

如何使用 CloudTrail 查看我的 AWS 账户中的安全组或资源是否已更改?

AWS 官方
AWS 官方已更新 2 年前