ステップ 10(省略可): GKE で Workload Identity を構成する

GKE で Workload Identity のみを使用する: Workload Identity を構成する

ステップ 6: クラスタを構成するで、GKE で Workload Identity を使用するためのオーバーライド ファイルを設定する場合は、次の手順を行います。

GKE で Workload Identity を使用しない場合は、パート 3、ステップ 1: Apigee Ingress ゲートウェイを公開するに進みます。

Google Cloud サービス アカウントと Kubernetes サービス アカウント

Google Cloud サービス アカウントは特別なタイプのアカウントで、サービス アカウント自体として認証することで、承認済みの API 呼び出しを行うことができます。Google Cloud サービス アカウントには、個々のユーザーと同様にロールと権限を付与できます。アプリケーションがサービス アカウントとして認証されると、アプリケーションはサービス アカウントにアクセス権が付与されているすべてのリソースにアクセスできます。Google Cloud サービス アカウントの詳細については、サービス アカウントの概要をご覧ください。

ステップ 4: サービス アカウントを作成するで、Apigee ハイブリッド インストール用に Google Cloud サービス アカウントを作成しました。Apigee は、これらのサービス アカウントを使用してハイブリッド コンポーネントを認証します。

Kubernetes サービス アカウントは Google Cloud サービス アカウントに似ています。Kubernetes サービス アカウントは Pod で実行されるプロセスの ID を提供し、ユーザーと同様に API サーバーに対して認証できるようにします。Kubernetes サービス アカウントの詳細については、Configure Service Accounts for Pods をご覧ください。

Apigee ハイブリッドに必要な Kubernetes サービス アカウントのほとんどは、apigeectl ツールによって作成済みです(前の手順で apigeectl apply を実行したとき)。

GKE で Workload Identity を構成する場合は、Google Cloud サービス アカウントを Kubernetes クラスタ内の Kubernetes サービス アカウントに関連付けます。これにより、Kubernetes サービス アカウントは Google Cloud サービス アカウントの権限を借用し、割り当てられたロールと権限を使用してハイブリッド コンポーネントを認証できます。

プロジェクトの Workload Identity を構成する手順は次のとおりです。

Workload Identity の構成を準備する

この手順では、次の環境変数を使用します。定義されていることを確認し、定義されていないものを定義してください。

