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

このドキュメントでは、Google Distributed Cloud の実装でクラスタの作成に必要な Google Cloud サービス アカウントとキーについて説明します。

ここでは手順全体を詳しく解説します。サービス アカウントの使用に関する概要については、最小限のインフラストラクチャを設定するをご覧ください。

始める前に

Google Cloud プロジェクトを作成します

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

管理者クラスタとユーザー クラスタを作成する前に、次のサービス アカウントが必要です。

  • コンポーネント アクセス サービス アカウント
  • Connect-register サービス アカウント
  • logging-monitoring サービス アカウント

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

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

サービス アカウントは、作成時に Google Cloud プロジェクトに関連付けます。この Google Cloud プロジェクトは、サービス アカウントの親プロジェクトと呼ばれます。このドキュメントでは、すべての gcloud iam service-accounts create コマンドでプレースホルダ変数 PROJECT_ID を使用します。これは、サービス アカウントの親プロジェクトのプロジェクト ID です。

サービス アカウントの親プロジェクトは、そのサービス アカウントのメールアドレスで確認できます。たとえば、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 プロジェクトのサービス アカウントに、サービス アカウントの親プロジェクトではないロールを付与できます。また、プロジェクトが同じでもかまいません。この柔軟性を実現するため、このドキュメントでは、コンポーネント アクセス サービス アカウント、connect-register サービス アカウント、logging-monitoring サービス アカウントの gcloud projects add-iam-policy-binding コマンドにプレースホルダ変数 FLEET_HOST_PROJECT_ID を使用しています。これはフリート ホスト プロジェクトの ID です。gcloud projects add-iam-policy-binding コマンドで FLEET_HOST_PROJECT_ID として指定する ID は同じである必要があります。

サービス アカウントにロールを付与する権限

各サービス アカウントに、関連するGoogle Cloud プロジェクトに対する特定のロールを付与する必要があります。たとえば、connect-register サービス アカウントには、フリート ホスト プロジェクトの gkehub.editor ロールが付与されている必要があります。

Google Cloud プロジェクトに対するロールを付与するには、プロジェクトに対する特定の権限が必要です。詳しくは、ロールについてroles/resourcemanager.projectIamAdmin をご覧ください。

必要な権限があれば、自分でロールを付与できます。それ以外の場合は、組織内の別のユーザーがロールを付与する必要があります。

gkeadm を使用してサービス アカウントを自動的に作成する

このページでは、サービス アカウントを手動で作成して、サービス アカウントにロールを付与する方法を説明します。手動で行う代わりに、管理ワークステーションの作成時に gkeadm コマンドライン ツールでサービス アカウントを作成してロールを付与することもできます。gkeadm にサービス アカウントの作成を許可する場合でも、次のセクションで説明するように、コンポーネント アクセス サービス アカウントを手動で作成し、必要な IAM ロールを付与する必要があります。gkeadm が作成できるサービス アカウントの詳細については、管理ワークステーションの作成をご覧ください。

コンポーネント アクセス サービス アカウント

Google Distributed Cloud は、このサービス アカウントを使用して、ユーザーに代わって Artifact Registry からクラスタ コンポーネントをダウンロードします。

  1. コンポーネント アクセス サービス アカウントを作成します。

    gcloud iam service-accounts create component-access-sa \
        --display-name "Component Access Service Account" \
        --project PROJECT_ID
    

    PROJECT_ID は、サービス アカウントの親プロジェクトとして使用する Google Cloud プロジェクトの ID に置き換えます。

  2. 新しく作成したコンポーネント アクセス サービス アカウントのメールアドレスを取得します。

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. コンポーネント アクセス サービス アカウントの JSON キーを作成します。

    gcloud iam service-accounts keys create component-access-key.json \
    --iam-account COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL
    

    COMPONENT_ACCESS_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:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/serviceusage.serviceUsageViewer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/iam.roleViewer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/iam.serviceAccountViewer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/compute.viewer"

FLEET_HOST_PROJECT_ID は、フリートホスト プロジェクトの ID に置き換えます。これは、サービス アカウントが作成されたプロジェクトと同じプロジェクトにすることも、別のプロジェクトにすることもできます。ここで指定するプロジェクト ID は、connect-register サービス アカウントと logging-monitoring サービス アカウントに IAM ロールを付与するときに指定した ID と同じである必要があります。

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

