サービス アカウントとキーの使用状況をモニタリングする

このページでは、Cloud Monitoring を使用してサービス アカウントとサービス アカウント キーの使用状況の指標を表示する方法について説明します。これらの指標を使用すると、使用パターンを表示して追跡できます。これにより、自動的または手動で異常を特定できます。

これらの指標には、Google API(Google Cloud 以外の API を含む)の呼び出しに使用されたサービス アカウントとサービス アカウント キーが表示されます。指標には、成功した API 呼び出しと失敗した API 呼び出しの両方が含まれます。たとえば、呼び出し側に必要な権限がないため、あるいはリクエストで存在しないリソースが参照されているために API の呼び出しが失敗した場合、その API 呼び出しで使用されたサービス アカウントまたはキーも指標に表示されます。

サービス アカウント キーは、リクエストの認証中にシステムがキーを認証している場合でも、これらの指標に表示されます(システムがリクエストの認証にキーを使用していない場合も同様です)。このような動作は、Cloud Storage に署名付き URL を使用する場合や、サードパーティのアプリケーションの認証でよく行われます。その結果、認証に使用されていないキーの使用状況の指標を確認できます。

Monitoring では、サービス アカウントの指標が 6 週間保持されます。より長い期間データにアクセスする必要がある場合は、結果を定期的に BigQuery にエクスポートしてください。詳細については、ソリューションのドキュメントで Monitoring 指標のエクスポートをご覧ください。

通常は、サービス アカウントまたはサービス アカウント キーを使用した数分後に、使用状況の指標が利用できる状態になります。

始める前に

  • Enable the IAM and Cloud Monitoring APIs.

    Enable the APIs

必要なロール

サービス アカウントとキーの最近の使用状況を表示するために必要な権限を取得するには、プロジェクトに対するモニタリング閲覧者roles/monitoring.viewer)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

すべてのサービス アカウントまたはキーの使用状況の指標を表示する

サービス アカウントとサービス アカウント キーの使用状況の指標を表示するには、次の操作を行います。

コンソール

Metrics Explorer を使用してモニタリング対象リソースの指標を表示するには、次の操作を行います。

  1. Google Cloud コンソールで、[Metrics Explorer] ページに移動します。

    Metrics Explorer に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。

  2. [指標] 要素の [指標を選択] メニューを開いてフィルタバーに「IAM Service Account」と入力し、サブメニューを使用して特定のリソースタイプと指標を選択します。
    1. [有効なリソース] メニューで、[IAM Service Account] を選択します。
    2. [有効な指標カテゴリ] メニューで、[Service_account] を選択します。
    3. [有効な指標] メニューでサービス アカウントの指標を選択します。選択した期間で、次の指標を使用できます。
      • サービス アカウントの使用状況の指標として、[Service account authentication events] を選択します。
      • サービス アカウント キーの使用状況の指標を表示するには、[Service account key authentication events] を選択します。
    4. [適用] をクリックします。
  3. 表示から時系列を削除するには、[フィルタ] 要素を使用します。

  4. 時系列を結合するには、[集計] 要素のメニューを使用します。たとえば、ゾーンに基づいて VM の CPU 使用率を表示するには、最初のメニューを [平均] に設定し、2 番目のメニューを [ゾーン] に設定します。

    [集計] 要素の最初のメニューが [未集計] に設定されている場合は、すべての時系列が表示されます。[集計] 要素のデフォルト設定は、選択した指標タイプによって決まります。

  5. 割り当てと、1 日に 1 つのサンプルを報告するその他の指標については、次の操作を行います。
    1. [表示] ペインで、[ウィジェット タイプ] を [積み上げ棒グラフ] に設定します。
    2. 期間は少なくとも 1 週間に設定します。

REST

Cloud Monitoring API の timeSeries.list メソッドを使用すると、プログラムで使用状況の指標にアクセスできます。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクト IDプロジェクト ID は英数字からなる文字列です(例: my-project)。
  • METRIC_TYPE: 確認する指標のタイプ。次の値のいずれかを使用します。
    • サービス アカウントの使用状況の指標を表示するには、iam.googleapis.com%2Fservice_account%2Fauthn_events_count を使用します。
    • サービス アカウント キーの使用状況の指標を表示するには、iam.googleapis.com%2Fservice_account%2Fkey%2Fauthn_events_count を使用します。
  • END_TIME: 確認する期間の終了時間。パーセントでエンコードした RFC 3339 形式で指定します。例: 2020-06-12T00%3A00%3A00.00Z
  • START_TIME: 確認する期間の開始時間。パーセントでエンコードした RFC 3339 形式で指定します。例: 2020-04-12T00%3A00%3A00.00Z

