Dokumen ini menjelaskan cara mengonfigurasi identitas beban kerja terkelola untuk Google Kubernetes Engine (GKE) di cluster yang dikelola fleet GKE. Panduan ini juga menjelaskan cara men-deploy workload dan memverifikasi identitas dan sertifikat workload.
Penyiapan dan penggunaan identitas workload terkelola untuk GKE melibatkan 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 tepercaya Anda. Workload identity pool yang dikelola Google memiliki batasan berikut:
Google mengelola pool sepenuhnya, 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 salah satu cluster 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 subordinat, dapat berada di 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 memiliki setidaknya satu cluster GKE. Pastikan cluster Anda menjalankan versi 1.33.0-gke.2248000 atau yang lebih baru.
Tambahkan cluster Anda ke fleet GKE. Jika cluster Anda adalah cluster Autopilot, hapus
--enable-workload-identity
. Fleets secara otomatis membuat workload identity pool yang dikelola Google yang berfungsi sebagai domain tepercaya.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 fleet GKE
Enable the IAM and Certificate Authority Service APIs:
gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com privateca.googleapis.com Konfigurasi 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 diperlukan guna membuat identitas beban kerja terkelola dan menyediakan sertifikat identitas beban kerja terkelola, minta administrator Anda 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 kumpulan 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 CA Service untuk menerbitkan sertifikat bagi identitas workload terkelola
Untuk mengonfigurasi identitas workload terkelola untuk GKE, Anda harus mengonfigurasi otoritas sertifikat (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 workload X.509 ke workload Anda.
Mengonfigurasi kumpulan CA root Anda
Untuk membuat kumpulan CA root, lakukan hal berikut:
Buat kumpulan CA root di tingkat Enterprise menggunakan gcloud privateca pools create
.
Tingkatan ini ditujukan untuk penerbitan sertifikat yang berumur panjang dan bervolume rendah.
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 pool CA root. Panjang ID maksimal 64 karakter dan hanya boleh berisi karakter alfanumerik huruf kecil dan huruf 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 CA root.
Untuk mempelajari lebih lanjut kumpulan CA, tingkat, dan region, lihat Membuat kumpulan CA.
Mengonfigurasi CA root Anda
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 CA root, 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 huruf kecil dan huruf besar, garis bawah, atau tanda hubung. Nama CA harus unik dalam region.ROOT_CA_POOL_ID
: ID pool CA root.ROOT_CA_CN
: nama umum CA root.ROOT_CA_ORGANIZATION
: organisasi CA root.KEY_ALGORITHM
: algoritma kunci—misalnya,ec-p256-sha256
REGION
: region tempat kumpulan CA root berada.CA_PROJECT_ID
: project ID tempat Anda membuat CA root.
Untuk mengetahui informasi selengkapnya tentang kolom subject
untuk CA, lihat Subjek.
Secara opsional, Anda dapat membuat CA root tambahan di kumpulan CA root Anda. Tindakan ini dapat berguna untuk rotasi CA root.
Mengonfigurasi CA subordinat
Secara opsional, Anda dapat mengonfigurasi CA bawahan. Mengonfigurasi CA subordinat dapat membantu hal berikut:
Beberapa skenario penerbitan sertifikat: Jika Anda memiliki beberapa skenario penerbitan sertifikat, Anda dapat membuat CA subordinat untuk setiap skenario.
Penyeimbangan beban yang lebih baik: Menambahkan beberapa CA bawahan dalam kumpulan CA membantu Anda mencapai penyeimbangan beban permintaan sertifikat yang lebih baik.
Untuk membuat pool CA subordinat dan CA subordinat, lakukan hal berikut:
Buat kumpulan CA subordinat di paket DevOps, yang ditujukan untuk penerbitan sertifikat berumur pendek dengan volume tinggi.
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 pool CA bawahan. Panjang ID maksimal 64 karakter dan hanya boleh berisi karakter alfanumerik huruf kecil dan huruf besar, garis bawah, atau tanda hubung. ID kumpulan harus unik dalam region.REGION
: region tempat membuat kumpulan CA bawahan.CA_PROJECT_ID
: ID project tempat Anda membuat CA bawahan.
Untuk mengetahui informasi selengkapnya, lihat Membuat kumpulan CA.
Buat CA subordinat di pool CA subordinat. 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 maksimal 64 karakter dan hanya boleh berisi karakter alfanumerik huruf kecil dan huruf besar, garis bawah, atau tanda hubung. Nama kumpulan harus unik dalam region.SUBORDINATE_CA_POOL_ID
: nama pool CA bawahan.REGION
: region tempat CA pool bawahan berada.ROOT_CA_POOL_ID
: ID pool CA root.REGION
: region pool CA root.SUBORDINATE_CA_CN
: nama umum CA bawahan.SUBORDINATE_CA_ORGANIZATION
: nama organisasi penerbit CA bawahan.KEY_ALGORITHM
: algoritma kunci—misalnya,ec-p256-sha256
CA_PROJECT_ID
: ID project tempat Anda membuat CA bawahan.
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 ingin workload Anda melakukan autentikasi di beberapa domain tepercaya, Anda juga dapat memperbarui kumpulan dengan konfigurasi tepercaya.
Untuk mengonfigurasi konfigurasi penerbitan sertifikat, Anda membuat file konfigurasi penerbitan sertifikat. Format file serupa dengan 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 bawahan.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. Nilai 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 CA tersebut 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.
Buat file konfigurasi kepercayaan
Secara default, workload Anda dalam domain tepercaya yang sama dapat saling
mengautentikasi menggunakan identitas workload terkelola. Jika Anda ingin beban kerja yang berada di domain tepercaya berbeda saling mengautentikasi, Anda harus menyatakan hubungan tepercaya secara eksplisit di workload identity pool.
Anda dapat melakukannya dengan membuat file konfigurasi kepercayaan
yang berisi inlineTrustConfig
yang menyediakan sertifikat untuk setiap domain.
File konfigurasi kepercayaan berisi serangkaian 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 pool CA root -
CERTIFICATE_PATH
: jalur tujuan untuk menghasilkan sertifikat yang dienkode PEM -
REGION
: region kumpulan CA root
-
-
Buat file bernama yang berisi konfigurasi kepercayaan inline Anda, dengan sertifikat berformat PEM. Filenya akan terlihat seperti berikut:
{ "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 tepercaya, diformat sebagai berikut:PROJECT_ID.svc.id.goog
-
CERTIFICATE_MATERIAL
: Serangkaian sertifikat CA berformat PEM yang dipercaya untuk menerbitkan sertifikat di domain tepercaya.
-
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 harus memperbarui workload identity pool dengan konfigurasi penerbitan sertifikat CA. Kemudian, Anda dapat memverifikasi bahwa pool 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 tepercaya, diformat sebagai berikut:PROJECT_ID.svc.id.goog
CIC_JSON_FILE_PATH
: Jalur ke file konfigurasi penerbitan sertifikat berformat JSON (cic.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 melakukan autentikasi di berbagai domain tepercaya, 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 bersama dengan 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 tepercaya
yang Anda gunakan untuk memperbarui kumpulan identitas beban kerja sebelumnya
dalam dokumen ini.
Output perintah akan terlihat mirip dengan berikut ini:
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 perlu memberi otorisasi identitas workload terkelola untuk meminta sertifikat dari kumpulan CA. Untuk memberikan otorisasi pada identitas ini, lakukan hal berikut:
Berikan peran IAM CA Service Workload Certificate Requester (
roles/privateca.workloadCertificateRequester
) di setiap kumpulan CA bawahan ke domain tepercaya. Perintahgcloud privateca pools add-iam-policy-binding
berikut mengizinkan domain tepercaya untuk meminta sertifikat dari rantai sertifikat CA Service.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 pool CA bawahan.REGION
: region kumpulan CA subordinat.PROJECT_NUMBER
: nomor project dari 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 bawahan.
Berikan peran CA Service Pool Reader (
roles/privateca.poolReader
) pada kumpulan CA subordinat ke workload identity terkelola. Dengan melakukannya, identitas workload terkelola diberi otorisasi untuk mendapatkan sertifikat X.509 yang ditandatangani dari rangkaian 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 pool CA bawahan.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 bawahan.
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.
Deploy Pod
Untuk men-deploy Pod pengujian di cluster Anda, 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
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 melihat SPIFFE ID, 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