このページでは、GKE On-Prem をインストールするために必要な Google Cloud サービス アカウントとキーについて説明します。
サービス アカウントの概要
GKE On-Prem をインストールする前に、次のサービス アカウントが必要です。
- 許可リストに登録されたサービス アカウント
- Connect-register サービス アカウント
- Connect-agent サービス アカウント
- logging-monitoring サービス アカウント
有効にする機能によっては、オプションのサービス アカウントも必要になる場合があります。
サービス アカウントと Google Cloud プロジェクトについて
サービス アカウントは、Google Cloud プロジェクトで作成します。サービス アカウントを作成する Google Cloud プロジェクトは、サービス アカウントの親プロジェクトと呼ばれます。サービス アカウントは、親プロジェクトのメンバーです。
サービス アカウントの親プロジェクトは、そのサービス アカウントのメールアドレスで確認できます。たとえば、logger
という名前のサービス アカウントのメールアドレスを次に示します。親プロジェクトは alice-123
です。
logger@alice-123.iam.gserviceaccount.com
Identity and Access Management(IAM)のロールをサービス アカウントに付与する場合は、特定の Google Cloud プロジェクトのサービス アカウントにロールを付与します。これは、リソースの 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.projectid
が stackdriver.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
によってサービス アカウントが作成されると、Google Cloud プロジェクトに、許可リストに登録されたサービス アカウントの親アカウントが作成されます。また、gkeadm
は同じプロジェクトのサービス アカウントにロールを付与します。複数の Google Cloud プロジェクトの使用については、複数の 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 間の接続を維持します。
connect-agent サービス アカウントを作成します。
gcloud iam service-accounts create connect-agent-svc-account --project [PARENT_PROJECT_ID]
ここで、[PARENT_PROJECT_ID] は、connect-agent サービス アカウントの親になるプロジェクトの ID です。
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 サービス アカウントのメールアドレスです。
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] は connect プロジェクトの ID です。これは、GKE On-Prem クラスタへの接続を登録して維持するプロジェクトです。
logging-monitoring サービス アカウント
Connect は、このサービス アカウントを使用して、クラスタから Cloud Logging にログをエクスポートします。
logging-monitoring サービス アカウントを作成します。
gcloud iam service-accounts create logging-monitoring-svc-account --project [PARENT_PROJECT_ID]
ここで、[PARENT_PROJECT_ID] は、logging-monitoring サービス アカウントの親になるプロジェクトの ID です。
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 サービス アカウントのメールアドレスです。
logging-monitoring サービス アカウントに stackdriver.resourceMetadata.writer
、logging.logWriter
、monitoring.metricWriter
のロールを付与します。
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"
ここで、[LOG_MON_PROJECT_ID] は、logging-monitoring プロジェクトの ID です。これは、GKE On-Prem クラスタのログを表示するプロジェクトです。
オプションのサービス アカウント
使用状況測定サービス アカウント
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] は、監査ログサービス アカウントのメールアドレスです。
監査ログサービス アカウントにロールを付与する必要はありません。