僅搭配 Workload Identity 的 GKE:設定 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 中執行的程序提供身分,並允許該程序向 API 伺服器進行驗證,類似於使用者驗證。如要進一步瞭解 Kubernetes 服務帳戶,請參閱「為 Pod 設定服務帳戶」。
在先前的程序中執行 apigeectl apply
時,apigeectl
工具會建立 Apigee hybrid 所需的大部分 Kubernetes 服務帳戶。
在 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
其中:
APIGEECTL_HOME
是您安裝apigeectl
的目錄。CLUSTER_LOCATION
是叢集的地區 (或區域),例如us-central1
。ENV_NAME
是環境名稱。HYBRID_FILES
是您建立overrides
和certs
目錄的目錄。NAMESPACE
是 Apigee 命名空間。PROJECT_ID
是您的 Google Cloud 專案。ORG_NAME
是 Apigee 機構的名稱。
- 使用下列指令,確認目前的
gcloud
設定已設為 Google Cloud 專案 ID:gcloud config get project
- 建立
apigee-cassandra-restore
Kubernetes 服務帳戶。當您透過執行
apigeectl apply
套用設定時,這個指令會建立 Workload Identity 所需的大部分 Kubernetes 服務帳戶。如要建立
apigee-cassandra-restore
Kubernetes 服務帳戶,請搭配--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 Hybrid 安裝作業中,兩個預設節點集區的名稱分別為
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 服務帳戶。正式安裝應為八個。
使用下列指令取得名稱清單:
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
請按照下列程序,為 Hybrid 安裝啟用 Workload Identity:
-
針對每個 Apigee 元件,請使用元件的 Google 服務帳戶註解對應的 Kubernetes 服務帳戶。
以下步驟會使用兩個環境變數。您會在每組指令前重設這些變數的值:
- 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 元件有六個相關聯的 Kubernetes 服務帳戶:
apigee-cassandra-backup
apigee-cassandra-restore
apigee-cassandra-schema-setup
apigee-cassandra-schema-val
(val
= 驗證)apigee-cassandra-user-setup
apigee-datastore-default
非正式環境
設定
apigee-cassandra-backup
Kubernetes 服務帳戶- 定義
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
設定
apigee-cassandra-restore
Kubernetes 服務帳戶- 重新定義
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
設定
apigee-cassandra-schema-setup
Kubernetes 服務帳戶- 重新定義
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
設定
apigee-cassandra-schema-val
Kubernetes 服務帳戶- 重新定義
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
設定
apigee-cassandra-user-setup
Kubernetes 服務帳戶- 重新定義
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
設定
apigee-datastore-default-sa
Kubernetes 服務帳戶- 重新定義
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-cassandra-backup
Kubernetes 服務帳戶- 定義
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
設定
apigee-cassandra-restore
Kubernetes 服務帳戶- 重新定義
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
設定
apigee-cassandra-schema-setup
Kubernetes 服務帳戶- 重新定義
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
設定
apigee-cassandra-schema-val
Kubernetes 服務帳戶- 重新定義
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
設定
apigee-cassandra-user-setup
Kubernetes 服務帳戶- 重新定義
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
設定
apigee-datastore-default-sa
Kubernetes 服務帳戶- 重新定義
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 有兩個獨立的 Kubernetes 服務帳戶,每個範圍一個。您可以透過帳戶名稱來區分兩者。env-scope 帳戶會在服務帳戶名稱中加入環境名稱。例如:
- 組織層級:
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
- (選用) 您可以在 Google Cloud console的「Kubernetes:工作負載總覽」頁面中查看 Kubernetes 服務帳戶的狀態。
- 如要再次透過
apigeectl check-ready
檢查部署狀態,請按照下列步驟操作:${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml