Mengonfigurasi autentikasi identitas workload terkelola untuk GKE

Dokumen ini menjelaskan cara mengonfigurasi identitas workload terkelola untuk Google Kubernetes Engine (GKE) di cluster yang dikelola fleet GKE Anda. Dokumen ini juga menjelaskan cara men-deploy workload dan memverifikasi identitas serta sertifikat workload.

Untuk menyiapkan dan menggunakan identitas workload terkelola untuk GKE, selesaikan langkah-langkah berikut:

  1. Pilih opsi certificate authority (CA)

  2. Mengonfigurasi certificate authority Anda

  3. Men-deploy workload dengan identitas workload terkelola

  4. Opsional: Aktifkan penggabungan kepercayaan antara workload identity pool

Workload identity pool yang dikelola Google

Saat Anda menambahkan cluster ke fleet GKE, GKE akan otomatis membuat workload identity pool yang dikelola Google, yang berfungsi sebagai root of trust, yang juga dikenal sebagai domain tepercaya SPIFFE untuk workload Anda. Semua beban kerja dalam domain tepercaya menerima sertifikat dan trust anchor yang mengaktifkan autentikasi secara default dalam domain tepercaya. Jika memiliki beberapa domain tepercaya, Anda dapat mengaktifkan federasi kepercayaan di antara domain tersebut untuk mengaktifkan komunikasi lintas domain tepercaya.

Workload identity pool yang dikelola Google memiliki karakteristik berikut:

  • Pengelolaan identitas: Google mengelola pool sepenuhnya. Anda tidak dapat membuat sub-resource apa pun, seperti namespace, identitas, atau penyedia identitas.

  • Dukungan workload: Anda dapat menggunakan kumpulan hanya untuk workload GKE. Anda tidak dapat menambahkan jenis beban kerja lain, seperti VM Compute Engine, ke dalam kumpulan.

  • Integrasi fleet: Semua cluster dalam kumpulan tunduk pada model kesamaan namespace Kubernetes standar. Artinya, semua cluster dalam pool memiliki hak istimewa yang setara, dan beban kerja di cluster mana pun dalam pool dapat menggunakan identitas apa pun dalam pool tersebut.

Workload identity pool yang dikelola sendiri

Di lingkungan dengan kepercayaan campuran, seperti fleet multi-tenant, Anda dapat mengonfigurasi workload identity pool yang dikelola sendiri secara terpisah untuk sebagian workload dan cluster Anda. Workload identity pool yang dikelola sendiri memiliki karakteristik berikut:

  • Pengelolaan identitas: Dengan menentukan workload identity pool Anda sendiri, Anda mendapatkan kontrol penuh atas pengelolaan identitas di pool. Di bagian pool, Anda dapat menentukan hierarki identitas Anda sendiri, seperti namespace dan identitas. Anda dapat menentukan kebijakan pengesahan untuk menentukan workload mana yang dapat mengesahkan identitas dalam kumpulan atau namespace.

  • Dukungan workload: Workload apa pun (misalnya, VM, container, dan workload serverless) dapat ditempatkan di bawah pool.

  • Integrasi fleet: Untuk workload yang dikelola oleh fleet GKE, fleet menyediakan antarmuka terintegrasi untuk mengelola identitas. Anda dapat mengonfigurasi workload identity pool sebagai kumpulan kepemilikan cakupan fleet. Fleet otomatis membuat namespace workload identity pool yang sesuai dengan namespace fleet, dan menetapkan identitas ke beban kerja.

Untuk menggunakan workload identity pool yang dikelola sendiri, Anda harus mengonfigurasi fitur pengelolaan tim armada seperti cakupan tim dan namespace armada, serta menyiapkan pool yang dikelola sendiri sebagai pool cakupan-tenancy. Untuk mengetahui petunjuk tentang cara membuat dan mengonfigurasi pool yang dikelola sendiri, lihat Melakukan autentikasi ke API Google Cloud dari beban kerja armada dengan kepercayaan campuran.

Konfigurasi multi-project

Google Cloud resource 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

  1. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  2. Pahami identitas workload terkelola.

  3. Pastikan cluster Anda menjalankan versi 1.33.0-gke.2248000 atau yang lebih baru.

  4. Tambahkan cluster Anda ke fleet GKE. Jika cluster Anda adalah cluster Autopilot, hapus flag --enable-workload-identity. Fleets 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 \
    --workload-pool=PROJECT_ID.svc.id.goog \
    --enable-fleet \
    --fleet-project=PROJECT_ID
    

    Ganti nilai berikut:

    • CLUSTER_NAME: nama cluster GKE yang akan didaftarkan ke fleet GKE
    • PROJECT_ID: project ID host fleet GKE
  5. Aktifkan IAM dan Certificate Authority Service API.

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    Aktifkan API

  6. Konfigurasi Google Cloud CLI untuk menggunakan project penagihan dan kuota Anda.

    gcloud config set billing/quota_project PROJECT_ID
    

    Ganti PROJECT_ID dengan ID project fleet.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk membuat identitas beban kerja terkelola dan menyediakan sertifikat identitas beban kerja terkelola, minta administrator untuk memberi Anda peran IAM berikut pada project:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Pilih opsi CA

