サービス アカウントの分析情報の管理

Recommender は推奨事項を提案するだけでなく、機械学習(ML)を使用して詳細な分析情報も提供します。この分析情報により、リソースで特徴的な使用パターンを確認できます。たとえば、プロジェクトの権限の使用状況に関する追加情報を収集できます。また、未使用のサービス アカウントを特定することもできます。一部の分析情報は、関連付けられた推奨事項の根拠を示すため、推奨事項にリンクされています。

IAM により、さまざまな種類の分析情報が提供されます。このページでは、サービス アカウントの分析情報(google.iam.serviceAccount.Insight)を管理する方法について説明します。この分析情報は、プロジェクト内で過去 90 日間使用されていないサービス アカウントの分析結果です。

始める前に

(省略可)Recommender の分析情報をご覧ください。

必要な権限

サービス アカウントの分析情報を使用するために必要な権限は、どのような作業を行いたいかによって異なります。

分析情報の表示権限

サービス アカウントの分析情報を表示するには、次の権限を含むロールが必要です。

  • recommender.iamServiceAccountinsights.get
  • recommender.iamServiceAccountinsights.list

これらの権限を最小権限の原則に従って取得するには、管理者に次のロールのいずれかを付与するよう依頼してください。

  • IAM Recommender 閲覧者(roles/recommender.iamViewer
  • IAM セキュリティ審査担当者(roles/iam.securityReviewer

あるいは、必要な権限を含む別のロールを管理者に付与してもらうこともできます。たとえば、カスタムロールや、許容範囲がより広い事前定義ロールなどです。

分析情報の変更権限

サービス アカウントの分析情報を変更するには、次の権限を含むロールが必要です。

  • recommender.iamServiceAccountinsights.get
  • recommender.iamServiceAccountinsights.list
  • recommender.iamServiceAccountinsights.update

最小権限の原則に従ってこれらの権限を取得するには、管理者に IAM Recommender 管理者ロール(roles/recommender.iamAdmin)を付与するよう依頼してください。

あるいは、必要な権限を含む別のロールを管理者に付与してもらうこともできます。たとえば、カスタムロールや、許容範囲がより広い事前定義ロールなどです。

サービス アカウントの分析情報を一覧表示する

プロジェクトのすべてのサービス アカウントの分析情報を一覧表示するには、次のいずれかの方法を使用します。

gcloud

gcloud recommender insights list コマンドを使用して、プロジェクトのすべてのサービス アカウントの分析情報を表示します。

コマンドを実行する前に、次の値を置き換えます。

  • PROJECT_ID: 分析情報を一覧表示するプロジェクトの ID。
gcloud recommender insights list --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global

出力には、プロジェクトのすべてのサービス アカウントの分析情報が含まれます。次に例を示します。

INSIGHT_ID                            LOCATION  INSIGHT_TYPE                       CATEGORY  INSIGHT_STATE  LAST_REFRESH_TIME
446303ba-2a14-49cc-b9fa-e2d2499d4f82  global    google.iam.serviceAccount.Insight  SECURITY  ACTIVE         2021-04-18T07:00:00Z
4cfd82c3-7320-4dc6-9b67-ca0756bbd54c  global    google.iam.serviceAccount.Insight  SECURITY  ACTIVE         2021-04-18T07:00:00Z
52ce7097-6787-41cd-91e9-9248147ecfaf  global    google.iam.serviceAccount.Insight  SECURITY  ACTIVE         2021-04-18T07:00:00Z
54abdb81-a7d9-4733-988b-c0e499c6d715  global    google.iam.serviceAccount.Insight  SECURITY  ACTIVE         2021-04-18T07:00:00Z
a922dd59-df0a-422d-a2a4-096195e1dae5  global    google.iam.serviceAccount.Insight  SECURITY  ACTIVE         2021-04-18T07:00:00Z

REST

Recommender API の insights.list メソッドを使用すると、プロジェクト内のすべてのサービス アカウントの分析情報が一覧表示されます。

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

  • PROJECT_ID: 分析情報を一覧表示するプロジェクトの ID。

HTTP メソッドと URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights

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

レスポンスには、プロジェクト内のすべてのサービス アカウントの分析情報が含まれます。次に例を示します。

{
  "insights": [
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
      "description": "Service account my-service-account@my-project.iam.gserviceaccount.com was inactive.",
      "content": {
        "serviceAccountId": "103185812403937829397",
        "email": "my-service-account@my-project.iam.gserviceaccount.com",
        "lastAuthenticatedTime": "2020-09-11T07:00:00Z"
      },
      "lastRefreshTime": "2021-04-18T07:00:00Z",
      "observationPeriod": "19008000s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "SERVICE_ACCOUNT_USAGE",
      "etag": "\"9d797dd04263c855\""
    },
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/4cfd82c3-7320-4dc6-9b67-ca0756bbd54c",
      "description": "Service account my-service-account2@my-project.iam.gserviceaccount.com was inactive.",
      "content": {
        "serviceAccountId": "105496400997178042131",
        "email": "my-service-account2@my-project.iam.gserviceaccount.com"
      },
      "lastRefreshTime": "2021-04-18T07:00:00Z",
      "observationPeriod": "16070400s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "SERVICE_ACCOUNT_USAGE",
      "etag": "\"783a32b635d79a4e\""
    }
  ]
}

