Autentikasi Cluster Workload Identity

Dokumen ini menjelaskan cara menyiapkan dan menggunakan Autentikasi Cluster Workload Identity untuk Google Distributed Cloud Connected. Alih-alih kunci akun layanan, Autentikasi Cluster Workload Identity menggunakan token yang berumur pendek dan Workload Identity Federation untuk memungkinkan workload Anda mengakses resource secara aman. Google Cloud Kredensial berumur pendek adalah token akses OAuth 2.0. Secara default, masa berlaku token akses akan berakhir setelah 1 jam.

Dengan Autentikasi Cluster Workload Identity, beban kerja Anda dapat menggunakan identitas Kubernetes mereka sendiri untuk mengakses Google Cloud resource secara langsung atau meniru akun layanan Google.

Autentikasi Cluster Workload Identity memberikan dua manfaat utama dibandingkan dengan penggunaan kunci akun layanan:

  • Keamanan yang ditingkatkan: Kunci akun layanan memiliki risiko keamanan jika tidak dikelola dengan benar. Token OAuth 2.0 dan Federasi Workload Identity dianggap sebagai alternatif terbaik untuk kunci akun layanan. Untuk mengetahui informasi selengkapnya tentang token akun layanan, lihat Kredensial akun layanan jangka pendek. Untuk mengetahui informasi selengkapnya tentang Workload Identity Federation, lihat Workload Identity Federation.

  • Pengurangan pemeliharaan: Kunci akun layanan memerlukan lebih banyak pemeliharaan. Merotasi dan mengamankan kunci ini secara rutin dapat menimbulkan beban administratif.

Halaman ini ditujukan bagi Admin, arsitek, dan Operator yang menyiapkan, memantau, dan mengelola siklus proses infrastruktur teknologi yang mendasarinya. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam kontenGoogle Cloud , lihat Peran dan tugas pengguna GKE umum.

Pengelolaan cluster

Panduan ini membahas Workload Identity Federation untuk aplikasi Anda. Workload Identity Federation tingkat cluster dikelola secara otomatis untuk cluster yang terhubung Distributed Cloud.

Cluster yang terhubung Distributed Cloud dibuat dan dikelola oleh Google melalui Distributed Cloud Edge Container API, baik dengan menggunakan perintah gcloud edge-cloud container clusters create atau di konsol Google Cloud .

Cluster yang terhubung Distributed Cloud otomatis didaftarkan ke Fleet dalam project tempat cluster tersebut dibuat. Anda tidak perlu melakukan pendaftaran armada secara manual. Workload Identity Federation Pool otomatis tersedia dan mengikuti format PROJECT_ID.svc.id.goog.

Sebelum memulai

  • Sebelum dapat menyiapkan Workload Identity Federation, verifikasi bahwa API berikut di project Google Cloud Anda diaktifkan. Untuk mengetahui informasi tentang cara mengaktifkan API, lihat Mengaktifkan layanan:

    • iam.googleapis.com
    • sts.googleapis.com
    • iamcredentials.googleapis.com
    • gkehub.googleapis.com
  • Pastikan Anda telah menginstal alat command line berikut:

    • Versi terbaru Google Cloud CLI, yang mencakup gcloud, alat command line untuk berinteraksi dengan Google Cloud.
    • kubectl

    Jika Anda menggunakan Cloud Shell sebagai lingkungan shell untuk berinteraksi dengan Google Cloud, alat ini akan diinstal untuk Anda.

  • Pastikan Anda telah menginisialisasi gcloud CLI untuk digunakan dengan project Anda.

  • Pastikan Anda memiliki peran IAM berikut di project. Peran berikut diperlukan untuk melakukan penyiapan:

    • Pemilik (roles/owner) atau
    • IAM Security Admin (roles/iam.securityAdmin) dan Service Account Admin (roles/iam.serviceAccountAdmin)

Di bagian berikut, Anda akan membuat akun layanan dan memberikan peran yang diperlukan untuk Autentikasi Cluster Identitas Workload.

Direkomendasikan: Akses resource langsung Workload Identity Federation

