Topik ini menjelaskan cara mengaktifkan Workload Identity Federation untuk penginstalan campuran Apigee di platform AKS dan EKS.
Untuk penginstalan di GKE, ikuti petunjuk di Mengaktifkan Workload Identity di GKE.
Ringkasan
Workload identity federation memungkinkan aplikasi yang berjalan di luar Google Cloud meniru akun layanan Google Cloud Platform menggunakan kredensial dari penyedia identitas eksternal.
Menggunakan workload identity federation dapat membantu Anda meningkatkan keamanan dengan memungkinkan aplikasi menggunakan mekanisme autentikasi yang disediakan oleh lingkungan eksternal dan dapat membantu mengganti kunci akun layanan.
Untuk ringkasan, lihat Praktik terbaik untuk menggunakan Workload Identity Federation.
Menyiapkan Workload Identity Federation
Untuk menggunakan Workload Identity Federation dengan Apigee hybrid, konfigurasikan cluster terlebih dahulu, lalu terapkan fitur ke penginstalan Apigee hybrid.
Sebelum memulai
Petunjuk ini mengasumsikan bahwa Anda telah menyiapkan penginstalan Apigee hybrid. Akun layanan IAM dan akun layanan Kubernetes dibuat selama penginstalan awal. Lihat Gambaran Besar untuk mengetahui ringkasan penginstalan Apigee Hybrid.
Untuk penginstalan di AKS, pastikan Anda telah mengaktifkan penerbit OpenID Connect (OIDC). Anda harus mengaktifkan fitur ini agar Workload Identity Federation dapat mengakses metadata OpenID Connect dan JSON Web Key Set (JWKS) untuk cluster.
Konfigurasikan cluster Anda untuk menggunakan Workload Identity Federation.
-
Pastikan konfigurasi
gcloud
saat ini ditetapkan ke project ID Google Cloud Anda dengan perintah berikut:gcloud config get project
-
Aktifkan Security Token Service API:
Pastikan Security Token Service API diaktifkan dengan perintah berikut:
gcloud services list --enabled --project PROJECT_ID | grep sts.googleapis.com
Jika API tidak diaktifkan:
Konsol
Enable the Security Token Service API.
Command line
Aktifkan API dengan perintah berikut:
gcloud services enable sts.googleapis.com --project PROJECT_ID
-
Buat workload identity pool dan penyedianya.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk mengonfigurasi Workload Identity Federation, minta administrator Anda untuk memberi Anda peran IAM berikut pada project:
-
Admin Workload Identity Pool (
roles/iam.workloadIdentityPoolAdmin
) -
Service Account Admin (
roles/iam.serviceAccountAdmin
)
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Atau, peran dasar Pemilik IAM (roles/owner
) juga mencakup izin untuk mengonfigurasi penggabungan identitas. Anda tidak boleh memberikan peran dasar dalam lingkungan produksi, tetapi Anda dapat memberikannya dalam lingkungan pengembangan atau pengujian.Untuk membuat workload identity pool dan penyedia workload, lakukan hal berikut:
-
Tentukan URL penerbit cluster AKS Anda:
AKS
az aks show -n NAME -g RESOURCE_GROUP --query "oidcIssuerProfile.issuerUrl" -otsv
Ganti kode berikut:
NAME
: Nama cluster.RESOURCE_GROUP
: Grup resource cluster.
Perintah ini menampilkan URL penerbit. Anda akan memerlukan URL penerbit di salah satu langkah berikut.
Jika perintah tersebut tidak menampilkan URL penerbit, pastikan Anda telah mengaktifkan fitur penerbit OIDC.
EKS
aws eks describe-cluster --name NAME --query "cluster.identity.oidc.issuer" --output text
Ganti
NAME
dengan nama cluster.Perintah ini menampilkan URL penerbit. Anda memerlukan URL penerbit di salah satu langkah berikut.
Kubernetes lainnya
-
Hubungkan ke cluster Kubernetes Anda dan gunakan `kubectl` untuk menentukan
URL penerbit cluster Anda:
kubectl get --raw /.well-known/openid-configuration | jq -r .issuer
Anda memerlukan URL penerbit di salah satu langkah berikut.
-
Opsional: Jika penerbit OIDC Anda tidak dapat diakses secara publik, download JSON Web Key Set (JWKS) cluster:
kubectl get --raw /openid/v1/jwks > cluster-jwks.json
Untuk memeriksa apakah penyedia OIDC tersedia untuk publik, Anda harus dapat mengakses URL penyedia dengan perintah CURL dan menerima respons 200.
-
Buat workload identity pool baru:
gcloud iam workload-identity-pools create POOL_ID \ --location="global" \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
Ganti kode berikut:
POOL_ID
: ID unik untuk poolDISPLAY_NAME
: (Opsional) Nama kumpulan.DESCRIPTION
: (Opsional) Deskripsi kumpulan yang Anda pilih. Deskripsi ini muncul saat Anda memberikan akses ke identitas kumpulan.
Contoh:
gcloud iam workload-identity-pools create my-wi-pool --display-name="My workload pool" --description="My workload pool description"
-
Tambahkan cluster sebagai penyedia workload identity pool. Pilih perintah untuk membuat penyedia, bergantung pada apakah penerbit OIDC Anda dapat diakses secara publik atau tidak dapat diakses secara publik:
Dapat diakses secara publik
Jika penerbit OIDC Anda dapat diakses secara publik, buat penyedia dengan perintah berikut:
gcloud iam workload-identity-pools providers create-oidc WORKLOAD_PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="ISSUER" \ --attribute-mapping="google.subject=assertion.sub"
Tidak dapat diakses secara publik
Jika penerbit OIDC Anda tidak dapat diakses secara publik, buat penyedia dengan perintah berikut:
gcloud iam workload-identity-pools providers create-oidc WORKLOAD_PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="ISSUER" \ --jwks-file="cluster-jwks.json" \ --attribute-mapping="google.subject=assertion.sub"
Ganti kode berikut:
WORKLOAD_PROVIDER_ID
: ID penyedia workload identity pool unik yang Anda pilih.POOL_ID
: ID workload identity pool yang telah Anda buat sebelumnya.-
ISSUER
: Gunakan URL penerbit yang telah Anda tentukan sebelumnya untuk URI penerbit .
attribute-mapping="google.subject=assertion.sub"
memetakan subjek Kubernetes ke subjek IAM.
-
Admin Workload Identity Pool (
Jika diperlukan, tetapkan konfigurasi gcloud
saat ini:
gcloud config set project PROJECT_ID
Membuat file konfigurasi kredensial
Untuk men-deploy workload Kubernetes yang dapat mengakses resource Google Cloud , Anda harus membuat file konfigurasi kredensial untuk setiap akun layanan IAM terlebih dahulu:
-
Cantumkan akun layanan IAM (juga disebut "akun layanan Google") dengan perintah berikut:
gcloud iam service-accounts list --project PROJECT_ID
Anda harus membuat file konfigurasi kredensial untuk akun layanan IAM berikut:
Prod
Untuk lingkungan produksi:
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@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
Non-prod
Untuk lingkungan non-produksi:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id.iam.gserviceaccount.com False
-
Buat file konfigurasi kredensial untuk setiap akun layanan IAM dalam daftar sebelumnya. Anda memerlukan file konfigurasi kredensial ini untuk mengonfigurasi Apigee hybrid agar dapat menggunakan Workload Identity Federation:
Kode
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=SERVICE_ACCOUNT_EMAIL \ --credential-source-file=/var/ --credential-source-type=text \ --output-file=SERVICE_ACCOUNT_NAME-credential-configuration.json
Contoh
gcloud iam workload-identity-pools create-cred-config \ projects/123123123123/locations/global/workloadIdentityPools/my-wi-pool/providers/my-wi-provider \ --service-account=apigee-cassandra@myhybridporg.iam.gserviceaccount.com \ --credential-source-file=/var/ --credential-source-type=text \ --output-file=apigee-cassandra-credential-configuration.json
Dengan keterangan:
-
PROJECT_NUMBER
: Nomor project dari project yang berisi workload identity pool. Ini harus berupa nomor project, bukan project ID. -
POOL_ID
: ID workload identity pool -
WORKLOAD_PROVIDER_ID
: ID penyedia workload identity pool -
SERVICE_ACCOUNT_EMAIL
: Alamat email akun layanan, jika Anda mengonfigurasi ServiceAccount Kubernetes untuk menggunakan peniruan identitas akun layanan IAM.
File konfigurasi kredensial memungkinkan [Library Klien Cloud](/apis/docs/cloud-client-libraries), gcloud CLI, dan Terraform menentukan hal berikut:
- Tempat Anda bisa memperoleh kredensial eksternal
- Workload identity pool dan penyedia workload identity yang akan digunakan
- Akun layanan yang akan ditiru
Mengonfigurasi Apigee hybrid untuk menggunakan Workload Identity Federation
-
Salin atau pindahkan setiap file output (
SERVICE_ACCOUNT_NAME-credential-configuration.json
) ke direktori diagram berikut (atau subdirektorinya). Ini adalah file yang Anda buat di langkah Membuat file konfigurasi kredensial.Prod
Akun layanan Direktori diagram Helm Apigee apigee-cassandra
apigee-datastore/
apigee-mart
apigee-org/
apigee-metrics
apigee-telemetry/
apigee-runtime
apigee-env/
apigee-synchronizer
apigee-env/
apigee-udca
apigee-org/
apigee-env/
apigee-watcher
apigee-org/
Non-prod
Akun layanan Diagram Helm Apigee apigee-non-prod
apigee-datastore/
apigee-telemetry/
apigee-org/
apigee-env/
-
Lakukan perubahan global berikut pada file penggantian cluster Anda:
Kode
gcp: workloadIdentity: enabled: false # must be set to false to use Workload Identity Federation federatedWorkloadIdentity: enabled: true audience: "AUDIENCE" credentialSourceFile: "/var/run/service-account/token"
Contoh
gcp: workloadIdentity: enabled: false federatedWorkloadIdentity: enabled: true audience: "//iam.googleapis.com/projects/123123123123/locations/global/workloadIdentityPools/my-wi-pool/providers/my-wi-provider" credentialSourceFile: "/var/run/service-account/token"
Dengan: AUDIENCE adalah audiens yang diizinkan dari Penyedia Workload Identity. Anda dapat menemukan nilainya dengan menelusuri istilah
audience:
di salah satu file konfigurasi kredensial. Nilai audiens sama di setiap file konfigurasi kredensial.Misalnya, dalam contoh file
apigee-udca-credential-configuration.json
berikut:{ "universe_domain": "googleapis.com", "type": "external_account:," "audience": "//iam.googleapis.com/projects/123123123123/locations/global/workloadIdentityPools/my-wi-pool/providers/my-wi-provider", "subject_token_type": "urn:ietf:params:oauth: token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "service "impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/apigee-udca@myhybridproject.iam.gserviceaccount.com:generateAccessToken", "credential_source": { "file": "/var/run/service-account/token", "format": { "type": "text" } } }
Nilai audiens adalah
//iam.googleapis.com/projects/123123123123/locations/global/workloadIdentityPools/my-wi-pool/providers/my-wi-provider
. -
Konfigurasikan penggantian untuk setiap komponen menggunakan Workload Identity Federation. Pilih petunjuk untuk file sertifikat, secret Kubernetes, atau Vault yang sesuai untuk penginstalan Anda.
File sertifikat
Ganti nilai
serviceAccountPath
dengan file sumber kredensial untuk akun layanan IAM yang sesuai. Ini harus berupa jalur yang relatif terhadap direktori diagram. Contoh:envs: - name: ENVIRONMENT_NAME serviceAccountPaths: synchronizer: apigee-synchronizer-credential-configuration.json runtime: apigee-runtime-credential-configuration.json udca: udca-credential-configuration.json mart: serviceAccountPath: mart-credential-configuration.json connectAgent: serviceAccountPath: mart-credential-configuration.json metrics: serviceAccountPath: metrics-credential-configuration.json udca: serviceAccountPath: UDCA_SERVICE_ACCOUNT_FILEPATH watcher: serviceAccountPath: WATCHER_SERVICE_ACCOUNT_FILEPATH
Rahasia K8s
-
Buat secret Kubernetes baru menggunakan file sumber kredensial untuk setiap file konfigurasi kredensial.
kubectl create secret -n APIGEE_NAMESPACE generic SECRET_NAME --from-file="client_secret.json=CREDENTIAL_CONFIGURATION_FILE"
Contoh:
kubectl create secret -n apigee generic udca-workoad-identity-secret --from-file="client_secret.json=./apigee-udca-credential-configuration.json"
-
Ganti nilai
serviceAccountRef
dengan secret baru. Contoh:udca: serviceAccountRef: udca-workoad-identity-secret
Vault
Perbarui kunci akun layanan,
SAKEY
untuk setiap akun layanan di Vault dengan file sumber kredensial yang sesuai. Prosedurnya sama untuk semua komponen. Misalnya, untuk UDCA:SAKEY=$(cat .apigee-udca-credential-configuration.json); kubectl -n APIGEE_NAMESPACE exec vault-0 -- vault kv patch secret/apigee/orgsakeys udca="$SAKEY"
Lihat
Storing service account keys in Hashicorp Vault
untuk mengetahui informasi selengkapnya. -
Buat secret Kubernetes baru menggunakan file sumber kredensial untuk setiap file konfigurasi kredensial.
-
Terapkan perubahan pada setiap komponen yang terpengaruh dengan perintah
helm upgrade
:Jika Anda memperbarui kunci akun layanan Vault, perbarui diagram
apigee-operator
.helm upgrade operator apigee-operator/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
Perbarui diagram lainnya yang terpengaruh dalam urutan berikut:
helm upgrade datastore apigee-datastore/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
helm upgrade telemetry apigee-telemetry/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
helm upgrade $ORG_NAME apigee-org/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
Perbarui diagram
apigee-env
untuk setiap env, dengan mengganti $ENV_RELEASE_NAME dan ENV_NAME setiap kali:helm upgrade $ENV_RELEASE_NAME apigee-env/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set env=$ENV_NAME \ -f overrides.yaml
Lihat Referensi Helm Apigee hybrid untuk mengetahui daftar komponen dan diagram yang sesuai.
Memberikan akses ke akun layanan Kubernetes
-
Cantumkan akun layanan Kubernetes dengan perintah berikut:
kubectl get sa -n APIGEE_NAMESPACE
-
Berikan akses ke akun layanan Kubernetes untuk meniru identitas akun layanan IAM terkait seperti yang ditunjukkan dalam tabel berikut. Tabel ini menampilkan nama akun layanan IAM Apigee default. Jika Anda menggunakan nama akun layanan kustom, gunakan akun layanan IAM yang sesuai:
Akun layanan Kubernetes Akun layanan IAM Akun layanan Kubernetes tingkat organisasi apigee-connect-agent-ORG_NAME-ORG_HASH_ID
apigee-mart
apigee-mart-ORG_NAME-ORG_HASH_ID
apigee-mart
apigee-metrics-apigee-telemetry
apigee-metrics
apigee-open-telemetry-collector-apigee-telemetry
apigee-metrics
apigee-udca-ORG_NAME-ORG_HASH_ID
apigee-udca
apigee-watcher-ORG_NAME-ORG_HASH_ID
apigee-watcher
Akun layanan Kubernetes tingkat lingkungan apigee-runtime-ORG_NAME-ENV_NAME-ENV_HASH_ID
apigee-runtime
apigee-synchronizer-ORG_NAME-ENV_NAME-ENV_HASH_ID
apigee-synchronizer
Pencadangan dan pemulihan Cassandra (jika diaktifkan) apigee-cassandra-backup-sa
apigee-cassandra
apigee-cassandra-restore-sa
apigee-cassandra
Dengan keterangan:
ORG_NAME
: 15 karakter pertama nama organisasi Anda.ORG_HASH_ID
: ID hash unik dari nama lengkap organisasi Anda.ENV_NAME
: 15 karakter pertama dari nama lingkungan Anda.ENV_HASH_ID
: ID hash unik dari nama organisasi dan lingkungan Anda.
Contoh:
apigee-connect-agent-myhybridorg-123abcd
apigee-runtime-myhybridorg-prodenv-234bcde
Berikan akses ke setiap akun layanan Kubernetes untuk meniru identitas akun layanan IAM yang sesuai dengan perintah berikut:
gcloud iam service-accounts add-iam-policy-binding \ IAM_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \ --role=roles/iam.workloadIdentityUser
Dengan keterangan:
IAM_SA_NAME
: nama akun layanan.PROJECT_ID
: ID project yang dikaitkan dengan Org Apigee.PROJECT_NUMBER
: nomor project dari project tempat Anda membuat workload identity pool.POOL_ID
: ID workload identity pool.MAPPED_SUBJECT
: ServiceAccount Kubernetes dari klaim dalam token ID yang Anda petakan kegoogle.subject
. Misalnya, jika Anda memetakangoogle.subject=assertions.sub
dan token ID Anda berisi"sub": "system:serviceaccount:default:my-kubernetes-serviceaccount"
,MAPPED_SUBJECT
adalahsystem:serviceaccount:default:my-kubernetes-serviceaccount
.
Untuk informasi selengkapnya tentang Workload Identity Federation dan praktik terbaik, lihat Praktik terbaik untuk menggunakan workload identity federation.
-