Untuk menandatangani sertifikat workload Anda, pilih opsi certificate authority (CA) yang paling sesuai dengan kasus penggunaan Anda:

  • CA default yang dikelola Google: Gunakan opsi ini untuk solusi yang terkelola sepenuhnya dan tanpa biaya. CA default menyediakan root kepercayaan bersama untuk semua pengguna Google Cloud .

  • CA Kustom: Gunakan opsi ini untuk mengonfigurasi infrastruktur kunci publik (PKI) Anda sendiri melalui Certificate Authority Service. Opsi ini cocok jika Anda memerlukan root of trust kustom atau jika Anda harus menyimpan kunci penandatanganan di modul keamanan hardware (HSM) untuk memenuhi persyaratan kepatuhan. Certificate Authority Service ditagih secara terpisah dari identitas workload terkelola. Untuk mengetahui informasi selengkapnya, lihat Harga Layanan CA.

Mengonfigurasi CA

CA Default

Untuk mengikat CA default ke workload identity pool, perbarui workload identity pool dengan tanda use-default-shared-ca.

  gcloud iam workload-identity-pools update TRUST_DOMAIN_NAME \
      --location="global" \
      --use-default-shared-ca \
      --project=PROJECT_ID

Ganti kode berikut:

  • TRUST_DOMAIN_NAME:

    Nama domain tepercaya. Bergantung pada jenis kumpulan, format nama sebagai berikut:

    • Kumpulan yang dikelola Google: PROJECT_ID.svc.id.goog
    • Kumpulan yang dikelola sendiri: POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog
  • PROJECT_ID: Project ID project host fleet Anda.

CA kustom

  1. Konfigurasi CA Service untuk menerbitkan sertifikat bagi identitas workload terkelola.
  2. Ikat CA ke workload identity pool.
  3. Memberi otorisasi identitas workload terkelola untuk meminta sertifikat dari kumpulan CA.

Mengonfigurasi CA Service untuk menerbitkan sertifikat bagi identitas workload terkelola

Untuk mengonfigurasi identitas workload 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 Layanan CA untuk menyiapkan hierarki ini. Dengan hierarki ini, kumpulan CA subordinat menerbitkan sertifikat identitas workload X.509 ke workload Anda.

CA pool yang dikonfigurasi untuk menerbitkan sertifikat bagi workload yang menggunakan managed workload identity harus berada di region yang sama dengan workload. Jika Anda ingin mendesain arsitektur multi-region untuk ketahanan terhadap pemadaman layanan regional, sebaiknya Anda mengonfigurasi kumpulan CA Layanan Otoritas Sertifikat subordinat untuk setiap region tempat Anda menjalankan workload. Dengan melakukannya, setiap workload Anda dapat mereferensikan kumpulan CA Certificate Authority Service turunan dalam wilayah.

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. Tingkat 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 wilayah, 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 subordinat. 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.

  • Load balancing yang lebih baik: Menambahkan beberapa CA bawahan dalam kumpulan CA membantu Anda mencapai load balancing permintaan sertifikat yang lebih baik.

Untuk membuat pool CA subordinat dan CA subordinat, lakukan hal berikut:

  1. 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 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 subordinat.

    Untuk mengetahui informasi selengkapnya, lihat Membuat kumpulan CA.

  2. 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 pool CA bawahan berada.
    • ROOT_CA_POOL_ID: ID pool CA root.
    • REGION: Region pool CA root.
    • SUBORDINATE_CA_CN: Nama umum CA subordinat.
    • 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 subordinat.

    Untuk mengetahui informasi selengkapnya tentang kolom subject untuk CA, lihat Subjek.

Membuat file konfigurasi penerbitan sertifikat

Mengikat CA ke workload identity pool memerlukan konfigurasi penerbitan sertifikat. Jika Anda ingin workload Anda melakukan autentikasi di beberapa domain tepercaya, lihat Mengaktifkan federasi kepercayaan antara kumpulan identitas workload (Opsional).