HTTP メソッドと URL:

GET https://monitoring.googleapis.com/v3/projects/PROJECT_ID/timeSeries?filter=metric.type%3D%22METRIC_TYPE%22&interval.endTime=END_TIME&interval.startTime=START_TIME

リクエストを送信するには、次のいずれかのオプションを展開します。

使用状況の指標をプログラムで読み取る方法については、Monitoring のドキュメントで指標データの読み取りをご覧ください。

1 つのサービス アカウントの使用状況の指標を表示する

1 つのサービス アカウントの使用状況の指標を表示する手順は次のとおりです。

Console

  1. Google Cloud コンソールで、[サービス アカウント] ページに移動します。

    [サービス アカウント] に移動

  2. サービス アカウントを含むプロジェクトを選択します。

  3. サービス アカウントのメールアドレスをクリックします。

  4. [Metrics] タブをクリックします。認証トラフィックのグラフには、サービス アカウントの使用状況の指標が表示されます。

  5. 省略可: [Metrics Explorer] ページに、追加のフィルタリングと表示のオプションがあるグラフを表示するには、 > [Metrics Explorer で表示] をクリックします。

REST

Cloud Monitoring API の timeSeries.list メソッドを特定のフィルタで使用すると、1 つのサービス アカウントの使用状況の指標を取得できます。これらの指標を使用して、アカウントが最後に使用された日時を確認できます。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクト IDプロジェクト ID は英数字からなる文字列です(例: my-project)。
  • SERVICE_ACCOUNT_ID: サービス アカウントの一意の数値 ID。サービス アカウントの一意の数値 ID を調べる手順は次のとおりです。
    1. Google Cloud コンソールで、[サービス アカウント] ページに移動します。

      [サービス アカウント] ページに移動
    2. サービス アカウントのメールアドレスをクリックします。[一意の ID] フィールドの値がサービス アカウントの一意の数値 ID です。
  • END_TIME: 確認する期間の終了時間。パーセントでエンコードした RFC 3339 形式で指定します。例: 2020-06-12T00%3A00%3A00.00Z
  • START_TIME: 確認する期間の開始時間。パーセントでエンコードした RFC 3339 形式で指定します。例: 2020-04-12T00%3A00%3A00.00Z

HTTP メソッドと URL:

GET https://monitoring.googleapis.com/v3/projects/PROJECT_ID/timeSeries?filter=metric.type%3D%22iam.googleapis.com%2Fservice_account%2Fauthn_events_count%22%20AND%20resource.labels.unique_id%3D%22SERVICE_ACCOUNT_ID%22&interval.endTime=END_TIME&interval.startTime=START_TIME

リクエストを送信するには、次のいずれかのオプションを展開します。

レスポンスで返される timeSeries オブジェクトに、指定したサービス アカウントに対する最近の認証イベントがすべて含まれています。

1 つのサービス アカウント キーの使用状況の指標を表示する

1 つのサービス アカウント キーの使用状況の指標を表示する手順は次のとおりです。

Console

  1. Google Cloud コンソールで、[サービス アカウント] ページに移動します。

    [サービス アカウント] に移動

  2. キーに関連付けられたサービス アカウントを含むプロジェクトを選択します。

  3. キーに関連付けられているサービス アカウントのメールアドレスをクリックします。

  4. [Metrics] タブをクリックします。キーあたりの認証トラフィックのグラフには、サービス アカウントに関連付けられたすべてのキーの使用状況の指標が表示されます。

  5. グラフの凡例で、使用状況の指標を表示するサービス アカウント キーの ID をクリックします。グラフが更新され、そのサービス アカウント キーの指標のみが表示されます。

  6. 省略可: [Metrics Explorer] ページに、追加のフィルタリングと表示のオプションがあるグラフを表示するには、 > [Metrics Explorer で表示] をクリックします。

REST

