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

Apigee ハイブリッド v.1.13 は、GKE で Workload Identity をサポートし、AKS と EKS で Workload Identity 連携をサポートしています。このガイドの手順は、GKE で Workload Identity を構成する場合を対象としています。AKSEKS の場合は、AKS と EKS で Workload Identity 連携を有効にするの説明に従ってください。

GKE で Workload Identity を構成する

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 をご覧ください。

オーバーライド ファイルで gcp.workloadIdentity.enabledtrue に設定している場合、各ハイブリッド コンポーネントの Helm チャートが、コンポーネントをインストールまたはアップグレードするときに、ステップ 11: Helm チャートを使用して Apigee ハイブリッドをインストールするで行ったように、コンポーネントの Kubernetes サービス アカウントを作成します。

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

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

Workload Identity の構成を準備する

  1. オーバーライド ファイルで Workload Identity が有効になっていることを確認します。オーバーライド ファイルの次のプロパティで有効にする必要があります。
    • namespace は必須です。次に例を示します。
      instanceID: "hybrid-instance-1"
      namespace: "apigee"
      
    • すべてのコンポーネントに 1 つのサービス アカウント(非本番環境)を使用する場合は、gcp.workloadIdentity.gsa で指定します。次に例を示します。
        gcp:
          workloadIdentity:
            enabled: true
            gsa: "apigee-non-prod@my-hybrid-project.iam.gserviceaccount.com"
        
    • コンポーネント(本番環境)ごとに個別のサービス アカウントを使用する場合は、コンポーネントの gsa プロパティでサービス アカウントを指定します。次に例を示します。
        logger:
          gsa: "apigee-logger@my-hybrid-project.iam.gserviceaccount.com"
        

    参照: gcp.workloadIdentity.enabled

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

    gcloud config set project $PROJECT_ID
  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
        

Workload Identity を構成する

次のハイブリッド コンポーネントに対して Workload Identity を有効にする手順は次のとおりです。

  • apigee-datastore
  • apigee-telemetry
  • apigee-org
  • apigee-env

apigee-datastoreapigee-envapigee-orgapigee-telemetry チャートに対して --dry-run フラグを指定して helm upgrade を実行すると、正しい GSA 名と KSA 名で Workload Identity を構成する際に必要になるコマンドが出力に含まれます。

次に例を示します。

helm upgrade datastore apigee-datastore/ \
  --namespace $NAMESPACE \
  -f overrides.yaml \
  --dry-run=server
NAME: datastore
  ...
For C* backup GKE Workload Identity, please make sure to add the below membership to the IAM policy binding using the respective kubernetes SA (KSA).
  gcloud iam service-accounts add-iam-policy-binding  \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-cassandra-backup-sa]" \
        --project :my-project
  1. apigee-datastore の Workload Identity を設定するコマンドを取得し、出力の NOTES: でコマンドを実行します。
    helm upgrade datastore apigee-datastore/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run=server
  2. apigee-telemetry の Workload Identity を設定するコマンドを取得し、出力の NOTES: でコマンドを実行します。
    helm upgrade telemetry apigee-telemetry/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run=server
  3. apigee-org の Workload Identity を設定するコマンドを取得し、出力の NOTES: でコマンドを実行します。
    helm upgrade $ORG_NAME apigee-org/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run=server
  4. apigee-env の Workload Identity を設定するコマンドを取得し、出力の NOTES: でコマンドを実行します。
    helm upgrade $ENV_NAME apigee-env/ \
      --namespace $NAMESPACE \
      --set env=ENV_NAME \
      -f overrides.yaml \
      --dry-run=server

    この手順をインストール環境ごとに繰り返します。

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

    [ワークロード] に移動

次のステップ

次のステップでは、Apigee Ingress ゲートウェイを構成し、プロキシをデプロイしてインストールをテストします。

次のステップ

(次)ステップ 1: Apigee ingress を公開する 2