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_HOMEecho $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME
- 次のコマンドを使用して、Google Cloud プロジェクト ID に設定されている現在の
gcloud
構成を確認します。gcloud config get project
- 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
- 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
-
次のコマンドを使用して、各ノードプールで 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-data
とapigee-runtime
という名前になっています。 - 次のコマンドを使用して、ノードプールで 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
- プロジェクト用の 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
- 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
必要に応じて、現在の gcloud
構成を設定します。
gcloud config set project $PROJECT_ID
Workload Identity を構成する
ハイブリッド インストールで Workload Identity を有効にするには、次の手順を行います。
-
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
)。
- GSA_NAME: Google サービス アカウントの名前。ステップ 4: サービス アカウントを作成するで
- Cassandra
Cassandra コンポーネント用に Workload Identity を構成します。
Cassandra コンポーネントには、次の 6 つの Kubernetes サービス アカウントが関連付けられています。
apigee-cassandra-backup
apigee-cassandra-restore
apigee-cassandra-schema-setup
apigee-cassandra-schema-val
(val
は検証(validation)の意味)apigee-cassandra-user-setup
apigee-datastore-default
非本番環境
Kubernetes サービス アカウント
apigee-cassandra-backup
を構成する- 環境変数
KSA_NAME
とGSA_NAME
を定義します。GSA_NAME="apigee-non-prod"
KSA_NAME="apigee-cassandra-backup"
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
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
を構成する- 環境変数
KSA_NAME
を再定義します。KSA_NAME="apigee-cassandra-restore"
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Kubernetes サービス アカウント
apigee-cassandra-schema-setup
を構成する- 環境変数
KSA_NAME
を再定義します。 例:KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Kubernetes サービス アカウント
apigee-cassandra-schema-val
を構成する- 環境変数
KSA_NAME
を再定義します。 例:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Kubernetes サービス アカウント
apigee-cassandra-user-setup
を構成する- 環境変数
KSA_NAME
を再定義します。 例:KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Kubernetes サービス アカウント
apigee-datastore-default-sa
を構成する- 環境変数
KSA_NAME
を再定義します。KSA_NAME="apigee-datastore-default-sa"
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
本番環境
Kubernetes サービス アカウント
apigee-cassandra-backup
を構成する- 環境変数
KSA_NAME
とGSA_NAME
を定義します。GSA_NAME="apigee-cassandra"
KSA_NAME="apigee-cassandra-backup"
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
出力には、次のようにアノテーションを説明する行が表示されます。
Annotations: iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
Kubernetes サービス アカウント
apigee-cassandra-restore
を構成する- 環境変数
KSA_NAME
を再定義します。KSA_NAME="apigee-cassandra-restore"
- 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
- サービス アカウントにアノテーションを付けます。
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
を構成する- 環境変数
KSA_NAME
を再定義します。 例:KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
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
Kubernetes サービス アカウント
apigee-cassandra-schema-val
を構成する- 環境変数
KSA_NAME
を再定義します。 例:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Kubernetes サービス アカウント
apigee-cassandra-user-setup
を構成する- 環境変数
KSA_NAME
を再定義します。 例:KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Kubernetes サービス アカウント
apigee-datastore-default-sa
を構成する- 環境変数
KSA_NAME
を再定義します。KSA_NAME="apigee-datastore-default-sa"
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Apigee Connect
Apigee Connect コンポーネント用に Workload Identity を構成します。
非本番環境
- 環境変数
KSA_NAME
を定義します。 例:KSA_NAME="apigee-connect-agent-service-account-name-sa"
apigee-connect-agent-hybrid-example-project-123abcd-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
本番環境
- 環境変数
KSA_NAME
とGSA_NAME
を定義します。 例:GSA_NAME="apigee-mart"
KSA_NAME="apigee-connect-agent-service-account-name-sa"
apigee-connect-agent-hybrid-example-project-123abcd-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 環境変数
- MART
MART コンポーネント用に Workload Identity を構成します。
非本番環境
- 環境変数
KSA_NAME
を定義します。 例:KSA_NAME="apigee-mart-service-account-name-sa"
apigee-mart-hybrid-example-project-123abcd-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
本番環境
- 環境変数
KSA_NAME
とGSA_NAME
を定義します。 例:GSA_NAME="apigee-mart"
KSA_NAME="apigee-mart-service-account-name-sa"
apigee-mart-hybrid-example-project-123abcd-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 環境変数
- Apigee 指標
Apigee 指標コンポーネント用に Workload Identity を構成します。
非本番環境
- 環境変数
KSA_NAME
を定義します。KSA_NAME="apigee-metrics-sa"
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
本番環境
- 環境変数
KSA_NAME
とGSA_NAME
を定義します。GSA_NAME="apigee-metrics"
KSA_NAME="apigee-metrics-sa"
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
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
は環境の名前です。
非本番環境
- 環境変数
KSA_NAME
を定義します。 例:KSA_NAME="apigee-udca-service-account-name-sa"
apigee-udca-hybrid-example-project-123abcd-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
本番環境
- 環境変数
KSA_NAME
とGSA_NAME
を定義します。 例:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-service-account-name-sa"
apigee-udca-hybrid-example-project-123abcd-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 組織レベル:
- Apigee Watcher
Apigee Watcher コンポーネント用に Workload Identity を構成します。
非本番環境
- 環境変数
KSA_NAME
を定義します。 例:KSA_NAME="apigee-watcher-service-account-name-sa"
apigee-watcher-hybrid-example-project-123abcd-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
本番環境
- 環境変数
KSA_NAME
とGSA_NAME
を定義します。 例:GSA_NAME="apigee-watcher"
KSA_NAME="apigee-watcher-service-account-name-sa"
apigee-watcher-hybrid-example-project-123abcd-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 環境変数
- ランタイム
Apigee ランタイム コンポーネント用に Workload Identity を構成します。
非本番環境
- 環境変数
KSA_NAME
を定義します。 例:KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
apigee-runtime-hybrid-example-project-example-env-234bcde-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
本番環境
- 環境変数
KSA_NAME
とGSA_NAME
を定義します。 例:GSA_NAME="apigee-runtime"
KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
apigee-runtime-hybrid-example-project-example-env-234bcde-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 環境変数
- Synchronizer
Synchronizer コンポーネント用に Workload Identity を構成します。
非本番環境
- 環境変数
KSA_NAME
を定義します。 例:KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
本番環境
- 環境変数
KSA_NAME
とGSA_NAME
を定義します。 例:GSA_NAME="apigee-synchronizer"
KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 環境変数
- UDCA(環境レベル)
環境レベルの UDCA コンポーネント用に Workload Identity を構成します。
非本番環境
- 環境変数
KSA_NAME
を定義します。 例:KSA_NAME="apigee-udca-env-level-service-account-name-sa"
apigee-udca-hybrid-example-project-example-env-234bcde-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
本番環境
- 環境変数
KSA_NAME
とGSA_NAME
を定義します。 例:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-env-level-service-account-name-sa"
apigee-udca-hybrid-example-project-example-env-234bcde-sa
- 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
- サービス アカウントにアノテーションを付けます。
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- アノテーションを確認します。
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 環境変数
- 省略可: ダウンロードしたサービス アカウント キーファイルをすべて削除します。
create-service-account
ツールを使用して Google サービス アカウントを作成した場合は、サービス アカウント キーが作成され、.json
キーファイルがダウンロードされている可能性があります。GKE で Workload Identity を使用する場合、これらのキーファイルは不要です。鍵ファイルは次のコマンドで削除できます。
rm $HYBRID_FILES/service-accounts/*.json
Workload Identity を確認する
- (省略可)Kubernetes サービス アカウントのステータスを、Google Cloud コンソールの [Kubernetes: ワークロードの概要] ページで確認できます。
apigeectl check-ready
を使用してデプロイのステータスを再度確認するには:${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml