サービス アカウントとキー

このページでは、GKE On-Prem をインストールするために必要な Google Cloud サービス アカウントとキーについて説明します。

サービス アカウントの概要

GKE On-Prem をインストールする前に、次のサービス アカウントが必要です。

  • 許可リストに登録されたサービス アカウント
  • Connect-register サービス アカウント
  • Connect-agent サービス アカウント
  • Logging-monitoring サービス アカウント

有効にする機能によっては、オプションのサービス アカウントも必要になる場合があります。

サービス アカウントと Google Cloud プロジェクトについて

サービス アカウントは、Google Cloud プロジェクトで作成します。サービス アカウントを作成するクラウド プロジェクトは、サービス アカウントの親プロジェクトと呼ばれます。サービス アカウントは、親プロジェクトのメンバーです。

サービス アカウントの親プロジェクトは、そのサービス アカウントのメールアドレスで確認できます。たとえば、logger という名前のサービス アカウントのメールアドレスを次に示します。親プロジェクトは alice-123 です。

logger@alice-123.iam.gserviceaccount.com

Identity and Access Management(IAM)のロールをサービス アカウントに付与する場合は、特定のクラウド プロジェクトのサービス アカウントにロールを付与します。これは、リソースの ID にロールを付与するの一般的なパターンに従っています。

たとえば、bob-456 プロジェクトの logger@alice-123.iam.gserviceaccount.com サービス アカウントに bigquery.dataEditor ロールを付与できます。この場合、サービス アカウントが ID で、Google Cloud プロジェクトがリソースです。

サービス アカウントの親プロジェクトではないプロジェクトのサービス アカウントにロールを付与できる仕組みを理解することが重要です。

許可リストに登録されたサービス アカウント

すでに許可リストに登録されたサービス アカウントがあります。

許可リストに登録されたサービス アカウント用の JSON キーファイルを作成していない場合は、ここで作成します。

gcloud iam service-accounts keys create whitelisted-key.json \
   --iam-account [ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]

ここで、[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL] は許可リストに登録されたサービス アカウントのメールアドレスです。

許可リストに登録されたサービス アカウントにロールを付与する

GKE On-Prem の構成ファイルには、Google Cloud プロジェクト ID を指定する複数のフィールドがあります。

usercluster:
  usagemetering:
    bigqueryprojectid: ""
...
gkeconnect:
  projectid: ""
...
stackdriver:
  projectid: ""
...
cloudauditlogging:
  projectid: ""

GKE On-Prem 構成ファイル内のプロジェクト ID を区別する必要はありません。たとえば、gkeconnect.projectidstackdriver.projectid と同じである場合もあります。実際には、構成ファイル内のすべてのプロジェクト ID は同じである可能性があります。

許可リストに登録されたサービス アカウントには、GKE On-Prem の構成ファイルで指定された各プロジェクトで、次の IAM ロールが付与されます。

  • serviceusage.serviceUsageViewer
  • iam.serviceAccountCreator
  • iam.roleViewer

gkeadm を使用して管理ワークステーションを作成していた場合、gkeadm は GKE On-Prem 構成ファイルの次のフィールドを、許可リストに登録されたサービス アカウントの親プロジェクトの ID に設定します。

  • gkeconnect.projectid
  • stackdriver.projectid

また、gkeadm は、許可リストに登録されたサービス アカウントの親プロジェクトに必要なロールを付与します。

管理ワークステーションの作成に gkeadm を使用していない場合は、自分で自分にロールを付与する必要があります。

GKE On-Prem の構成ファイルで指定されているプロジェクトごとに、許可リストに登録されたサービス アカウントに必要なロールを付与します。

gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member "serviceAccount:[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/serviceusage.serviceUsageViewer"
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member "serviceAccount:[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/iam.serviceAccountCreator"
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member "serviceAccount:[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/iam.roleViewer"

ここで、[PROJECT_ID] は、GKE On-Prem 構成ファイルで指定したプロジェクトの ID です。

その他の必要なサービス アカウント

許可リストに登録されたサービス アカウントに加えて、次のサービス アカウントが必要です。

  • connect-register サービス アカウント
  • connect-agent サービス アカウント
  • logging-monitoring サービス アカウント

管理ワークステーションの作成方法によっては、これらのサービス アカウントがすでに用意されている場合があります。

ケース 1: gkeadm がサービス アカウントを作成した場合。

gkeadm を使用して管理ワークステーションを作成し、--auto-create-service-accounts フラグを渡した場合は、gkeadm によって次の処理が行われます。

  • connect-register サービス アカウントが作成されます。connect-register サービス アカウントに適切な IAM ロールが付与されます。connect-register サービス アカウント用の JSON キーファイルが作成されます。管理ワークステーションに JSON キーファイルがコピーされます。

  • connect-agent サービス アカウントが作成されます。connect-agent サービス アカウントに適切な IAM ロールが付与されます。connect-agent サービス アカウント用の JSON キーファイルが作成されます。管理ワークステーションに JSON キーファイルがコピーされます。

  • logging-monitoring サービス アカウントが作成されます。logging-monitoring サービス アカウントに適切な IAM ロールが付与されます。logging-monitoring サービス アカウントに JSON キーファイルが作成されます。管理ワークステーションに JSON キーファイルがコピーされます。

gkeadm によってサービス アカウントが作成されると、Cloud プロジェクトに、許可リストに登録されたサービス アカウントの親アカウントが作成されます。また、gkeadm は同じプロジェクトのサービス アカウントにロールを付与します。複数のクラウド プロジェクトの使用については、複数の Google Cloud プロジェクトの使用をご覧ください。

ケース 2: gkeadm がサービス アカウントを作成しなかった場合。

管理ワークステーションの作成に --auto-create-service-accounts フラグが含まれた gkeadm を使用しなかった場合、独自のサービス アカウントを作成する必要があります。また、サービス アカウントごとに JSON キーファイルを作成し、適切な IAM ロールを付与する必要があります。

独自のサービス アカウントを作成する

ケース 1 で説明されるとおり、すでにサービス アカウントをお持ちの場合は、このセクションをスキップできます。

このセクションでは、GKE On-Prem をインストールして使用するために必要なサービス アカウントを作成する方法について説明します。また、サービス アカウント用の JSON キーファイルを作成する方法と、サービス アカウントに適切な IAM ロールを付与する方法も説明します。

Connect-register サービス アカウント

Connect は、このサービス アカウントを使用して GKE On-Prem クラスタを Google Cloud に登録します。

connect-register サービス アカウントを作成します。

gcloud iam service-accounts create connect-register-svc-account --project [PARENT_PROJECT_ID]

ここで、[PARENT_PROJECT_ID] は、connect-register サービス アカウントの親になるプロジェクトの ID です。

connect-register サービス アカウントのキーを作成します。

gcloud iam service-accounts keys create connect-register-key.json \
   --iam-account [CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL]

ここで、[CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL] は、connect-register サービス アカウントのメールアドレスです。

connect-register サービス アカウントに gkehub.admin ロールを付与します。

gcloud projects add-iam-policy-binding [CONNECT_PROJECT_ID] \
--member "serviceAccount:[CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/gkehub.admin"

ここで、[CONNECT_PROJECT_ID]connect プロジェクトの ID です。これは、GKE On-Prem クラスタへの接続を登録して維持するプロジェクトです。

Connect-agent サービス アカウント

Connect は、このサービス アカウントを使用して GKE On-Prem と Google Cloud 間の接続を維持します。

  1. connect-agent サービス アカウントを作成します。

    gcloud iam service-accounts create connect-agent-svc-account  --project PARENT_PROJECT_ID

    PARENT_PROJECT_ID は、connect-agent サービス アカウントの親になるプロジェクトの ID に置き換えます。

  2. connect-agent サービス アカウントのキーを作成します。

    gcloud iam service-accounts keys create connect-agent-key.json \
       --iam-account CONNECT_AGENT_SERVICE_ACCOUNT_EMAIL

    CONNECT_AGENT_SERVICE_ACCOUNT_EMAIL は、connect-agent サービス アカウントのメールアドレスに置き換えます。

  3. connect-agent サービス アカウントに gkehub.connect ロールを付与します。

    gcloud projects add-iam-policy-binding CONNECT_PROJECT_ID \
       --member "serviceAccount:CONNECT_AGENT_SERVICE_ACCOUNT_EMAIL" \
       --role "roles/gkehub.connect"

    以下を置き換えます。

    • CONNECT_PROJECT_ID: 接続プロジェクトの ID。これは、GKE On-Prem クラスタへの接続を登録して維持するプロジェクトです。
    • CONNECT_AGENT_SERVICE_ACCOUNT_EMAIL: logging-monitoring サービス アカウントのメールアドレス。

Logging-monitoring サービス アカウント

