このドキュメントでは、Anthos clusters on VMware(GKE On-Prem)実装でクラスタを作成するために必要な Google Cloud サービス アカウントとキーについて説明します。
ここでは手順全体を詳しく解説します。サービス アカウントの使用に関する概要については、最小限のインフラストラクチャを設定するをご覧ください。
始める前に
サービス アカウントの概要
管理者クラスタとユーザー クラスタを作成する前に、次のサービス アカウントが必要です。
- コンポーネント アクセス サービス アカウント
- Connect-register サービス アカウント
- logging-monitoring サービス アカウント
有効にする機能によっては、オプションのサービス アカウントも必要になる場合があります。
サービス アカウントと Google Cloud プロジェクトについて
サービス アカウントは、作成時に Google Cloud プロジェクトに関連付けます。この 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 プロジェクトがリソースです。
重要なことは、サービス アカウントの親でない Cloud プロジェクトのサービス アカウントにロールを付与できる点です。
サービス アカウントにロールを付与する権限
各サービス アカウントに、関連する Cloud プロジェクトに対する特定のロールを付与する必要があります。たとえば、connect-register サービス アカウントには、フリートホスト プロジェクトの gkehub.editor
ロールが付与されている必要があります。
Cloud プロジェクトに対するロールを付与するには、プロジェクトに対する特定の権限が必要です。詳しくは、ロールについての roles/resourcemanager.projectIamAdmin
をご覧ください。
必要な権限があれば、自分でロールを付与できます。それ以外の場合は、組織内の別のユーザーがロールを付与する必要があります。
gkeadm
を使用してサービス アカウントを自動的に作成する
このページでは、サービス アカウントを手動で作成して、サービス アカウントにロールを付与する方法を説明します。手動で行う代わりに、管理者ワークステーションの作成時に gkeadm
でサービス アカウントを作成してロールを付与することもできます。詳細については、管理ワークステーションの作成をご覧ください。
コンポーネント アクセス サービス アカウント
Anthos clusters on VMware は、このサービス アカウントを使用して 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 は、コンポーネント アクセス サービス アカウントのメールアドレスに置き換えます。
コンポーネント アクセス サービス アカウントにロールを付与する
管理クラスタとユーザー クラスタの構成ファイルには、プロジェクト ID を指定するフィールドが複数あります。
管理クラスタの構成ファイル:
stackdriver: projectID: "" ... cloudAuditLogging: projectid: ""
ユーザー クラスタの構成ファイル:
stackdriver: projectID: "" ... gkeConnect: projectID: "" ... usageMetering: bigQueryProjectID: "" ... cloudAuditLogging: projectid: ""
構成ファイル内のプロジェクト ID は一意である必要はありません。たとえば、gkeConnect.projectID
が cloudAuditLogging.projectID
と同じ場合もあります。実際、構成ファイル内のすべてのプロジェクト ID が同一であることもあります。
コンポーネント アクセス サービス アカウントには、各 Cloud プロジェクトに対して管理者アカウントとユーザー クラスタの構成ファイルで指定された次の IAM ロールが付与されている必要があります。これらのロールは、VMware の Anthos クラスタがプリフライト チェックを実行するために必要です。
serviceusage.serviceUsageViewer
iam.roleViewer
iam.serviceAccountViewer
クラスタ構成ファイルで指定した Cloud プロジェクトごとに、次のコマンドを実行して、必要なロールをコンポーネント アクセス サービス アカウントに付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/serviceusage.serviceUsageViewer"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/iam.roleViewer"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/iam.serviceAccountViewer"
次のように置き換えます。
PROJECT_ID: 構成ファイルで指定したいずれかの Cloud プロジェクトの ID。
SERVICE_ACCOUNT_EMAIL: コンポーネント アクセス サービス アカウントのメールアドレス。
connect-register サービス アカウント
Anthos clusters on VMware は、このサービス アカウントを使用してユーザー クラスタを Google Cloud に登録します。
connect-register サービス アカウントを作成するには、次のコマンドを実行します。
gcloud iam service-accounts create connect-register-sa \ --project PROJECT_ID
PROJECT_ID は、connect-register サービス アカウントの親になる 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
ロールを付与する必要があります。これは、クラスタを表示および管理する Cloud プロジェクトです。
connect-register サービス アカウントに gkehub.editor
ロールを付与します。
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/gkehub.editor"
FLEET_HOST_PROJECT_ID は、フリートホスト プロジェクトの ID に置き換えます。
logging-monitoring サービス アカウント
Anthos clusters on VMware は、このサービス アカウントを使用して、クラスタから Cloud Logging と Cloud Monitoring にログと指標をエクスポートします。
logging-monitoring サービス アカウントを作成するには、次のコマンドを実行します。
gcloud iam service-accounts create logging-monitoring-sa \ --project=PROJECT_ID
PROJECT_ID は、logging-monitoring サービス アカウントの親にする Cloud プロジェクトの ID に置き換えます。
logging-monitoring サービス アカウントの JSON キーを作成するには、次のコマンドを実行します。
gcloud iam service-accounts keys create logging-monitoring-key.json \ --iam-account SERVICE_ACCOUNT_EMAIL
SERVICE_ACCOUNT_EMAIL は、logging-monitoring サービス アカウントのメールアドレスに置き換えます。
ロギング モニタリング サービス アカウントには、logging-monitoring プロジェクトに対する次のロールを付与する必要があります。これは、クラスタのログを表示する Cloud プロジェクトです。
stackdriver.resourceMetadata.writer
opsconfigmonitoring.resourceMetadata.writer
logging.logWriter
monitoring.metricWriter
monitoring.dashboardEditor
必要なロールを logging-monitoring サービス アカウントに付与するには、次のコマンドを実行します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/stackdriver.resourceMetadata.writer"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/opsconfigmonitoring.resourceMetadata.writer"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/logging.logWriter"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/monitoring.metricWriter"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/monitoring.dashboardEditor"
PROJECT_ID は、logging-monitoring プロジェクトの ID に置き換えます。
オプションのサービス アカウント
使用状況測定サービス アカウント
Anthos clusters on VMware は、このサービス アカウントを使用して BigQuery データセットに使用状況データを保存します。
使用状況測定サービス アカウントを作成するには、次のコマンドを実行します。
gcloud iam service-accounts create usage-metering-sa \ --project PROJECT_ID
PROJECT_ID は、使用状況測定サービス アカウントの親になる Cloud プロジェクトの ID に置き換えます。
使用状況測定サービス アカウントの JSON キーを作成するには、次のコマンドを実行します。
gcloud iam service-accounts keys create usage-metering-key.json \ --iam-account SERVICE_ACCOUNT_EMAIL
SERVICE_ACCOUNT_EMAIL は、使用状況測定サービス アカウントのメールアドレスに置き換えます。
使用状況測定サービス アカウントには、使用状況測定プロジェクトに対する bigquery.dataEditor
ロールが付与されている必要があります。これは、ユーザー クラスタの使用状況データを表示する Cloud プロジェクトです。
使用状況測定サービス アカウントに bigquery.dataEditor
ロールを付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/bigquery.dataEditor"
PROJECT_ID は、使用量測定プロジェクトの ID に置き換えます。
監査ロギング サービス アカウント
Anthos clusters on VMware は、このサービス アカウントを使用して、クラスタから Kubernetes 監査ログを Cloud Audit Logs に送信します。
監査ロギング サービス アカウントを作成するには、次のコマンドを実行します。
gcloud iam service-accounts create audit-logging-sa \ --project PROJECT_ID
PROJECT_ID は、監査ロギング サービス アカウントの親になる Cloud プロジェクトの ID に置き換えます。
監査ロギング サービス アカウントの JSON キーを作成するには、次のコマンドを実行します。
gcloud iam service-accounts keys create audit-logging-key.json \ --iam-account SERVICE_ACCOUNT_EMAIL
SERVICE_ACCOUNT_EMAIL は、監査ロギング サービス アカウントのメールアドレスに置き換えます。
監査ロギング サービス アカウントにロールを付与する必要はありません。
Binary Authorization サービス アカウント
Anthos clusters on VMware は、このサービス アカウントを使用して Binary Authorization API を呼び出します。
Binary Authorization サービス アカウントの作成については、GKE On-Prem での Binary Authorization をご覧ください。