Untuk mengonfigurasi konfigurasi penerbitan sertifikat, Anda membuat file konfigurasi penerbitan sertifikat bernama cic.json. Format file mirip 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 adalah ECDSA_P256, ECDSA_P384, RSA_2048, RSA_3072, RSA_4096. Jika tidak ditentukan, ECDSA_P256 akan digunakan sebagai algoritma default.

  • 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. Masa berlaku 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. Jika tidak ditentukan, 50 akan digunakan sebagai nilai default.

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 \
    --project=PROJECT_ID

Ganti kode berikut:

  • TRUST_DOMAIN_NAME: Nama domain tepercaya. Bergantung pada jenis kumpulan, format nama sebagai berikut:

    • Kumpulan yang dikelola Google: PROJECT_ID.svc.id.goog
    • Kumpulan yang dikelola sendiri: POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog
  • CIC_JSON_FILE_PATH: Jalur ke file konfigurasi penerbitan sertifikat berformat JSON (cic.json) yang Anda buat sebelumnya.

Memverifikasi bahwa workload identity pool telah diperbarui

Untuk memverifikasi bahwa workload identity pool Anda telah diupdate dengan konfigurasi penerbitan sertifikat, 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 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
mode: TRUST_DOMAIN
name: TRUST_DOMAIN_NAME
state: ACTIVE

Jika inlineCertificateIssuanceConfig tidak ada dalam output perintah, pastikan Anda telah mengonfigurasi gcloud CLI dengan benar untuk menggunakan project yang tepat 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 Anda mengikat CA ke workload identity pool, izinkan identitas workload terkelola untuk meminta sertifikat dari kumpulan CA. Untuk memberikan otorisasi pada identitas ini:

  1. Berikan peran IAM CA Service Workload Certificate Requester (roles/privateca.workloadCertificateRequester) di setiap kumpulan CA subordinat ke domain tepercaya. Perintah gcloud 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/TRUST_DOMAIN_NAME" \
        --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.

      Untuk mendapatkan PROJECT_NUMBER dari project workload identity pool Anda, jalankan perintah berikut.

      gcloud projects describe WORKLOAD_IDENTITY_POOL_PROJECT_ID --format="value(projectNumber)"
      
    • WORKLOAD_IDENTITY_POOL_PROJECT_ID: ID project yang berisi workload identity pool.

    • TRUST_DOMAIN_NAME: Nama domain tepercaya. Bergantung pada jenis kumpulan, format nama sebagai berikut:

      • Kumpulan yang dikelola Google: PROJECT_ID.svc.id.goog
      • Kumpulan yang dikelola sendiri: POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog
    • CA_PROJECT_ID: ID project tempat Anda membuat CA subordinat.

  2. Berikan peran CA Service Pool Reader (roles/privateca.poolReader) pada kumpulan CA subordinat ke managed workload identity. 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/TRUST_DOMAIN_NAME" \
        --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.
    • TRUST_DOMAIN_NAME: Nama domain tepercaya. Bergantung pada jenis kumpulan, format nama sebagai berikut:
      • Kumpulan yang dikelola Google: PROJECT_ID.svc.id.goog
      • Kumpulan yang dikelola sendiri: POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog
    • 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.

Deploy Pod

Anda dapat men-deploy Pod yang mendapatkan identitas workload terkelolanya dari workload identity pool yang dikelola Google atau workload identity pool yang dikelola sendiri.

Kumpulan yang dikelola Google

Untuk men-deploy Pod pengujian di cluster Anda, lakukan hal berikut:

  1. Dapatkan kredensial cluster.

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=CLUSTER_ZONE \
        --project=CLUSTER_PROJECT_ID
    
  2. Buat namespace Kubernetes.

    kubectl create namespace KUBERNETES_NAMESPACE
    
  3. 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
    

Grup yang dikelola sendiri

Untuk men-deploy Pod pengujian di cluster Anda menggunakan workload identity pool yang dikelola sendiri, lakukan hal berikut:

  1. Siapkan workload identity pool yang dikelola sendiri dan konfigurasi cluster fleet untuk menggunakan pool ini.

  2. Dapatkan kredensial cluster.

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=CLUSTER_ZONE \
        --project=CLUSTER_PROJECT_ID
    
  3. Buat namespace Kubernetes.

    kubectl create namespace KUBERNETES_NAMESPACE
    
  4. Deploy PodSpec pengujian.

    PodSpec berikut mengonfigurasi atribut volume trustDomain untuk workload identity pool yang dikelola sendiri:

    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/tenancy-scope
    EOF
    

Mencantumkan kredensial workload

Untuk mencantumkan kredensial workload, jalankan perintah berikut. Pembuatan kredensial dapat memakan waktu beberapa menit.

