このドキュメントでは、Google Distributed Cloud の実装でクラスタの作成に必要な Google Cloud サービス アカウントとキーについて説明します。
ここでは手順全体を詳しく解説します。サービス アカウントの使用に関する概要については、最小限のインフラストラクチャを設定するをご覧ください。
始める前に
サービス アカウントの概要
管理者クラスタとユーザー クラスタを作成する前に、次のサービス アカウントが必要です。
- コンポーネント アクセス サービス アカウント
- Connect-register サービス アカウント
- logging-monitoring サービス アカウント
有効にする機能によっては、オプションのサービス アカウントも必要になる場合があります。
サービス アカウントと Google Cloud プロジェクトについて
サービス アカウントは、作成時に Google Cloud プロジェクトに関連付けます。この Google Cloud プロジェクトをサービス アカウントの親プロジェクトといいます。
サービス アカウントの親プロジェクトは、そのサービス アカウントのメールアドレスで確認できます。たとえば、logger
という名前のサービス アカウントのメールアドレスを次に示します。親プロジェクトは alice-123
です。
logger@alice-123.iam.gserviceaccount.com
Identity and Access Management(IAM)のロールをサービス アカウントに付与する場合は、特定の Google Cloud プロジェクトのサービス アカウントにロールを付与します。これは、リソースのプリンシパルにロールを付与するの一般的なパターンに従っています。
たとえば、bob-456
プロジェクトの logger@alice-123.iam.gserviceaccount.com
サービス アカウントに bigquery.dataEditor
ロールを付与できます。この場合、サービス アカウントがプリンシパルで、Google Cloud プロジェクトがリソースです。
重要なことは、サービス アカウントの親でない Google Cloud プロジェクトのサービス アカウントにロールを付与できる点です。
サービス アカウントにロールを付与する権限
各サービス アカウントに、関連する Google Cloud プロジェクトに対する特定のロールを付与する必要があります。たとえば、connect-register サービス アカウントには、フリート ホスト プロジェクトの gkehub.editor
ロールが付与されている必要があります。
Google Cloud プロジェクトに対するロールを付与するには、プロジェクトに対する特定の権限が必要です。詳しくは、ロールについての roles/resourcemanager.projectIamAdmin
をご覧ください。
必要な権限があれば、自分でロールを付与できます。それ以外の場合は、組織内の別のユーザーがロールを付与する必要があります。
gkeadm
を使用してサービス アカウントを自動的に作成する
このページでは、サービス アカウントを手動で作成して、サービス アカウントにロールを付与する方法を説明します。手動で行う代わりに、管理者ワークステーションの作成時に gkeadm
でサービス アカウントを作成してロールを付与することもできます。詳細については、管理ワークステーションの作成をご覧ください。
コンポーネント アクセス サービス アカウント
Google Distributed Cloud は、このサービス アカウントを使用して、ユーザーに代わって Container Registry からクラスタ コンポーネントをダウンロードします。
コンポーネント アクセス サービス アカウントを作成するには、次のコマンドを実行します。
gcloud iam service-accounts create component-access-sa \ --display-name "Component Access Service Account" \ --project PROJECT_ID
PROJECT_ID は、サービス アカウントの親プロジェクトとして使用する、Google Cloud プロジェクトの ID に置き換えます。
コンポーネント アクセス サービス アカウントの JSON キーを作成するには、次のコマンドを実行します。
gcloud iam service-accounts keys create component-access-key.json \ --iam-account SERVICE_ACCOUNT_EMAIL
SERVICE_ACCOUNT_EMAIL は、コンポーネント アクセス サービス アカウントのメールアドレスに置き換えます。
コンポーネント アクセス サービス アカウントにロールを付与する
コンポーネント アクセス サービス アカウントには、フリート ホスト プロジェクトに対する次の IAM ロールが付与されている必要があります。これらのロールは、Google Distributed Cloud がプリフライト チェックを実行するために必要です。
serviceusage.serviceUsageViewer
iam.roleViewer
iam.serviceAccountViewer
compute.viewer
ロールを付与するには:
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/serviceusage.serviceUsageViewer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/iam.roleViewer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/iam.serviceAccountViewer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/compute.viewer"
次のように置き換えます。
FLEET_HOST_PROJECT_ID: フリート ホスト プロジェクトの ID。
SERVICE_ACCOUNT_EMAIL: コンポーネント アクセス サービス アカウントのメールアドレス。
Connect-register サービス アカウント
Google Distributed Cloud は、このサービス アカウントを使用して、クラスタをフリートに登録します。
connect-register サービス アカウントを作成するには、次のコマンドを実行します。
gcloud iam service-accounts create connect-register-sa \ --project PROJECT_ID
PROJECT_ID は、connect-register サービス アカウントの親に設定する Google Cloud プロジェクトの ID に置き換えます。
connect-register サービス アカウントの JSON キーを作成するには、次のコマンドを実行します。
gcloud iam service-accounts keys create connect-register-key.json \ --iam-account SERVICE_ACCOUNT_EMAIL
SERVICE_ACCOUNT_EMAIL は、connect-register サービス アカウントのメールアドレスに置き換えます。
connect-register サービス アカウントには、フリートホスト プロジェクトの gkehub.editor
ロールを付与する必要があります。
connect-register サービス アカウントに gkehub.editor
ロールを付与します。
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/gkehub.editor"
logging-monitoring サービス アカウント
Google Distributed Cloud は、このサービス アカウントを使用して、クラスタから Cloud Logging と Cloud Monitoring にログと指標をエクスポートします。
logging-monitoring サービス アカウントを作成するには、次のコマンドを実行します。
gcloud iam service-accounts create logging-monitoring-sa \ --project=PROJECT_ID
PROJECT_ID は、logging-monitoring サービス アカウントの親に設定する Google Cloud プロジェクトの ID に置き換えます。
logging-monitoring サービス アカウントの JSON キーを作成するには、次のコマンドを実行します。
gcloud iam service-accounts keys create logging-monitoring-key.json \ --iam-account SERVICE_ACCOUNT_EMAIL
ロギング モニタリング サービス アカウントには、フリート ホスト プロジェクトに対する次のロールが付与されている必要があります。
opsconfigmonitoring.resourceMetadata.writer
logging.logWriter
monitoring.metricWriter
monitoring.dashboardEditor
kubernetesmetadata.publisher
必要なロールを logging-monitoring サービス アカウントに付与するには、次のコマンドを実行します。
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/opsconfigmonitoring.resourceMetadata.writer" gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/logging.logWriter" gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/monitoring.metricWriter" gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/monitoring.dashboardEditor" gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/kubernetesmetadata.publisher"
SERVICE_ACCOUNT_EMAIL は、logging-monitoring サービス アカウントのメールアドレスに置き換えます。
オプションのサービス アカウント
監査ロギング サービス アカウント
Google Distributed Cloud は、このサービス アカウントを使用して、クラスタから Kubernetes 監査ログを Cloud Audit Logs に送信します。
監査ロギング サービス アカウントを作成するには、次のコマンドを実行します。
gcloud iam service-accounts create audit-logging-sa \ --project PROJECT_ID
PROJECT_ID は、監査ロギング サービス アカウントの親に設定する Google Cloud プロジェクトの ID に置き換えます。
監査ロギング サービス アカウントの JSON キーを作成するには、次のコマンドを実行します。
gcloud iam service-accounts keys create audit-logging-key.json \ --iam-account SERVICE_ACCOUNT_EMAIL
SERVICE_ACCOUNT_EMAIL は、監査ロギング サービス アカウントのメールアドレスに置き換えます。
監査ロギング サービス アカウントにロールを付与する必要はありません。
使用状況測定サービス アカウント
Google Distributed Cloud では、このサービス アカウントを使用して、BigQuery データセットに使用状況データを保存します。
使用状況測定サービス アカウントを作成するには、次のコマンドを実行します。
gcloud iam service-accounts create usage-metering-sa \ --project PROJECT_ID
PROJECT_ID は、使用状況測定サービス アカウントの親に設定する Google Cloud プロジェクトの ID に置き換えます。
使用状況測定サービス アカウントの JSON キーを作成するには、次のコマンドを実行します。
gcloud iam service-accounts keys create usage-metering-key.json \ --iam-account SERVICE_ACCOUNT_EMAIL
SERVICE_ACCOUNT_EMAIL は、使用状況測定サービス アカウントのメールアドレスに置き換えます。
使用状況測定サービス アカウントには、使用状況測定プロジェクトに対する bigquery.dataEditor
ロールが付与されている必要があります。これは、ユーザー クラスタの使用状況データを表示する Google Cloud プロジェクトです。
使用状況測定サービス アカウントに bigquery.dataEditor
ロールを付与します。
gcloud projects add-iam-policy-binding USAGE_METERING_PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/bigquery.dataEditor"
USAGE_METERING_PROJECT_ID は、使用量測定プロジェクトの ID に置き換えます。
Binary Authorization サービス アカウント
Google Distributed Cloud では、このサービス アカウントを使用して Binary Authorization API を呼び出します。
Binary Authorization サービス アカウントの作成については、GKE On-Prem での Binary Authorization をご覧ください。