echo $APIGEECTL_HOME
echo $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME
  1. 次のコマンドを使用して、Google Cloud プロジェクト ID に設定されている現在の gcloud 構成を確認します。
    gcloud config get project
  2. 必要に応じて、現在の gcloud 構成を設定します。

    gcloud config set project $PROJECT_ID
  3. Kubernetes サービス アカウント apigee-cassandra-restore を作成します。

    apigeectl apply を実行して構成を適用したときに、Workload Identity に必要なほとんどの Kubernetes サービス アカウントが作成されています。

    Kubernetes サービス アカウント apigee-cassandra-restore を作成するには、--restore フラグを指定して apigeectl apply を実行します。

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  4. GKE クラスタで Workload Identity が有効になっていることを確認します。ステップ 1: クラスタを作成するでクラスタを作成したとき、ステップ 6 で Workload Identity を有効にしました。次のコマンドを実行して、Workload Identity が有効になっているかどうかを確認できます。

    リージョン クラスタ

    gcloud container clusters describe $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    ゾーンクラスタ

    gcloud container clusters describe $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    出力は次のようになります。

      ---
      workloadPool: PROJECT_ID.svc.id.goog

    結果に null が表示された場合は、次のコマンドを実行してクラスタで Workload Identity を有効にします。

    リージョン クラスタ

    gcloud container clusters update $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --project $PROJECT_ID \
      --region $CLUSTER_LOCATION

    ゾーンクラスタ

    gcloud container clusters update  $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID
  5. 次のコマンドを使用して、各ノードプールで Workload Identity を有効にします。このオペレーションは、ノードごとに最大 30 分かかることがあります。

    リージョン クラスタ

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    ゾーンクラスタ

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    ここで、NODE_POOL_NAME は各ノードプールの名前です。ほとんどの Apigee ハイブリッド インストールでは、2 つのデフォルト ノードプールは apigee-dataapigee-runtime という名前になっています。

  6. 次のコマンドを使用して、ノードプールで Workload Identity が有効になっていることを確認します。

    リージョン クラスタ

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    ゾーンクラスタ

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    出力は次のようになります。

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
      mode: GKE_METADATA
        
  7. プロジェクト用の Google Cloud サービス アカウントの名前のリストを取得します。これらの名前は、Kubernetes サービス アカウントを関連付けて Workload Identity を構成するために必要になります。非本番環境のインストールで必要な Google Cloud サービス アカウントは 1 つだけです。本番環境のインストールでは 8 つ必要です。

    名前のリストを取得するには、次のコマンドを使用します。

    gcloud iam service-accounts list --project $PROJECT_ID

    出力は次のようになります。

    非本番環境

    非本番環境の場合:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-non-prod      apigee-non-prod@my_project_id.iam.gserviceaccount.com      False
    

    本番環境

    非本番環境の場合:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-cassandra     apigee-cassandra@my_project_id.iam.gserviceaccount.com     False
    apigee-logger        apigee-logger@my_project_id.iam.gserviceaccount.com        False
    apigee-mart          apigee-mart@my_project_id.iam.gserviceaccount.com          False
    apigee-metrics       apigee-metrics@my_project_id.iam.gserviceaccount.com       False
    apigee-runtime       apigee-runtime@my_project_id.iam.gserviceaccount.com       False
    apigee-synchronizer  apigee-synchronizer@my_project_id.iam.gserviceaccount.com  False
    apigee-udca          apigee-udca@my_project_id.iam.gserviceaccount.com          False
    apigee-watcher       apigee-watcher@my_project_id.iam.gserviceaccount.com       False
    
  8. Kubernetes サービス アカウントの名前のリストを取得します。このリストにある名前を、後で Google Cloud サービス アカウントに関連付ける必要があります。次のコマンドを使用してください。
    kubectl get sa -n $NAMESPACE

    出力は次のようになります。太字の Kubernetes サービス アカウントを Google Cloud サービス アカウントに関連付ける必要があります。

    NAME                                                         SECRETS   AGE
    apigee-cassandra-backup                                      1         11m
    apigee-cassandra-restore                                     1         11m
    apigee-cassandra-schema-setup-my-project-id-123abcd-sa       1         11m
    apigee-cassandra-schema-val-my-project-id-123abcd            1         11m
    apigee-cassandra-user-setup-my-project-id-123abcd-sa         1         11m
    apigee-connect-agent-my-project-id-123abcd-sa                1         11m
    apigee-datastore-default-sa                                  1         11m
    apigee-ingressgateway                                        1         11m
    apigee-ingressgateway-my-project-id-123abcd                  1         11m
    apigee-ingressgateway-manager                                1         11m
    apigee-init                                                  1         11m
    apigee-mart-my-project-id-123abcd-sa                         1         11m
    apigee-metrics-sa                                            1         11m
    apigee-mint-task-scheduler-my-project-id-123abcd-sa          1         11m
    apigee-redis-default-sa                                      1         11m
    apigee-redis-envoy-default-sa                                1         11m
    apigee-runtime-my-project-id-env-name-234bcde-sa             1         11m
    apigee-synchronizer-my-project-id-env-name-234bcde-sa        1         11m
    apigee-udca-my-project-id-123abcd-sa                         1         11m
    apigee-udca-my-project-id-env-name-234bcde-sa                1         11m
    apigee-watcher-my-project-id-123abcd-sa                      1         11m
    default                                                      1         11m
        

Workload Identity を構成する

ハイブリッド インストールで Workload Identity を有効にするには、次の手順を行います。

  1. Apigee コンポーネントごとに、そのコンポーネントの Google Cloud サービス アカウントに対応する Kubernetes サービス アカウントにアノテーションを付けます。

    次の手順では、2 つの環境変数を使用します。各コマンドセットを実行する前に、これらの変数の値をリセットします。

    • GSA_NAME: Google サービス アカウントの名前。ステップ 4: サービス アカウントを作成するcreate-service-account ツールを使って作成したサービス アカウントです。
    • KSA_NAME: Kubernetes サービス アカウントの名前。kubectl get sa -n $NAMESPACE コマンドを使って確認したアカウントです(例: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa)。
    • Cassandra

      Cassandra コンポーネント用に Workload Identity を構成します。

      Cassandra コンポーネントには、次の 6 つの Kubernetes サービス アカウントが関連付けられています。

      • apigee-cassandra-backup
      • apigee-cassandra-restore
      • apigee-cassandra-schema-setup
      • apigee-cassandra-schema-valval は検証(validation)の意味)
      • apigee-cassandra-user-setup
      • apigee-datastore-default

      非本番環境

      Kubernetes サービス アカウント apigee-cassandra-backup を構成する

      1. 環境変数 KSA_NAMEGSA_NAME を定義します。
        GSA_NAME="apigee-non-prod"
        KSA_NAME="apigee-cassandra-backup"
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

        出力には、次のようにアノテーションを説明する行が表示されます。

        Annotations:         iam.gke.io/gcp-service-account: apigee-non-prod@my-project-id.iam.gserviceaccount.com

      Kubernetes サービス アカウント apigee-cassandra-restore を構成する

      1. 環境変数 KSA_NAME を再定義します。

        KSA_NAME="apigee-cassandra-restore"
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes サービス アカウント apigee-cassandra-schema-setup を構成する

      1. 環境変数 KSA_NAME を再定義します。

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        例: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes サービス アカウント apigee-cassandra-schema-val を構成する

      1. 環境変数 KSA_NAME を再定義します。

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        例: apigee-cassandra-schema-val-hybrid-example-project-123abcd
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes サービス アカウント apigee-cassandra-user-setup を構成する

      1. 環境変数 KSA_NAME を再定義します。

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        例: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes サービス アカウント apigee-datastore-default-sa を構成する

      1. 環境変数 KSA_NAME を再定義します。

        KSA_NAME="apigee-datastore-default-sa"
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      本番環境

      Kubernetes サービス アカウント apigee-cassandra-backup を構成する

      1. 環境変数 KSA_NAMEGSA_NAME を定義します。
        GSA_NAME="apigee-cassandra"
        KSA_NAME="apigee-cassandra-backup"
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
      5. 出力には、次のようにアノテーションを説明する行が表示されます。

        Annotations:         iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
      6. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes サービス アカウント apigee-cassandra-restore を構成する

      1. 環境変数 KSA_NAME を再定義します。

        KSA_NAME="apigee-cassandra-restore"
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Kubernetes サービス アカウント apigee-cassandra-schema-setup を構成する

      1. 環境変数 KSA_NAME を再定義します。

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        例: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
      2. IAM ロールをバインドします。

        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes サービス アカウント apigee-cassandra-schema-val を構成する

      1. 環境変数 KSA_NAME を再定義します。

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        例: apigee-cassandra-schema-val-hybrid-example-project-123abcd
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes サービス アカウント apigee-cassandra-user-setup を構成する

      1. 環境変数 KSA_NAME を再定義します。

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        例: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Kubernetes サービス アカウント apigee-datastore-default-sa を構成する

      1. 環境変数 KSA_NAME を再定義します。

        KSA_NAME="apigee-datastore-default-sa"
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Connect

      Apigee Connect コンポーネント用に Workload Identity を構成します。

      非本番環境

      1. 環境変数 KSA_NAME を定義します。

        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        例: apigee-connect-agent-hybrid-example-project-123abcd-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      本番環境

      1. 環境変数 KSA_NAMEGSA_NAME を定義します。
        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        例: apigee-connect-agent-hybrid-example-project-123abcd-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • MART

      MART コンポーネント用に Workload Identity を構成します。

      非本番環境

      1. 環境変数 KSA_NAME を定義します。

        KSA_NAME="apigee-mart-service-account-name-sa"
        例: apigee-mart-hybrid-example-project-123abcd-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      本番環境

      1. 環境変数 KSA_NAMEGSA_NAME を定義します。

        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-mart-service-account-name-sa"
        例: apigee-mart-hybrid-example-project-123abcd-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee 指標

      Apigee 指標コンポーネント用に Workload Identity を構成します。

      非本番環境

      1. 環境変数 KSA_NAME を定義します。

        KSA_NAME="apigee-metrics-sa"
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      本番環境

      1. 環境変数 KSA_NAMEGSA_NAME を定義します。

        GSA_NAME="apigee-metrics"
        KSA_NAME="apigee-metrics-sa"
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
        $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
        --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
        --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA(組織レベル)

      組織レベルの UDCA コンポーネント用に Workload Identity を構成します。

      UDCA は、組織レベルと環境レベルの両方のスコープで実装されます。したがって、UDCA には、スコープごとに 1 つずつ、合わせて 2 つの Kubernetes サービス アカウントがあります。この 2 つのサービス アカウントは名前で区別できます。環境スコープのサービス アカウントの名前には環境名が含まれます。次に例を示します。

      • 組織レベル: apigee-udca-my-project-id-123abcd-sa。ここで、my-project-id はプロジェクト ID です。
      • 環境レベル: apigee-udca-my-project-id-my-env-234bcde-sa。ここで、my-env は環境の名前です。

      非本番環境

      1. 環境変数 KSA_NAME を定義します。

        KSA_NAME="apigee-udca-service-account-name-sa"
        例: apigee-udca-hybrid-example-project-123abcd-sa
      2. IAM ロールをバインドします。
          gcloud iam service-accounts add-iam-policy-binding \
            --role roles/iam.workloadIdentityUser \
            --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
            $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
            --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
          kubectl annotate serviceaccount \
            --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      本番環境

      1. 環境変数 KSA_NAMEGSA_NAME を定義します。

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-service-account-name-sa"
        例: apigee-udca-hybrid-example-project-123abcd-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Watcher

      Apigee Watcher コンポーネント用に Workload Identity を構成します。

      非本番環境

      1. 環境変数 KSA_NAME を定義します。

        KSA_NAME="apigee-watcher-service-account-name-sa"
        例: apigee-watcher-hybrid-example-project-123abcd-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      本番環境

      1. 環境変数 KSA_NAMEGSA_NAME を定義します。

        GSA_NAME="apigee-watcher"
        KSA_NAME="apigee-watcher-service-account-name-sa"
        例: apigee-watcher-hybrid-example-project-123abcd-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • ランタイム

      Apigee ランタイム コンポーネント用に Workload Identity を構成します。

      非本番環境

      1. 環境変数 KSA_NAME を定義します。

        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        例: apigee-runtime-hybrid-example-project-example-env-234bcde-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      本番環境

      1. 環境変数 KSA_NAMEGSA_NAME を定義します。

        GSA_NAME="apigee-runtime"
        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        例: apigee-runtime-hybrid-example-project-example-env-234bcde-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Synchronizer

      Synchronizer コンポーネント用に Workload Identity を構成します。

      非本番環境

      1. 環境変数 KSA_NAME を定義します。

        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        例: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      本番環境

      1. 環境変数 KSA_NAMEGSA_NAME を定義します。

        GSA_NAME="apigee-synchronizer"
        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        例: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA(環境レベル)

      環境レベルの UDCA コンポーネント用に Workload Identity を構成します。

      非本番環境

      1. 環境変数 KSA_NAME を定義します。

        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        例: apigee-udca-hybrid-example-project-example-env-234bcde-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      本番環境

      1. 環境変数 KSA_NAMEGSA_NAME を定義します。

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        例: apigee-udca-hybrid-example-project-example-env-234bcde-sa
      2. IAM ロールをバインドします。
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. サービス アカウントにアノテーションを付けます。
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. アノテーションを確認します。
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
  2. 省略可: ダウンロードしたサービス アカウント キーファイルをすべて削除します。

    create-service-account ツールを使用して Google サービス アカウントを作成した場合は、サービス アカウント キーが作成され、.json キーファイルがダウンロードされている可能性があります。GKE で Workload Identity を使用する場合、これらのキーファイルは不要です。

    鍵ファイルは次のコマンドで削除できます。

    rm $HYBRID_FILES/service-accounts/*.json

Workload Identity を確認する

  1. (省略可)Kubernetes サービス アカウントのステータスを、Google Cloud コンソールの [Kubernetes: ワークロードの概要] ページで確認できます。

    [ワークロード] に移動

  2. apigeectl check-ready を使用してデプロイのステータスを再度確認するには:
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
(次)ステップ 1: Apigee Ingress ゲートウェイを公開する 2