kubectl exec -it example-pod -n KUBERNETES_NAMESPACE -- ls  /var/run/secrets/workload-spiffe-credentials

Output perintah mencantumkan file berikut:

  • ca_certificates.pem: Berisi sertifikat CA root yang menandatangani sertifikat workload.
  • certificates.pem: Berisi sertifikat X.509 beban kerja.
  • private_key.pem: Berisi kunci pribadi beban kerja.
  • trust_bundles.json: Berisi peta domain tepercaya dan sertifikat CA yang dipercaya untuk workload tertentu. Setiap entri berisi string domain tepercaya sebagai kunci, dan sertifikat CA yang sesuai dengan domain tepercaya tersebut.
  • credential-bundle.pem: Berisi kunci pribadi dan sertifikat yang digabungkan, sehingga menyediakan satu file untuk kredensial mTLS. File ini hanya tersedia di GKE versi setelah 1.35.2-gke.1291000.

Melihat sertifikat

Untuk melihat sertifikat, lakukan tindakan berikut:

  1. 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
    
  2. Lihat file sertifikat.

    cat certfile
    

    Dalam sertifikat, di atribut X509v3 Subject Alternative Name, Anda akan melihat ID SPIFFE, dengan format yang mirip dengan berikut, bergantung pada jenis workload identity pool Anda:

    • Kumpulan yang dikelola Google: spiffe://PROJECT_ID.svc.id.goog/ns/KUBERNETES_NAMESPACE/sa/default
    • Kumpulan yang dikelola sendiri: spiffe://POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.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 workload klien dan server. Anda dapat menguji autentikasi timbal balik antara beban kerja menggunakan sertifikat yang Anda buat sebelumnya dalam dokumen ini.

Mengaktifkan federasi kepercayaan antara workload identity pool (Opsional)

Untuk mengaktifkan autentikasi timbal balik untuk workload di domain tepercaya yang berbeda, Anda harus mengonfigurasi federasi kepercayaan antara workload identity pool. Langkah ini hanya diperlukan jika workload Anda perlu diautentikasi dengan workload di workload identity pool yang berbeda.

Untuk mengaktifkan federasi kepercayaan, selesaikan langkah-langkah berikut:

  1. Buat file konfigurasi kepercayaan.
  2. Perbarui workload identity pool dengan konfigurasi kepercayaan.

Buat file konfigurasi kepercayaan

Buat file konfigurasi kepercayaan dengan bagian inlineTrustConfig yang menentukan 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.

  1. Untuk CA kustom, download sertifikat untuk domain tepercaya yang menggunakan CA kustom.

    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 output untuk sertifikat yang dienkode PEM.
    • REGION: Region pool CA root.
  2. Buat file bernama tc.json yang berisi konfigurasi kepercayaan inline Anda. Jika domain menggunakan CA default yang dikelola Google, gunakan kolom trustDefaultSharedCa. Jika domain menggunakan CA kustom, gunakan sertifikat berenkode PEM yang sebelumnya Anda download.

    File-nya akan terlihat seperti berikut:

    Dalam contoh ini, TRUST_DOMAIN_A menggunakan CA default yang dikelola Google, dan TRUSTED_DOMAIN_B menggunakan CA kustom dengan sertifikat root yang didownload.

    {
      "inlineTrustConfig": {
        "additionalTrustBundles": {
          "TRUST_DOMAIN_A": {
            "trustDefaultSharedCa": true
          },
          "TRUSTED_DOMAIN_B": {
            "trustAnchors": [
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----"
              },
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----"
              }
            ]
          }
        }
      }
    }
    

    Ganti kode berikut:

    • TRUST_DOMAIN_A: Nama domain tepercaya yang menggunakan CA default yang dikelola Google.
    • TRUST_DOMAIN_B: Nama domain tepercaya yang menggunakan CA kustom.
    • CERTIFICATE_MATERIAL: Serangkaian sertifikat CA berformat PEM yang dipercaya untuk menerbitkan sertifikat di domain tepercaya.

Memperbarui workload identity pool dengan konfigurasi kepercayaan

gcloud iam workload-identity-pools update TRUST_DOMAIN_NAME \
    --location="global" \
    --inline-trust-config-file=TC_JSON_FILE_PATH \
    --project=PROJECT_ID

Ganti kode berikut:

  • TRUST_DOMAIN_NAME: Nama domain tepercaya.
  • TC_JSON_FILE_PATH: Jalur ke file konfigurasi kepercayaan berformat JSON (tc.json) yang Anda buat.
  • PROJECT_ID: Project ID.

Langkah berikutnya

Coba sendiri

Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.

Mulai secara gratis