分析情報のコンポーネントの詳細については、このページのサービス アカウントの分析情報を確認するをご覧ください。

1 つのサービス アカウントの分析情報を取得する

1 つの分析情報に関する詳細(分析情報の説明、ステータス、推奨事項など)を取得するには、次のいずれかの方法を使用します。

gcloud

分析情報の ID を指定して gcloud recommender insights describe コマンドを使用すると、1 つの分析結果に関する情報を表示できます。

  • INSIGHT_ID: 表示する分析情報の ID。ID を確認するには、プロジェクトの分析情報の一覧を表示します。
  • PROJECT_ID: 分析情報を管理するプロジェクトの ID。
gcloud recommender insights describe INSIGHT_ID \
    --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global

出力に分析情報の詳細が表示されます。たとえば、次の分析情報は、サービス アカウント my-service-account@my-project.iam.gserviceaccount.com が 2020 年 10 月 11 日以降認証されていないことを示しています。

category: SECURITY
content:
  email: my-service-account@my-project.iam.gserviceaccount.com
  lastAuthenticatedTime: '2020-10-11T07:00:00Z'
  serviceAccountId: '103185812403937829397'
description: Service account my-service-account@my-project.iam.gserviceaccount.com
  was inactive.
etag: '"9d797dd04263c855"'
insightSubtype: SERVICE_ACCOUNT_USAGE
lastRefreshTime: '2021-04-18T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82
observationPeriod: 19008000s
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

分析情報のコンポーネントの詳細については、このページのサービス アカウントの分析情報を確認するをご覧ください。

REST

1 つの分析情報を取得するには、Recommender API の insights.get メソッドを使用します。

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

  • PROJECT_ID: 分析情報を管理するプロジェクトの ID。
  • INSIGHT_ID: 表示する分析情報の ID。分析情報 ID が不明な場合は、プロジェクト内で分析情報を一覧表示することにより確認できます。分析情報の name フィールドの insights/ より後の部分が分析情報の ID です。

HTTP メソッドと URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID

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

レスポンスに分析情報が含まれます。たとえば、次の分析情報は、サービス アカウント my-service-account@my-project.iam.gserviceaccount.com が 2020 年 10 月 11 日以降認証されていないことを示しています。

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
  "description": "Service account my-service-account@my-project.iam.gserviceaccount.com was inactive.",
  "content": {
    "serviceAccountId": "103185812403937829397",
    "email": "my-service-account@my-project.iam.gserviceaccount.com",
    "lastAuthenticatedTime": "2020-09-11T07:00:00Z"
  },
  "lastRefreshTime": "2021-04-18T07:00:00Z",
  "observationPeriod": "19008000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "SERVICE_ACCOUNT_USAGE",
  "etag": "\"9d797dd04263c855\""
}

分析情報のコンポーネントの詳細については、このページのサービス アカウントの分析情報を確認するをご覧ください。

サービス アカウントの分析情報を確認する

1 回の分析情報を取得したら、その内容を確認して、ハイライトされたリソース使用量のパターンを確認できます。

分析情報のコンテンツはサブタイプによって決まります。サービス アカウントの分析情報(google.iam.serviceAccount.Insight)は、SERVICE_ACCOUNT_USAGE サブタイプを使用した分析情報をサポートしています。

SERVICE_ACCOUNT_USAGE の分析情報は次のコンポーネントから構成されます(順番は異なる場合があります)。

  • associatedRecommendations: 分析情報に関連付けられている推奨事項の ID。分析情報に関連付けられた推奨事項がない場合、このフィールドは空白になります。
  • category: IAM 分析情報のカテゴリは常に SECURITY になります。
  • content: サービス アカウントが最後に認証された時間を報告します。このフィールドには次のコンポーネントが含まれます。

    • email: サービス アカウントのメールアドレス。
    • lastAuthenticatedTime: サービス アカウントが最後に認証された時刻。サービス アカウントに記録された認証がない場合、このフィールドは含まれません。
    • serviceAccountId: サービス アカウントの一意の数値 ID。
  • description: 人が読める形式の分析情報の概要。
  • etag: 分析情報の現在の状態の一意の ID。分析情報が変わるたびに、新しい etag 値が割り当てられます。

    分析情報の状態を変更するには、既存の分析情報の etag を指定する必要があります。etag を使用すると、最後に取得した後に分析情報が変更されていない場合にのみ、オペレーションを実行できます。

  • insightSubtype: 分析情報のサブタイプ。
  • lastRefreshTime: 分析情報が最後に更新された日付。分析情報の生成に使用されたデータの鮮度を表します。
  • name: 分析情報の名前。次の形式になります。

    projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID

    プレースホルダの値は次のとおりです。

    • PROJECT_ID: 分析情報が生成されたプロジェクトの ID。
    • INSIGHT_ID: 分析情報の一意の ID。
  • observationPeriod: 分析情報の期間。分析情報の生成に使用されるソースデータは lastRefreshTime で終了し、lastRefreshTime から observationPeriod を引いた時間に開始します。
  • stateInfo: 分析情報が提案後、多くの状態遷移が発生します。

    • ACTIVE: 分析情報が生成されていますが、アクションが実行されていません。あるいは、分析情報の状態を更新せずに処理が行われています。アクティブな分析情報は、基になるデータが変更されると更新されます。
    • ACCEPTED: 分析情報に基づいて一部の操作が行われています。関連する推奨事項が CLAIMEDSUCCEEDEDFAILED のいずれかにマークされるか、もしくは分析情報が直接承認されると、分析情報は承認された状態になります。分析情報が ACCEPTED 状態の場合、分析情報のコンテンツは変更できません。承認された分析情報は、承認後 90 日間保持されます。
  • targetResources: 分析情報の対象となるプロジェクトの完全なリソース名。例: //cloudresourcemanager.googleapis.com/projects/1234567890