まず、サービス アカウント キーの ID を取得します。

  1. サービス アカウント キーの一覧を表示します。

    projects.serviceAccounts.keys.list メソッドは、サービス アカウントのすべてのサービス アカウント キーを一覧表示します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクト IDプロジェクト ID は英数字からなる文字列です(例: my-project)。
    • SA_NAME: キーを一覧表示するサービス アカウントの名前。
    • KEY_TYPES: 省略可。レスポンスに含めるキータイプのカンマ区切りのリスト。キータイプは、キーがユーザー管理(USER_MANAGED)かシステム管理(SYSTEM_MANAGED)かを示します。空白のままにすると、すべてのキーが返されます。

    HTTP メソッドと URL:

    GET https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys?keyTypes=KEY_TYPES

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

    {
      "keys": [
        {
          "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/90c48f61c65cd56224a12ab18e6ee9ca9c3aee7c",
          "validAfterTime": "2020-03-04T17:39:47Z",
          "validBeforeTime": "9999-12-31T23:59:59Z",
          "keyAlgorithm": "KEY_ALG_RSA_2048",
          "keyOrigin": "GOOGLE_PROVIDED",
          "keyType": "USER_MANAGED"
        },
        {
          "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/e5e3800831ac1adc8a5849da7d827b4724b1fce8",
          "validAfterTime": "2020-03-31T23:50:09Z",
          "validBeforeTime": "9999-12-31T23:59:59Z",
          "keyAlgorithm": "KEY_ALG_RSA_2048",
          "keyOrigin": "GOOGLE_PROVIDED",
          "keyType": "USER_MANAGED"
        },
        {
          "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/b97699f042b8eee6a846f4f96259fbcd13e2682e",
          "validAfterTime": "2020-05-17T18:58:13Z",
          "validBeforeTime": "9999-12-31T23:59:59Z",
          "keyAlgorithm": "KEY_ALG_RSA_2048",
          "keyOrigin": "GOOGLE_PROVIDED",
          "keyType": "USER_MANAGED",
          "disabled": true
          "disable_reason": "SERVICE_ACCOUNT_KEY_DISABLE_REASON_EXPOSED"
          "extended_status": "SERVICE_ACCOUNT_KEY_EXTENDED_STATUS_KEY_EXPOSED"
          "extended_status_message": "exposed at: https://www.github.com/SomePublicRepo"
        }
      ]
    }
    

  2. レスポンスのメタデータを使用して、追跡するキーを特定します。次に、[name] フィールドの末尾にあるキーの一意の ID をコピーします。

    name フィールドの形式は次のとおりです。

    "name": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_EMAIL/keys/KEY_ID"

    keys/ より後のすべての部分がキーの一意の ID になります。

    たとえば、次のキー名の一意の ID は 0f561cc41650ff521899de2fd653bd3de08e2da4 です。

    "name": "projects/my-project/serviceAccounts/my-account@my-project.iam.gserviceaccount.com/keys/0f561cc41650ff521899de2fd653bd3de08e2da4"

次に、ID を使用して、サービス アカウント キーの使用状況の指標を表示します。

Cloud Monitoring API の timeSeries.list メソッドを特定のフィルタで使用すると、1 つのサービス アカウント キーの使用状況の指標を取得できます。これらの指標を使用して、キーが最後に使用された日時を確認できます。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクト IDプロジェクト ID は英数字からなる文字列です(例: my-project)。
  • KEY_ID: サービス アカウント キーの一意の ID。
  • END_TIME: 確認する期間の終了時間。パーセントでエンコードした RFC 3339 形式で指定します。例: 2020-06-12T00%3A00%3A00.00Z
  • START_TIME: 確認する期間の開始時間。パーセントでエンコードした RFC 3339 形式で指定します。例: 2020-04-12T00%3A00%3A00.00Z

HTTP メソッドと URL:

GET https://monitoring.googleapis.com/v3/projects/PROJECT_ID/timeSeries?filter=metric.type%3D%22iam.googleapis.com%2Fservice_account%2Fkey%2Fauthn_events_count%22%20AND%20metric.labels.key_id%3D%22KEY_ID%22&interval.endTime=END_TIME&interval.startTime=START_TIME

リクエストを送信するには、次のいずれかのオプションを展開します。

レスポンスで返される timeSeries オブジェクトに、指定したサービス アカウント キーに対する最近の認証イベントがすべて含まれています。

指標をエクスポートする

Monitoring を使用して指標を BigQuery にエクスポートできます。Monitoring では指標の保持期間が限定されているため、長時間の分析を行う場合には指標をエクスポートします。

手順については、ソリューションのドキュメントで Monitoring 指標のエクスポートをご覧ください。

次のステップ