Dengan akses resource langsung Workload Identity Federation, Anda menggunakan Workload Identity Federation untuk memberikan peran IAM ke Kubernetes ServiceAccount agar dapat mengakses resource secara langsung. Google Cloud

Identitas Tujuan Peran
Akun Layanan Kubernetes Identitas Kubernetes yang digunakan workload Anda. Berikan identitas ini peran yang diperlukan untuk mengakses Google Cloud resource yang diperlukan. Contoh ini memberikan peran roles/storage.objectViewer dan peran roles/logging.admin. roles/storage.objectViewer
roles/logging.admin

Alternatif: Peniruan identitas akun layanan IAM

Atau, Anda dapat mengonfigurasi ServiceAccount Kubernetes untuk menggunakan peniruan identitas akun layanan IAM.

Akun layanan Tujuan Peran
Akun layanan Google Akun layanan Google yang di-impersonate oleh workload dalam cluster Anda. Beri akun layanan ini peran yang diperlukan untuk mengakses resource Google Cloud yang diperlukan. Bergantung pada resource yang diakses.
Akun Layanan Kubernetes Beri identitas ini kemampuan untuk meniru identitas akun layanan Google. Pemberian ini menggunakan peran roles/iam.workloadIdentityUser. roles/iam.workloadIdentityUser

Menyiapkan akun layanan

Bagian berikut berisi petunjuk untuk membuat ServiceAccount Kubernetes yang diperlukan dan memberikan peran yang diperlukan untuk Autentikasi Cluster Workload Identity menggunakan akses resource langsung Workload Identity Federation atau peniruan identitas akun layanan Google.

Buat Akun Layanan Kubernetes

Di cluster Anda, gunakan perintah kubectl create untuk membuat Akun Layanan Kubernetes bagi pod Anda. Anda juga dapat menggunakan ServiceAccount yang sudah ada, termasuk ServiceAccount default di namespace.

kubectl create serviceaccount KSA_NAME --namespace NAMESPACE

Ganti nilai berikut:

  • KSA_NAME: nama untuk ServiceAccount Kubernetes Anda

  • NAMESPACE: namespace untuk cluster Anda

Menggunakan Workload Identity Federation untuk memberikan akses resource langsung

Untuk memberikan peran Identity and Access Management secara langsung ke identitas Kubernetes ServiceAccount Anda, ikuti langkah-langkah berikut.

  1. Gunakan perintah gcloud projects describe untuk menemukan nomor project numerik Anda:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    

    Ganti PROJECT_ID dengan ID project Anda.

  2. Gunakan perintah gcloud projects add-iam-policy-binding untuk memberikan peran yang diperlukan kepada akun utama identitas Kubernetes:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="principal://iam.gserviceaccount.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \
        --role=roles/storage.objectViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="principal://iam.gserviceaccount.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \
        --role=roles/logging.admin
    

    Ganti nilai berikut:

    • PROJECT_NUMBER: nomor project numerik Anda
    • NAMESPACE: namespace untuk cluster Anda
    • KSA_NAME: nama untuk ServiceAccount Kubernetes Anda

Alternatif: Menggunakan peniruan akun layanan IAM untuk memberikan akses

Jika Anda lebih suka beban kerja Anda meniru identitas akun layanan Google, ikuti langkah-langkah berikut.

  1. Gunakan perintah gcloud iam service-accounts create untuk membuat akun layanan Google:

    gcloud iam service-accounts create my-app-sa \
        --project=PROJECT_ID
    

    Ganti PROJECT_ID dengan ID project Anda.

  2. Gunakan perintah gcloud projects add-iam-policy-binding untuk memberikan peran yang diperlukan ke akun layanan Google:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:my-app-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/storage.objectViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:my-app-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.admin
    
  3. Gunakan perintah gcloud iam service-accounts add-iam-policy-binding untuk memberikan kemampuan kepada Akun Layanan Kubernetes agar dapat meniru identitas akun layanan Google:

    gcloud iam service-accounts add-iam-policy-binding my-app-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.workloadIdentityUser \
        --member="serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"
    

    Ganti nilai berikut:

    • NAMESPACE: namespace untuk cluster Anda
    • KSA_NAME: nama untuk ServiceAccount Kubernetes Anda
  4. Gunakan perintah kubectl annotate untuk menganotasi ServiceAccount Kubernetes guna menautkannya ke akun layanan Google:

    kubectl annotate serviceaccount \
        --namespace NAMESPACE KSA_NAME \
        iam.gke.io/gcp-service-account=my-app-sa@PROJECT_ID.iam.gserviceaccount.com
    