サービス アカウントの分析情報を ACCEPTED とマークする

アクティブな分析情報に基づいてアクションを実行する場合は、その分析情報を ACCEPTED としてマークします。ACCEPTED 状態は、この分析情報に基づいてアクションを実行したことを Recommender API に通知します。この情報は推奨事項の改善に役立ちます。

承諾された分析情報は、ACCEPTED とマークされてから 90 日間保持されます。

gcloud

分析情報 ID を指定して gcloud recommender insights mark-accepted コマンドを使用し、分析情報を ACCEPTED とマークします。

  • INSIGHT_ID: 表示する分析情報の ID。ID を確認するには、プロジェクトの分析情報の一覧を表示します。
  • PROJECT_ID: 分析情報を管理するプロジェクトの ID。
  • ETAG: 分析情報のバージョンの ID。etag を取得する方法は次のとおりです。

    1. gcloud recommender insights describe コマンドで分析情報を取得します。
    2. 出力から etag 値を見つけてコピーします(引用符も含む)。例: "d3cdec23cc712bd0"
gcloud recommender insights mark-accepted INSIGHT_ID \
    --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global \
    --etag=ETAG

出力に、ACCEPTED 状態の分析情報が表示されます。

category: SECURITY
content:
  email: my-service-account@my-project.iam.gserviceaccount.com
  lastAuthenticatedTime: '2020-10-11T07:00:00Z'
  serviceAccountId: '103185812403937829397'
description: Service account my-service-account@my-project.iam.gserviceaccount.com
  was inactive.
etag: '"39c4199dcec92848"'
insightSubtype: SERVICE_ACCOUNT_USAGE
lastRefreshTime: '2021-04-18T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82
observationPeriod: 19008000s
stateInfo:
  state: ACCEPTED
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

分析情報の状態の詳細については、このページのサービス アカウントの分析情報を確認するをご覧ください。

REST

Recommender API の insights.markAccepted メソッドを使用して、分析情報を ACCEPTED としてマークします。

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

  • PROJECT_ID: 分析情報を管理するプロジェクトの ID。
  • INSIGHT_ID: 表示する分析情報の ID。分析情報 ID が不明な場合は、プロジェクト内で分析情報を一覧表示することにより確認できます。分析情報の name フィールドの insights/ より後の部分が分析情報の ID です。
  • ETAG: 分析情報のバージョンの ID。etag を取得する方法は次のとおりです。
    1. insights.get メソッドで分析情報を取得します。
    2. レスポンスから etag 値を見つけてコピーします。

HTTP メソッドと URL:

POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID:markAccepted

JSON 本文のリクエスト:

{
  "etag": "ETAG"
}

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

レスポンスには、状態が ACCEPTED の分析情報が含まれます。

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
  "description": "Service account my-service-account@my-project.iam.gserviceaccount.com was inactive.",
  "content": {
    "serviceAccountId": "103185812403937829397",
    "email": "my-service-account@my-project.iam.gserviceaccount.com",
    "lastAuthenticatedTime": "2020-10-11T07:00:00Z"
  },
  "lastRefreshTime": "2021-04-18T07:00:00Z",
  "observationPeriod": "19008000s",
  "stateInfo": {
    "state": "ACCEPTED"
    },
  "category": "SECURITY",
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "SERVICE_ACCOUNT_USAGE",
  "etag": "\"39c4199dcec92848\""
}

分析情報の状態の詳細については、このページのサービス アカウントの分析情報を確認するをご覧ください。

次のステップ

  • サービス アカウントの使用状況の指標を使用して、サービス アカウントの使用パターンをモニタリングする。
  • Activity Analyzer を使用して、サービス アカウントとサービス アカウント キーが最後に使用された日時を確認する。
  • Recommendation Hub を使用して、プロジェクトに対するすべての推奨事項(IAM の推奨事項を含む)を表示し、管理する。