特定の 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 アイデンティティのタイプと、使用された認証情報に関する詳細が含まれています。

以下は、API コールに使用される IAM ユーザー認証情報を持つ 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 のサービスが CloudTrail でサポートされ、API イベントが記録されているか確認します。詳細については、「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'