特定の IAM ユーザー、ロール、および AWS アクセスキーのアカウントアクティビティをモニタリングするにはどうすればよいですか?

最終更新日: 2022 年 1 月 5 日

特定の AWS Identity and Access Management (IAM) アイデンティティのアカウントアクティビティを閲覧およびモニタリングしたいと考えています。これはどのように実行できますか?

簡単な説明

特定の IAM アイデンティティのアカウントアクティビティを表示およびモニタリングするには、次のいずれかの AWS のサービスや機能を使用できます。

解決方法

CloudTrail イベント履歴を使用するには

注: CloudTrail を使うと過去 90 日間のイベント履歴を検索できます。

1.    CloudTrail コンソールを開きます。

2.    [イベント履歴] を選択します。

3.    [Filter] (フィルター) で、ドロップダウンメニューを選択します。その後、[User name] (ユーザー名) を選択します。
注: [AWS access key] (AWS アクセスキー) でフィルタリングすることも可能です。

4.    [Enter user or role name] (ユーザー名またはロール名の入力) テキストボックスで、IAM ユーザーの「フレンドリ名」または引き受けたロールセッション名を入力します。

5.    [Time range] (時間範囲) で、希望する時間範囲を入力します。その後、[Apply] (適用) を選択します。

6.    [Event time] (イベントの時刻) で、イベントを展開します。その後、[View event] (イベントを表示) を選択します。

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 ロールを想定することで取得する、一時的なセキュリティ認証情報を使用します。この要素には、認証情報を取得するために引き受けたロールに関する追加の詳細情報が含まれています。

注: ユーザーアクティビティが表示されないときは、CloudTrail によって AWS のサービスがサポートされており、API イベントが記録されているか確認します。詳細については、CloudTrail の AWS のサービストピックを参照してください。

Amazon CloudWatch Logs Insights を使用するには

注: CloudWatch Logs Insights を使用して、過去 90 日間を超える API 履歴を検索できます。Amazon CloudWatch Logs にログを記録するには、証跡を作成し、設定しておく必要があります。詳細については、証跡の作成を参照してください。

1.    CloudWatch コンソールを開きます。

2.    [Logs] (ログ) を選択します。

3.    [Log Groups] (ロググループ) でロググループを選択します。

4.    [Search Log Group] (ロググループを検索) を選択します。

5.    [Filter events] (イベントをフィルタリング) で、ユーザーの API コールまたは特定の API アクションを検索するクエリを入力します。その後、更新アイコンを選択します。

ログでユーザーの API コールを検索するクエリの例

注: Alice を、検索したいユーザー名に置き換えます。

{ $.userIdentity.userName = “Alice” }

ログで特定の API アクションを検索するクエリの例

注: 次のクエリ例では、DescribeInstances API アクションを検索します。

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

詳細については、CloudWatch Logs Insights のクエリ構文を参照してください。

Athena クエリを使用するには

注: Athena を使うと、過去 90 日間の CloudTrail Logs をクエリできます。

1.    Athena コンソールを開きます。

2.    [クエリエディタ] を選択します。

3.    ユースケースに基づいて、次のクエリ例のいずれかを入力します。その後、[Run query] (クエリを実行) を選択します。

特定の 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'