Dokumen ini menjelaskan cara mengonfigurasi identitas beban kerja terkelola untuk Google Kubernetes Engine (GKE) di cluster yang dikelola armada GKE. Panduan ini juga menjelaskan cara men-deploy workload dan memverifikasi identitas serta sertifikat workload.
Menyiapkan dan menggunakan workload identity terkelola untuk GKE memerlukan langkah-langkah berikut:
Workload identity pool yang dikelola Google
Saat Anda menambahkan cluster ke fleet GKE, fleet akan otomatis membuat workload identity pool yang dikelola Google yang berfungsi sebagai root domain kepercayaan Anda. Workload identity pool yang dikelola Google memiliki batasan berikut:
Google sepenuhnya mengelola kumpulan, sehingga Anda tidak dapat membuat sub-resource apa pun, seperti namespace, identitas, atau penyedia identitas.
Kumpulan hanya dapat digunakan untuk workload GKE. Anda tidak dapat menambahkan jenis beban kerja lain, seperti VM Compute Engine, ke kumpulan.
Semua cluster dalam kumpulan tunduk pada model kesamaan namespace Kubernetes standar. Artinya, semua cluster dalam kumpulan memiliki hak istimewa yang setara. Workload yang berjalan di cluster mana pun dalam kumpulan dapat menggunakan identitas apa pun yang ada dalam kumpulan.
Konfigurasi multi-project
ResourceGoogle Cloud yang Anda gunakan dalam dokumen ini, seperti
cluster GKE, CA root, dan CA subordinasi, dapat ada
dalam project terpisah. Saat merujuk ke resource ini, gunakan flag --project
untuk menentukan project yang benar untuk setiap resource.
Sebelum memulai
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Pahami identitas workload terkelola.
Pastikan Anda telah membuat cluster GKE.
Tambahkan cluster Anda ke fleet GKE. Jika cluster Anda adalah cluster Autopilot, hapus
--enable-workload-identity
. Fleet otomatis membuat workload identity pool yang dikelola Google yang berfungsi sebagai domain kepercayaan.Aktifkan fleet GKE dengan menjalankan perintah berikut:
gcloud container clusters update CLUSTER_NAME \ --enable-workload-identity \ --enable-fleet \ --fleet-project=PROJECT_ID
Ganti kode berikut:
CLUSTER_NAME
: nama cluster GKE yang ingin Anda daftarkan ke fleet GKEPROJECT_ID
: project ID host armada GKE
Enable the IAM and Certificate Authority Service APIs:
gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com privateca.googleapis.com Konfigurasikan Google Cloud CLI untuk menggunakan project penagihan dan kuota.
gcloud config set billing/quota_project PROJECT_ID
Ganti PROJECT_ID dengan ID project fleet.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan guna membuat identitas beban kerja terkelola dan menyediakan sertifikat identitas beban kerja terkelola, minta administrator untuk memberi Anda peran IAM berikut pada project:
-
Untuk membuat dan mengonfigurasi identitas beban kerja terkelola:
IAM Workload Identity Pool Admin (
roles/iam.workloadIdentityPoolAdmin
) -
Untuk membuat dan mengonfigurasi pool CA:
CA Service Admin (
roles/privateca.admin
)
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.
Mengonfigurasi Layanan CA untuk menerbitkan sertifikat bagi workload identity terkelola
Untuk mengonfigurasi workload identity terkelola untuk GKE, Anda harus mengonfigurasi certificate authority (CA) dan satu atau beberapa CA subordinat terlebih dahulu. Konfigurasi ini dikenal sebagai hierarki CA.
Anda dapat menggunakan kumpulan CA Service untuk menyiapkan hierarki ini. Dengan hierarki ini, kumpulan CA subordinat menerbitkan sertifikat identitas beban kerja X.509 ke workload Anda.
Mengonfigurasi kumpulan root CA
Untuk membuat kumpulan CA root, lakukan hal berikut:
Buat kumpulan CA root di tingkat Enterprise menggunakan gcloud privateca pools create
.
Tingkat ini ditujukan untuk penerbitan sertifikat bervolume rendah dan berumur panjang.
gcloud privateca pools create ROOT_CA_POOL_ID \ --location=REGION \ --project=CA_PROJECT_ID \ --tier=enterprise
Ganti kode berikut:
ROOT_CA_POOL_ID
: ID unik untuk kumpulan root CA. Panjang ID dapat mencapai 64 karakter dan hanya boleh berisi karakter alfanumerik huruf kecil dan besar, garis bawah, atau tanda hubung. ID kumpulan harus unik dalam region.REGION
: region tempat kumpulan CA root berada.CA_PROJECT_ID
: project ID tempat Anda ingin membuat root CA.
Untuk mempelajari lebih lanjut kumpulan CA, tingkat, dan region, lihat Membuat kumpulan CA.
Mengonfigurasi CA root
Buat CA root di kumpulan CA root menggunakan gcloud privateca roots create
.
Anda mungkin diminta untuk mengaktifkan CA root
jika ini adalah satu-satunya CA di Kumpulan CA root.
Untuk membuat root CA, jalankan perintah berikut:
gcloud privateca roots create ROOT_CA_ID \ --pool=ROOT_CA_POOL_ID \ --subject="CN=ROOT_CA_CN, O=ROOT_CA_ORGANIZATION" \ --key-algorithm="KEY_ALGORITHM" \ --max-chain-length=1 \ --location=REGION \ --project=CA_PROJECT_ID \ --auto-enable
Ganti kode berikut:
ROOT_CA_ID
: nama unik untuk CA root. Nama CA dapat memiliki panjang hingga 64 karakter dan hanya boleh berisi karakter alfanumerik, garis bawah, atau tanda hubung dalam huruf besar dan kecil. Nama CA harus unik dalam region.ROOT_CA_POOL_ID
: ID kumpulan CA root.ROOT_CA_CN
: nama umum CA root.ROOT_CA_ORGANIZATION
: organisasi root CA.KEY_ALGORITHM
: algoritma kunci—misalnya,ec-p256-sha256
REGION
: region tempat kumpulan CA root berada.CA_PROJECT_ID
: project ID tempat Anda membuat root CA.
Untuk mengetahui informasi selengkapnya tentang kolom subject
untuk CA, lihat Subjek.
Secara opsional, Anda dapat membuat root CA tambahan di kumpulan root CA. Tindakan ini dapat berguna untuk rotasi root CA.
Mengonfigurasi CA subordinat
Secara opsional, Anda dapat mengonfigurasi CA subordinat. Mengonfigurasi CA subordinat dapat membantu hal berikut:
Beberapa skenario penerbitan sertifikat: Jika memiliki beberapa skenario penerbitan sertifikat, Anda dapat membuat CA subordinat untuk setiap skenario.
Load balancing yang lebih baik: Menambahkan beberapa CA subordinat dalam kumpulan CA membantu Anda mencapai load balancing permintaan sertifikat yang lebih baik.
Untuk membuat kumpulan CA subordinat dan CA subordinat, lakukan hal berikut:
Buat kumpulan CA subordinat di tingkat DevOps, yang ditujukan untuk penerbitan sertifikat bervolume tinggi dan berumur pendek.
gcloud privateca pools create SUBORDINATE_CA_POOL_ID \ --location=REGION \ --project=CA_PROJECT_ID \ --tier=devops
Ganti kode berikut:
SUBORDINATE_CA_POOL_ID
: ID unik untuk kumpulan CA subordinasi. Panjang ID dapat mencapai 64 karakter dan hanya boleh berisi karakter alfanumerik huruf besar dan kecil, garis bawah, atau tanda hubung. ID kumpulan harus unik dalam region.REGION
: region tempat membuat kumpulan CA subordinat.CA_PROJECT_ID
: ID project tempat Anda membuat CA subordinat.
Untuk mengetahui informasi selengkapnya, lihat Membuat kumpulan CA.
Buat subordinate CA di kumpulan subordinate CA. Jangan ubah mode penerbitan berbasis konfigurasi default.
gcloud privateca subordinates create SUBORDINATE_CA_ID \ --pool=SUBORDINATE_CA_POOL_ID \ --location=REGION \ --issuer-pool=ROOT_CA_POOL_ID \ --issuer-location=REGION \ --subject="CN=SUBORDINATE_CA_CN, O=SUBORDINATE_CA_ORGANIZATION" \ --key-algorithm="KEY_ALGORITHM" \ --use-preset-profile=subordinate_mtls_pathlen_0 \ --project=CA_PROJECT_ID \ --auto-enable
Ganti kode berikut:
SUBORDINATE_CA_ID
: nama unik untuk CA subordinat. Panjang nama dapat mencapai 64 karakter dan hanya boleh berisi karakter alfanumerik huruf besar dan kecil, garis bawah, atau tanda hubung. Nama kumpulan harus unik dalam wilayah.SUBORDINATE_CA_POOL_ID
: nama pool CA subordinat.REGION
: region tempat kumpulan CA subordinat berada.ROOT_CA_POOL_ID
: ID kumpulan CA root.REGION
: region kumpulan CA root.SUBORDINATE_CA_CN
: nama umum CA subordinat.SUBORDINATE_CA_ORGANIZATION
: nama organisasi penerbit CA subordinat.KEY_ALGORITHM
: algoritma kunci—misalnya,ec-p256-sha256
CA_PROJECT_ID
: ID project tempat Anda membuat CA subordinat.
Untuk mengetahui informasi selengkapnya tentang kolom
subject
untuk CA, lihat Subjek.
Membuat file konfigurasi penerbitan sertifikat
Untuk mengikat CA ke workload identity pool, CA harus memiliki konfigurasi penerbitan sertifikat. Secara opsional, jika Anda memerlukan workload untuk diautentikasi di beberapa domain kepercayaan, Anda juga dapat memperbarui kumpulan dengan konfigurasi konfigurasi kepercayaan.
Untuk mengonfigurasi konfigurasi penerbitan sertifikat, Anda membuat file konfigurasi penerbitan sertifikat. Format file mirip dengan yang berikut ini:
{ "inlineCertificateIssuanceConfig": { "caPools": { "REGION1": "projects/CA_PROJECT_NUMBER1/locations/REGION1/caPools/SUBORDINATE_CA_POOL_ID1", "REGION2": "projects/CA_PROJECT_NUMBER2/locations/REGION2/caPools/SUBORDINATE_CA_POOL_ID2" }, "lifetime": "DURATION", "rotationWindowPercentage": ROTATION_WINDOW_PERCENTAGE, "keyAlgorithm": "ALGORITHM" } }
Ganti kode berikut:
REGION
: Region tempat CA berada.CA_PROJECT_NUMBER
: Nomor project dari project tempat Anda membuat kumpulan CA subordinat. Untuk mendapatkan nomor project dari project CA_PROJECT_ID, jalankan perintah berikut:gcloud projects describe CA_PROJECT_ID --format="value(projectNumber)"
SUBORDINATE_CA_POOL_ID
: Nama pool CA subordinat.ALGORITHM
: Opsional. Algoritma enkripsi yang digunakan untuk membuat kunci pribadi. Nilai yang valid adalahECDSA_P256
(default),ECDSA_P384
,RSA_2048
,RSA_3072
,RSA_4096
.DURATION
: Opsional. Durasi validitas sertifikat leaf, dalam detik. Nilainya harus antara 86400 (1 hari) dan 2592000 (30 hari). Jika tidak ditentukan, nilai default 86400 (1 hari) akan digunakan. Validitas sebenarnya dari sertifikat yang diterbitkan juga bergantung pada CA penerbit, karena dapat membatasi masa berlaku sertifikat yang diterbitkan.ROTATION_WINDOW_PERCENTAGE
: Opsional: Persentase masa aktif sertifikat saat perpanjangan dipicu. Nilai harus antara 50 dan 80. Jumlah default-nya adalah 50.
Membuat file konfigurasi kepercayaan
Secara default, workload Anda dalam domain kepercayaan yang sama dapat saling
melakukan autentikasi menggunakan identitas workload terkelola. Jika Anda ingin workload yang berada di domain kepercayaan yang berbeda melakukan autentikasi bersama, Anda harus mendeklarasikan hubungan kepercayaan secara eksplisit di workload identity pool.
Anda melakukannya dengan membuat file konfigurasi kepercayaan
yang berisi inlineTrustConfig
yang menyediakan sertifikat untuk setiap domain.
File konfigurasi kepercayaan berisi kumpulan anchor kepercayaan yang digunakan identitas workload terkelola untuk memvalidasi sertifikat peer. File konfigurasi kepercayaan memetakan domain kepercayaan SPIFFE ke sertifikat CA.
Untuk membuat file konfigurasi kepercayaan, lakukan hal berikut:
-
Download sertifikat.
gcloud privateca pools get-ca-certs ROOT_CA_POOL_ID \ --output-file=CERTIFICATE_PATH \ --location=REGION
Ganti kode berikut:
-
ROOT_CA_POOL_ID
: ID root CA pool -
CERTIFICATE_PATH
: jalur untuk menampilkan sertifikat yang dienkode PEM -
REGION
: region kumpulan root CA
-
-
Buat file yang berisi konfigurasi kepercayaan inline Anda, dengan sertifikat berformat PEM. Filenya terlihat mirip dengan yang berikut ini:
{ "inlineTrustConfig": { "additionalTrustBundles": { "TRUST_DOMAIN_NAME1": { "trustAnchors": [ { "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----" }, { "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----" } ] }, "TRUSTED_DOMAIN_NAME2": { "trustAnchors": [ { "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL3\n-----END CERTIFICATE-----" }, { "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL4\n-----END CERTIFICATE-----" } ] } } } }
Ganti kode berikut:
-
TRUST_DOMAIN_NAME
: Nama domain kepercayaan, yang diformat sebagai berikut:PROJECT_ID.svc.id.goog
-
CERTIFICATE_MATERIAL
: Kumpulan sertifikat CA berformat PEM yang tepercaya untuk menerbitkan sertifikat di domain kepercayaan.
-
Mengikat CA ke workload identity pool
Setelah membuat hierarki CA dan membuat konfigurasi penerbitan sertifikat untuk setiap CA, Anda akan mengikat CA ke workload identity pool. Untuk mengikat CA ke workload identity pool, Anda memperbarui workload identity pool dengan konfigurasi pemberian sertifikat CA. Kemudian, Anda dapat memverifikasi bahwa kumpulan telah diperbarui.
Memperbarui workload identity pool
Untuk mengupdate pool, jalankan perintah berikut:
gcloud iam workload-identity-pools update TRUST_DOMAIN_NAME \ --location="global" \ --inline-certificate-issuance-config-file=CIC_JSON_FILE_PATH \ --inline-trust-config-file=TC_JSON_FILE_PATH \ --project=PROJECT_ID
Ganti kode berikut:
TRUST_DOMAIN_NAME
: Nama domain kepercayaan, yang diformat sebagai berikut:PROJECT_ID.svc.id.goog
CIC_JSON_FILE_PATH
: Jalur ke file konfigurasi penerbitan sertifikat (cic.json
) berformat JSON yang Anda buat sebelumnya.TC_JSON_FILE_PATH
: Opsional. Jalur ke file konfigurasi kepercayaan berformat JSON (tc.json
) yang Anda buat sebelumnya. Jika beban kerja Anda diautentikasi di berbagai domain kepercayaan, Anda harus menentukan file ini. Jika tidak, Anda dapat menghilangkan--inline-trust-config
.
Memverifikasi bahwa workload identity pool telah diperbarui
Untuk memverifikasi bahwa workload identity pool Anda telah diperbarui beserta konfigurasi penerbitan sertifikat dan konfigurasi kepercayaan, jalankan perintah berikut:
gcloud iam workload-identity-pools describe TRUST_DOMAIN_NAME \ --location="global" \ --project=PROJECT_ID
Ganti TRUST_DOMAIN_NAME
dengan nama domain kepercayaan
yang Anda gunakan untuk memperbarui kumpulan identitas beban kerja sebelumnya
dalam dokumen ini.
Output perintah terlihat seperti berikut:
inlineCertificateIssuanceConfig: caPools: REGION1: projects/PROJECT_NUMBER1/locations/REGION1/caPools/SUBORDINATE_CA_POOL_ID1, REGION2: projects/PROJECT_NUMBER2/locations/REGION2/caPools/SUBORDINATE_CA_POOL_ID2 keyAlgorithm: ALGORITHM lifetime: DURATION rotationWindowPercentage: ROTATION_WINDOW_PERCENTAGE inlineTrustConfig: additionalTrustBundles: example.com: trustAnchors: - pemCertificate: |- -----BEGIN CERTIFICATE----- CERTIFICATE_MATERIAL1 -----END CERTIFICATE----- - pemCertificate: |- -----BEGIN CERTIFICATE----- CERTIFICATE_MATERIAL2 -----END CERTIFICATE----- myorg.com: trustAnchors: - pemCertificate: |- -----BEGIN CERTIFICATE----- CERTIFICATE_MATERIAL3 -----END CERTIFICATE----- - pemCertificate: |- -----BEGIN CERTIFICATE----- CERTIFICATE_MATERIAL4 -----END CERTIFICATE----- name: PROJECT_ID.svc.id.goog state: ACTIVE
Jika inlineCertificateIssuanceConfig
atau inlineTrustConfig
tidak ada dalam output perintah, pastikan Anda telah mengonfigurasi gcloud CLI dengan benar untuk menggunakan project yang benar untuk penagihan dan kuota.
Anda mungkin perlu mengupdate ke gcloud CLI versi yang lebih baru.
Memberi otorisasi identitas workload terkelola untuk meminta sertifikat dari kumpulan CA
Setelah mengikat CA ke workload identity pool, Anda harus memberikan otorisasi ke workload identity terkelola untuk meminta sertifikat dari kumpulan CA. Untuk memberi otorisasi identitas ini, lakukan hal berikut:
Berikan peran IAM CA Service Workload Certificate Requester (
roles/privateca.workloadCertificateRequester
) di setiap kumpulan CA subordinasi ke domain kepercayaan. Perintahgcloud privateca pools add-iam-policy-binding
berikut memberi otorisasi domain kepercayaan untuk meminta sertifikat dari rantai sertifikat Layanan CA.gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \ --location=REGION \ --role=roles/privateca.workloadCertificateRequester \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog" \ --project=CA_PROJECT_ID
Ganti kode berikut:
SUBORDINATE_CA_POOL_ID
: ID untuk kumpulan CA subordinat.REGION
: region kumpulan CA subordinat.PROJECT_NUMBER
: nomor project project yang berisi workload identity pool GKE.Untuk mendapatkan
PROJECT_NUMBER
dariPROJECT_ID
, jalankan perintah berikut:gcloud projects describe PROJECT_ID --format="value(projectNumber)"
PROJECT_ID
: Project ID project host fleet GKE.CA_PROJECT_ID
: ID project tempat Anda membuat CA subordinat.
Berikan peran CA Service Pool Reader (
roles/privateca.poolReader
) di kumpulan CA subordinat ke identitas workload terkelola. Tindakan ini akan memberikan otorisasi kepada identitas beban kerja terkelola untuk mendapatkan sertifikat X.509 yang ditandatangani dari rantai sertifikat CA.gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \ --location=REGION \ --role=roles/privateca.poolReader \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog" \ --project=CA_PROJECT_ID
Ganti kode berikut:
SUBORDINATE_CA_POOL_ID
: ID kumpulan CA subordinasi.REGION
: region kumpulan CA subordinat.PROJECT_NUMBER
: nomor project dari project yang berisi workload identity pool GKE.PROJECT_ID
: Project ID project host fleet GKE.CA_PROJECT_ID
: ID project tempat Anda membuat CA subordinat.
Men-deploy workload dengan identitas workload terkelola
Setelah mengonfigurasi kumpulan CA untuk menerbitkan sertifikat bagi identitas workload terkelola, Anda dapat men-deploy workload yang memiliki identitas workload terkelola.
Bagian ini menunjukkan cara men-deploy workload pengujian yang memiliki identitas workload terkelola. Untuk melakukannya, Anda men-deploy Pod, memeriksa apakah kredensial telah dibuat, dan melihat sertifikat serta ID SPIFFE.
Men-deploy Pod
Untuk men-deploy Pod pengujian di cluster, lakukan hal berikut:
Dapatkan kredensial cluster.
gcloud container clusters get-credentials CLUSTER_NAME \ --location=CLUSTER_ZONE \ --project=CLUSTER_PROJECT_ID
Buat namespace Kubernetes.
kubectl create namespace KUBERNETES_NAMESPACE
Men-deploy PodSpec pengujian.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: namespace: KUBERNETES_NAMESPACE name: example-pod spec: containers: - name: main image: debian command: ['sleep', 'infinity'] volumeMounts: - name: fleet-spiffe-credentials mountPath: /var/run/secrets/workload-spiffe-credentials readOnly: true nodeSelector: iam.gke.io/gke-metadata-server-enabled: "true" volumes: - name: fleet-spiffe-credentials csi: driver: podcertificate.gke.io volumeAttributes: signerName: spiffe.gke.io/fleet-svid trustDomain: fleet-project/svc.id.goog EOF
Mencantumkan kredensial workload
Untuk mencantumkan kredensial workload, jalankan perintah berikut. Diperlukan waktu beberapa menit untuk membuat kredensial.
kubectl exec -it example-pod -n KUBERNETES_NAMESPACE -- ls /var/run/secrets/workload-spiffe-credentials
Anda akan melihat output berikut:
ca_certificates.pem
certificates.pem
private_key.pem
trust_bundles.json
Melihat sertifikat
Untuk melihat sertifikat, lakukan tindakan berikut:
Ekspor sertifikat ke file sertifikat.
kubectl exec -it example-pod --namespace=KUBERNETES_NAMESPACE -- cat /var/run/secrets/workload-spiffe-credentials/certificates.pem | openssl x509 -noout -text > certfile
Lihat file sertifikat.
cat certfile
Dalam sertifikat, di atribut
X509v3 Subject Alternative Name
, Anda akan melihat ID SPIFFE, dengan format berikut:spiffe://PROJECT_ID.svc.id.goog/ns/KUBERNETES_NAMESPACE/sa/default
default
mengacu pada Akun Layanan Kubernetes default.
Menguji autentikasi workload-ke-workload
Untuk menguji autentikasi workload-ke-workload, lihat Menguji autentikasi mTLS menggunakan Go.
Kode contoh di repositori membuat beban kerja klien dan server. Anda dapat menguji autentikasi timbal balik antara workload menggunakan sertifikat yang Anda buat sebelumnya dalam dokumen ini.
Langkah berikutnya
- Memecahkan masalah identitas workload terkelola untuk GKE.
- Pelajari lebih lanjut cara membuat kumpulan CA.
Coba sendiri
Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
Mulai secara gratis