Connect は、このサービス アカウントを使用して、クラスタから Cloud Logging にログをエクスポートします。

  1. logging-monitoring サービス アカウントを作成します。

    gcloud iam service-accounts create logging-monitoring-svc-account --project PARENT_PROJECT_ID

    PARENT_PROJECT_ID を、logging-monitoring サービス アカウントの親になるプロジェクトの ID に置き換えます。

  2. logging-monitoring サービス アカウントのキーを作成します。

    gcloud iam service-accounts keys create logging-monitoring-key.json \
       --iam-account LOG_MON_SERVICE_ACCOUNT_EMAIL

    LOG_MON_SERVICE_ACCOUNT_EMAIL を、logging-monitoring サービス アカウントのメールアドレスに置き換えます。

  3. logging-monitoring サービス アカウントに stackdriver.resourceMetadata.writerlogging.logWritermonitoring.metricWritermonitoring.dashboardEditor のロールを付与します。

    gcloud projects add-iam-policy-binding LOG_MON_PROJECT_ID \
       --member "serviceAccount:LOG_MOM_SERVICE_ACCOUNT_EMAIL" \
       --role "roles/stackdriver.resourceMetadata.writer"
    gcloud projects add-iam-policy-binding LOG_MON_PROJECT_ID \
       --member "serviceAccount:LOG_MOM_SERVICE_ACCOUNT_EMAIL" \
       --role "roles/logging.logWriter"
    gcloud projects add-iam-policy-binding LOG_MON_PROJECT_ID \
       --member "serviceAccount:LOG_MON_SERVICE_ACCOUNT_EMAIL" \
       --role "roles/monitoring.metricWriter"
    gcloud projects add-iam-policy-binding LOG_MON_PROJECT_ID \
       --member "serviceAccount:LOG_MON_SERVICE_ACCOUNT_EMAIL" \
       --role "roles/monitoring.dashboardEditor"

    以下を置き換えます。

    • LOG_MON_PROJECT_ID: logging-monitoring プロジェクトの ID。これは、GKE On-Prem クラスタのログを表示するプロジェクトです。
    • LOG_MON_SERVICE_ACCOUNT_EMAIL: logging-monitoring サービス アカウントのメールアドレス。

オプションのサービス アカウント

使用状況測定サービス アカウント

GKE usage metering は、このサービス アカウントを使用して使用状況データを BigQuery データセットに保存します。

クラスタの GKE 使用状況測定を有効にするには、使用状況測定サービス アカウントが必要です。gkeadm ツールではこのサービス アカウントは作成されないため、自分で作成する必要があります。

使用状況測定サービス アカウントを作成します。

gcloud iam service-accounts create usage-metering-svc-account --project [PARENT_PROJECT_ID]

ここで、[PARENT_PROJECT_ID] は、使用状況測定サービス アカウントの親になるプロジェクトの ID です。

使用状況測定サービス アカウントのキーを作成します。

gcloud iam service-accounts keys create usage-metering-key.json \
   --iam-account [USAGE_METERING_SERVICE_ACCOUNT_EMAIL]

ここで、[USAGE_METERING_SERVICE_ACCOUNT_EMAIL] は、使用状況測定サービス アカウントのメールアドレスです。

使用状況測定サービス アカウントに bigquery.dataEditor ロールを付与します。

gcloud projects add-iam-policy-binding [USAGE_METERING_PROJECT_ID] \
--member "serviceAccount:[USAGE_METERING_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/bigquery.dataEditor"

ここで、[USAGE_METERING_PROJECT_ID] は、使用状況測定プロジェクトの ID です。これは、GKE On-Prem クラスタの使用状況データを表示するプロジェクトです。

監査ログのサービス アカウント

GKE On-Prem は、このサービス アカウントを使用して、クラスタから Kubernetes 監査ログを Cloud Audit Logs に送信します。

GKE On-Prem のインストールで Cloud Audit Logs を有効にするには、監査ログサービス アカウントが必要です。gkeadm ツールではこのサービス アカウントは作成されないため、自分で作成する必要があります。

監査ログサービス アカウントを作成します。

gcloud iam service-accounts create audit-logging-svc-account --project [PARENT_PROJECT_ID]

ここで、[PARENT_PROJECT_ID] は、監査ログサービス アカウントの親になる Google Cloud プロジェクトの ID です。

監査ログサービス アカウントのキーを作成します。

gcloud iam service-accounts keys create audit-logging-key.json \
   --iam-account [AUDIT_LOGGINGSERVICE_ACCOUNT_EMAIL]

ここで、[AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL] は、監査ログサービス アカウントのメールアドレスです。

監査ログサービス アカウントにロールを付与する必要はありません。