Google Distributed Cloud は、このサービス アカウントを使用して、クラスタをフリートに登録します。

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

    gcloud iam service-accounts create connect-register-sa \
        --display-name "Connect-register Service Account" \
        --project PROJECT_ID
    

    PROJECT_ID は、connect-register サービス アカウントの親に設定するGoogle Cloud プロジェクトの ID に置き換えます。

  2. 新しく作成した connect-register サービス アカウントのメールアドレスを取得します。

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. connect-register サービス アカウントの JSON キーを作成します。

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

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

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

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
        --member "serviceAccount:CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL" \
        --role "roles/gkehub.editor"
    

    ここで指定するプロジェクト ID は、コンポーネント アクセス サービス アカウントと logging-monitoring サービス アカウントに IAM ロールを付与するときに指定した ID と同じである必要があります。

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

Google Distributed Cloud は、このサービス アカウントを使用して、クラスタから Cloud LoggingCloud Monitoring にログと指標をエクスポートします。

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

    gcloud iam service-accounts create logging-monitoring-sa \
        --display-name "Logging-monitoring Service Account" \
        --project=PROJECT_ID
    

    PROJECT_ID は、logging-monitoring サービス アカウントの親に設定するGoogle Cloud プロジェクトの ID に置き換えます。

  2. 新しく作成した logging-monitoring サービス アカウントのメールアドレスを取得します。

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. logging-monitoring サービス アカウントの JSON キーを作成します。

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

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

logging-monitoring サービス アカウントにロールを付与する

ロギング モニタリング サービス アカウントには、プロジェクトに対する次のロールを付与する必要があります。

  • 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:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/opsconfigmonitoring.resourceMetadata.writer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/logging.logWriter"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/monitoring.metricWriter"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/monitoring.dashboardEditor"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/kubernetesmetadata.publisher"

ここで指定するプロジェクト ID は、コンポーネント アクセス サービス アカウントと connect-register サービス アカウントに IAM ロールを付与するときに指定した ID と同じである必要があります。

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

このセクションで説明するサービス アカウントはオプションです。

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

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

高度なクラスタを有効にしたクラスタ(トポロジ ドメインの設定に必要)を作成する場合は、別のサービス アカウントを作成するのではなく、logging-monitoring サービス アカウントと監査ロギング用のキーを使用します。

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

    gcloud iam service-accounts create audit-logging-sa \
        --project PROJECT_ID
    

    PROJECT_ID は、監査ロギング サービス アカウントの親に設定するGoogle Cloud プロジェクトの ID に置き換えます。

  2. 新しく作成した監査ロギング サービス アカウントのメールアドレスを取得します。

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 監査ロギング サービス アカウントの JSON キーを作成します。

    gcloud iam service-accounts keys create audit-logging-key.json \
    --iam-account AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
    

    AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL は、監査ロギング サービス アカウントのメールアドレスに置き換えます。

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

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

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

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

    gcloud iam service-accounts create usage-metering-sa \
        --project PROJECT_ID
    

    PROJECT_ID は、使用状況測定サービス アカウントの親に設定するGoogle Cloud プロジェクトの ID に置き換えます。

  2. 新しく作成した使用状況測定サービス アカウントのメールアドレスを取得します。

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 使用状況測定サービス アカウントの JSON キーを作成します。

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

    USAGE_METERING_SERVICE_ACCOUNT_EMAIL は、使用状況測定サービス アカウントのメールアドレスに置き換えます。

使用状況測定サービス アカウントにロールを付与する

使用状況測定サービス アカウントには、使用状況測定プロジェクトに対する bigquery.dataEditor ロールが付与されている必要があります。これは、ユーザー クラスタの使用状況データを表示する Google Cloud プロジェクトです。

使用状況測定サービス アカウントに 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 に置き換えます。使用状況測定プロジェクトは、フリートホスト プロジェクトと同じにすることも、別のものにすることもできます。

Binary Authorization サービス アカウント

Google Distributed Cloud では、このサービス アカウントを使用して Binary Authorization API を呼び出します。

Binary Authorization サービス アカウントの作成については、GKE On-Prem での Binary Authorization をご覧ください。

次のステップ

管理ワークステーションを作成する