Mengonfigurasi workload

Perbarui spesifikasi Pod untuk menggunakan ServiceAccount Kubernetes dan pasang volume token yang diproyeksikan. Karena cluster yang terhubung Distributed Cloud berada di luar Google Cloud, Anda juga harus memberikan file konfigurasi kredensial dan menetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS untuk mengarah ke file tersebut. Library klienGoogle Cloud dalam pod menggunakan kredensial ini untuk menukar token Kubernetes dengan token akses Google Cloud melalui Security Token Service API.

  1. Buat file credential-configuration.json. Pilih perintah berdasarkan apakah Anda menggunakan akses resource langsung Workload Identity Federation atau menggunakan peniruan akun layanan IAM.

    Akses resource langsung Workload Identity Federation

    Gunakan perintah gcloud iam workload-identity-pools create-cred-config:

    gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/providers/attestor \
        --credential-source-file=/var/run/secrets/tokens/gcp-ksa/token \
        --credential-source-type=text \
        --output-file=credential-configuration.json
    

    Menggunakan peniruan akun layanan IAM untuk memberikan akses

    Gunakan perintah gcloud iam workload-identity-pools create-cred-config:

    gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/providers/attestor \
        --service-account=my-app-sa@PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/secrets/tokens/gcp-ksa/token \
        --credential-source-type=text \
        --output-file=credential-configuration.json
    

    Ganti PROJECT_NUMBER dengan nomor project Google Cloud Anda. Anda dapat menemukan nomor project dengan menjalankan gcloud projects describe PROJECT_ID --format="value(projectNumber)".

  2. Gunakan perintah kubectl create configmap untuk membuat ConfigMap Kubernetes guna menyimpan file konfigurasi:

    kubectl create configmap CREDENTIAL_CONFIG_MAP \
        --namespace NAMESPACE \
        --from-file=credential-configuration.json
    

    Ganti nilai berikut:

    • CREDENTIAL_CONFIG_MAP: nama untuk ConfigMap Anda, yang berisi file konfigurasi kredensial Anda

    • NAMESPACE: namespace untuk cluster Anda

  3. Perbarui spesifikasi Pod Anda dengan konten YAML berikut:

    spec:
      serviceAccountName: KSA_NAME
      containers:
      - name: MY_CONTAINER
        image: MY_IMAGE
        env:
        - name: GOOGLE_APPLICATION_CREDENTIALS
          value: /var/run/secrets/tokens/gcp-creds/credential-configuration.json
        volumeMounts:
        - mountPath: /var/run/secrets/tokens/gcp-ksa
          name: gcp-ksa
        - mountPath: /var/run/secrets/tokens/gcp-creds
          name: gcp-creds
          readOnly: true
      volumes:
      - name: gcp-ksa
        projected:
          defaultMode: 0420
          sources:
          - serviceAccountToken:
              path: token
              audience: PROJECT_ID.svc.id.goog
              expirationSeconds: 3600
      - name: gcp-creds
        configMap:
          name: CREDENTIAL_CONFIG_MAP
    

    Ganti nilai berikut:

    • KSA_NAME: nama untuk ServiceAccount Kubernetes Anda

    • MY_CONTAINER: nama container Anda

    • MY_IMAGE: nama image Anda

Batasan

Fitur dan kemampuan berikut tidak didukung saat Anda menggunakan Workload Identity Federation untuk koneksi Distributed Cloud:

  • Menggunakan server proxy untuk proses pertukaran token

Untuk mengetahui informasi tentang cara menggunakan Federasi Identitas Beban Kerja dengan Kontrol Layanan VPC, lihat Mengonfigurasi integrasi Kontrol Layanan VPC.

Langkah berikutnya