Autentikasi Cluster Workload Identity

Dokumen ini menjelaskan cara menyiapkan dan menggunakan Autentikasi Cluster Workload Identity untuk Google Distributed Cloud connected, versi 1.12.0. Daripada kunci akun layanan, Autentikasi Cluster Workload Identity menggunakan token berumur pendek dan Workload Identity Federation untuk memungkinkan workload Anda mengakses resource Google Cloud dengan aman. Kredensial berumur pendek adalah token akses OAuth 2.0. Secara default, token akses akan berakhir masa berlakunya setelah 1 jam.

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

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

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

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

Halaman ini ditujukan untuk Admin dan arsitek serta 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 Google Cloud konten, 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 Distributed Cloud connected.

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

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

Sebelum memulai

  • Sebelum dapat menyiapkan Workload Identity Federation, pastikan API berikut di Google Cloud project 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:

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

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

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

    • Pemilik (roles/owner) atau
    • Admin Keamanan IAM (roles/iam.securityAdmin) dan Admin Akun Layanan (roles/iam.serviceAccountAdmin)

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

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 sehingga dapat mengakses Google Cloud resource secara langsung.

Identitas Tujuan Peran
Kubernetes ServiceAccount Identitas Kubernetes yang digunakan oleh workload Anda. Berikan identitas ini peran yang diperlukan untuk mengakses resource yang diperlukan Google Cloud . 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 Kubernetes ServiceAccount untuk menggunakan peniruan identitas akun layanan IAM.

Akun layanan Tujuan Peran
Akun layanan Google Akun layanan Google yang ditiru identitasnya oleh workload dalam cluster Anda. Berikan akun layanan ini peran yang diperlukan untuk mengakses resource yang diperlukan Google Cloud. Bergantung pada resource yang diakses.
Kubernetes ServiceAccount Berikan 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 Kubernetes ServiceAccount yang diperlukan dan memberikannya peran yang diperlukan untuk Autentikasi Cluster Workload Identity menggunakan akses resource langsung Workload Identity Federation atau peniruan identitas akun layanan Google.

Membuat Kubernetes ServiceAccount

Di cluster Anda, gunakan perintah kubectl create untuk membuat Kubernetes ServiceAccount untuk 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 Kubernetes ServiceAccount Anda

  • NAMESPACE: namespace untuk cluster Anda

Menggunakan Workload Identity Federation untuk memberikan akses resource langsung

Untuk memberikan peran Identity and Access Management 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 ke pokok 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 Kubernetes ServiceAccount Anda

Alternatif: Menggunakan peniruan identitas akun layanan IAM untuk memberikan akses

Jika Anda lebih suka workload 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 Kubernetes ServiceAccount untuk 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 Kubernetes ServiceAccount Anda
  4. Gunakan perintah kubectl annotate untuk menganotasi Kubernetes ServiceAccount 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 Kubernetes ServiceAccount dan memasang volume token yang diproyeksikan. Karena cluster Distributed Cloud connected berada di luar Google Cloud, Anda juga harus menyediakan file konfigurasi kredensial dan menetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS untuk mengarah ke file tersebut. Google Cloud library klien 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 identitas 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 identitas 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 Anda. Google Cloud 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 Kubernetes ServiceAccount 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 Distributed Cloud connected:

  • Menggunakan server proxy untuk proses pertukaran token

Untuk mengetahui informasi tentang cara menggunakan Workload Identity Federation dengan Kontrol Layanan VPC, lihat Mengonfigurasi integrasi Kontrol Layanan VPC.

Langkah berikutnya