Autentikasi Cluster Workload Identity

Autentikasi Cluster Workload Identity memungkinkan Anda membuat dan mengamankan cluster untuk software Distributed Cloud khusus untuk bare metal menggunakan token berumur singkat dan Workload Identity Federation. Pendekatan ini menggantikan kunci akun layanan persisten dengan token akses OAuth 2.0, sehingga mengurangi overhead pemeliharaan dan menghilangkan risiko keamanan kredensial yang berumur panjang.

Anda hanya dapat mengaktifkan fitur ini saat membuat cluster baru. Fitur ini tersedia di versi 1.33 dan yang lebih baru serta dalam Pratinjau di versi 1.30, 1.31, dan 1.32. Anda tidak dapat mengupdate cluster yang ada untuk menggunakannya. Untuk batasan tambahan, lihat Batasan.

Cara kerja Autentikasi Cluster Workload Identity

Kredensial berumur pendek untuk akun layanan berupa token akses OAuth 2.0. Secara default, masa berlaku token akses akan berakhir setelah 1 jam. Demikian pula, masa berlaku token pull image juga akan berakhir setelah 1 jam secara default.

Sebaliknya, mode berkunci, metode standar untuk membuat dan mengamankan cluster, menggunakan kunci akun layanan yang didownload. Saat membuat cluster yang dikelola sendiri (admin, hybrid, atau mandiri), Anda menentukan jalur ke kunci yang didownload. Kunci tersebut kemudian disimpan sebagai Secret di cluster dan cluster pengguna terkelola. Secara default, kunci akun layanan tidak memiliki masa berlaku dan akan berisiko keamanan jika tidak dikelola dengan benar. Untuk mengetahui informasi tentang cara menetapkan waktu habis masa berlaku untuk kunci akun layanan Anda, lihat Waktu habis masa berlaku untuk kunci yang dikelola pengguna.

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

  • Keamanan yang ditingkatkan: Kunci akun layanan merupakan 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 singkat. Untuk mengetahui informasi selengkapnya tentang Workload Identity Federation, lihat Workload Identity Federation.

  • Pemeliharaan yang lebih sedikit: Kunci akun layanan memerlukan lebih banyak pemeliharaan. Merotasi dan mengamankan kunci ini secara rutin dapat menjadi beban administratif yang signifikan.

Sebelum memulai

Di bagian berikut, Anda akan membuat akun layanan dan memberikan peran yang diperlukan untuk Autentikasi Cluster Workload Identity. Petunjuk penyiapan dalam dokumen ini bukan pengganti petunjuk dalam Menyiapkan resource Google Cloud, tetapi diperlukan selain prasyarat penginstalan software Distributed Cloud khusus software standar. Akun layanan yang diperlukan untuk Autentikasi Cluster Workload Identity mirip dengan akun layanan yang dijelaskan dalam Menyiapkan resourceGoogle Cloud , tetapi diberi nama secara unik, sehingga tidak mengganggu cluster yang menggunakan kunci akun layanan default.

Akun layanan yang diperlukan untuk Autentikasi Cluster Workload Identity berbeda untuk penawaran Pratinjau dan GA seperti yang dijelaskan dalam tabel berikut:

1.33 dan yang lebih baru

Akun layanan Tujuan Peran
admin-sa Anda menggunakan akun layanan ini untuk membuat token. Setiap token memiliki hak istimewa yang terkait dengan peran akun layanan. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/iam.workloadIdentityPoolAdmin*
roles/logging.admin
roles/monitoring.admin
roles/resourcemanager.projectIamAdmin
baremetal-gcr Google Distributed Cloud menggunakan akun layanan ini untuk mendownload image container dari Artifact Registry. Tidak ada

*Peran IAM roles/iam.workloadIdentityPoolAdmin hanya diperlukan untuk versi 1.34 dan yang lebih baru.

1.30-1.32

Akun layanan Tujuan Peran
admin-sa Anda menggunakan akun layanan ini untuk membuat token. Setiap token memiliki hak istimewa yang terkait dengan peran akun layanan. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/logging.admin
roles/monitoring.admin
baremetal-controller Connect Agent menggunakan akun layanan ini untuk mempertahankan koneksi antara cluster Anda dan Google Cloud serta untuk mendaftarkan cluster Anda dengan fleet. Akun layanan ini juga memperbarui token untuk akun layanan baremetal-gcr. roles/gkehub.admin
roles/monitoring.dashboardEditor
roles/serviceusage.serviceUsageViewer
baremetal-cloud-ops Stackdriver Agent menggunakan akun layanan ini untuk mengekspor log dan metrik dari cluster ke Cloud Logging dan Cloud Monitoring. roles/kubernetesmetadata.publisher
roles/logging.logWriter
roles/monitoring.dashboardEditor
roles/monitoring.metricWriter
roles/monitoring.viewer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/serviceusage.serviceUsageViewer
roles/stackdriver.resourceMetadata.writer
baremetal-gcr Google Distributed Cloud menggunakan akun layanan ini untuk mendownload image container dari Artifact Registry. Tidak ada

Menyiapkan akun layanan

Bagian berikut berisi petunjuk untuk membuat akun layanan yang diperlukan dan memberinya peran yang diperlukan untuk Autentikasi Cluster Workload Identity. Untuk mengetahui daftar akun layanan dan peran yang diperlukan, lihat tabel di bagian sebelumnya.

Membuat akun layanan

Untuk membuat akun layanan untuk Autentikasi Cluster Workload Identity, gunakan langkah-langkah berikut:

  1. Di workstation admin, login ke Google Cloud CLI:

    gcloud auth login
    
  2. Buat akun layanan yang diperlukan untuk Autentikasi Cluster Workload Identity:

    Nama akun layanan admin-sa bersifat arbitrer. Anda dapat mengubah nama jika menyebabkan konflik dalam project Anda. Akun layanan lainnya untuk Autentikasi Cluster Workload Identity memiliki nama yang telah ditentukan dan dapat disesuaikan, jika Anda mau.

    1.33 dan yang lebih baru

    gcloud iam service-accounts create admin-sa \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create baremetal-gcr \
        --project=PROJECT_ID
    

    Ganti PROJECT_ID dengan ID project Google Cloud Anda.

    1.30-1.32

    ```sh gcloud iam service-accounts create admin-sa
    --project=PROJECT_ID

    gcloud iam service-accounts create baremetal-controller
    --project=PROJECT_ID

    gcloud iam service-accounts create baremetal-cloud-ops
    --project=PROJECT_ID

    gcloud iam service-accounts create baremetal-gcr
    --project=PROJECT_ID ```

    Ganti PROJECT_ID dengan ID project Google Cloud Anda.

Menambahkan binding kebijakan Identity and Access Management untuk akun layanan

Gunakan langkah-langkah berikut untuk menerapkan binding kebijakan Identity and Access Management yang diperlukan ke akun layanan baru:

1.33 dan yang lebih baru

  1. Tambahkan binding kebijakan IAM untuk peran yang diperlukan untuk akun layanan admin-sa:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/iam.serviceAccountTokenCreator
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/monitoring.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/resourcemanager.projectIamAdmin
    

1.30-1.32

  1. Tambahkan binding kebijakan IAM untuk peran yang diperlukan untuk akun layanan admin-sa:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/iam.serviceAccountTokenCreator
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID. \
        --role=roles/monitoring.admin
    
  2. Tambahkan binding kebijakan IAM untuk peran yang diperlukan untuk akun layanan baremetal-controller:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID. \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID. \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID. \
        --role=roles/serviceusage.serviceUsageViewer
    
  3. Tambahkan binding kebijakan IAM untuk peran yang diperlukan untuk akun layanan baremetal-cloud-ops:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/kubernetesmetadata.publisher
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/logging.logWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/monitoring.metricWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/monitoring.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/opsconfigmonitoring.resourceMetadata.writer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/serviceusage.serviceUsageViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID. \
        --role=roles/stackdriver.resourceMetadata.writer
    
  4. Beri akun layanan baremetal-controller kemampuan untuk membuat token akses atas nama akun layanan baremetal-gcr:

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-gcr@PROJECT_ID. \
        --member=serviceAccount:baremetal-controller@PROJECT_ID. \
        --role=roles/iam.serviceAccountTokenCreator
    

Menyiapkan autentikasi

Langkah-langkah berikut menyiapkan alur autentikasi yang menggunakan token berumur singkat untuk mengautentikasi operasi cluster:

  1. Di workstation admin, login ke Google Cloud CLI:

    gcloud auth login
    
  2. Di workstation admin, buat dan download kunci untuk akun layanan admin-sa:

    Kunci ini diperlukan untuk mengizinkan akses bagi akun layanan admin-sa.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.
    

    Ganti TMP_KEY_FILE_PATH dengan jalur, termasuk nama file, dari file kunci yang didownload.

  3. Di workstation admin, buat variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS dengan nilai kunci akun layanan yang didownload:

    export GOOGLE_APPLICATION_CREDENTIALS=TMP_KEY_FILE_PATH
    
  4. Di workstation admin, buat variabel lingkungan GCP_ACCESS_TOKEN dengan nilai token akses yang dibuat oleh akun layanan admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    Secara default, token akses memiliki masa aktif 1 jam.

  5. Pastikan token dibuat oleh akun layanan admin-sa dengan masa berlaku yang benar:

    curl "https://oauth2.googleapis.com/tokeninfo?access_token=$GCP_ACCESS_TOKEN"
    

    Responsnya akan menyertakan baris yang terlihat seperti berikut:

    ...
    "exp": "1759512810",
    "expires_in": "3589",
    ...
    

    Nilai masa berlaku dalam detik dan harus kurang dari 3600, yang menunjukkan bahwa masa berlaku token akan berakhir dalam waktu kurang dari satu jam.

Mengonfigurasi Workload Identity Federation untuk cluster Anda

Untuk memberikan akses Google Cloud dengan Workload Identity Federation untuk GKE, Anda membuat kebijakan izin IAM yang memberikan akses pada resourceGoogle Cloud tertentu ke akun utama yang sesuai dengan identitas aplikasi Anda. Dalam hal ini, Workload Identity Federation memberikan akses ke operator tertentu di cluster. Untuk mengetahui informasi selengkapnya tentang Workload Identity Federation untuk GKE, lihat Workload Identity Federation dalam dokumentasi IAM.

1.33 dan yang lebih baru

Untuk versi cluster yang menyediakan Autentikasi Cluster Workload Identity dalam status GA, Anda dapat menggunakan perintah bmctl configure projects untuk mengonfigurasi Workload Identity Federation untuk cluster Anda. Perintah ini digabungkan ke dalam langkah-langkah untuk membuat cluster admin dan membuat cluster pengguna.

Untuk mencegah ketidakstabilan containerd saat Anda menggunakan mirror registry untuk mengambil image container untuk cluster, Anda harus menambahkan anotasi cluster baremetal.cluster.gke.io/enable-gcr-image-credential-refresh: "false". Anotasi ini tersedia untuk versi 1.33.200-gke.70 dan yang lebih baru:

---
...
registryMirrors:
  - endpoint: https://198.51.20.1:5000
    caCertPath: /root/ca.crt
    pullCredentialConfigPath: /root/.docker/config.json
    hosts:
      - somehost.io
      - otherhost.io
---
apiVersion: v1
kind: Namespace
metadata:
  name: cluster-admin1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: admin1
  namespace: cluster-admin1
  annotations:
    baremetal.cluster.gke.io/enable-gcr-image-credential-refresh: "false"
spec:
  type: admin
  anthosBareMetalVersion: 1.33.200-gke.70
  ...

1.30-1.32

Untuk versi cluster yang Autentikasi Cluster Workload Identity-nya dalam status Pratinjau, Anda harus mengonfigurasi Workload Identity Federation untuk cluster secara manual seperti yang dijelaskan di bagian berikut.

Menambahkan binding kebijakan IAM untuk operator cluster

Perintah berikut memberi akun layanan Kubernetes anthos-cluster-operator kemampuan untuk meniru identitas akun layanan baremetal-controller dan berinteraksi dengan resource Google Cloud atas nama cluster:

  1. Untuk setiap cluster yang dikonfigurasi untuk Autentikasi Cluster Workload Identity (atau direncanakan untuk menggunakan Autentikasi Cluster Workload Identity), termasuk cluster bootstrap, beri anthos-cluster-operator di cluster kemampuan untuk meniru akun layanan baremetal-controller:

    Dalam perintah berikut, principalSet terdiri dari workload identity pool dan akun layanan Kubernetes, anthos-cluster-operator, di namespace kube-system.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-controller@PROJECT_ID. \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID./attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/anthos-cluster-operator \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    

    Ganti kode berikut:

    • PROJECT_NUM: ID unik untuk project Anda yang dibuat secara otomatis.

    • REGION: lokasi keanggotaan fleet untuk cluster Anda, yaitu global, secara default. Untuk mengetahui informasi selengkapnya, lihat Lokasi keanggotaan fleet.

    • CLUSTER_NAME: nama cluster. Secara default, nama cluster bootstrap adalah bmctl-MACHINE_NAME.

  2. Verifikasi binding kebijakan untuk akun layanan baremetal-controller:

    gcloud iam service-accounts get-iam-policy \
        baremetal-controller@PROJECT_ID.
    

    Responsnya akan terlihat seperti berikut:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/admin-cluster/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/user-cluster/kube-system/anthos-cluster-operator
      role: roles/iam.workloadIdentityUser
    etag: BwYoN3QLig0=
    version: 1
    

Menambahkan binding kebijakan IAM untuk operator Google Cloud Observability

Perintah berikut memberi akun layanan Kubernetes Google Cloud Observability berikut kemampuan untuk meniru akun layanan baremetal-cloud-ops dan berinteraksi dengan resource Google Cloud atas nama cluster:

  • cloud-audit-logging
  • gke-metrics-agent
  • kubestore-collector
  • metadata-agent
  • stackdriver-log-forwarder
  1. Untuk setiap cluster yang dikonfigurasi untuk Autentikasi Cluster Workload Identity (atau direncanakan untuk menggunakan Autentikasi Cluster Workload Identity), termasuk cluster bootstrap, beri operator Google Cloud Observability di cluster kemampuan untuk meniru identitas akun layanan baremetal-cloud-ops:

    Dalam setiap perintah berikut, principalSet terdiri dari workload identity pool dan akun layanan Kubernetes, seperti cloud-audit-logging, di namespace kube-system.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID. \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID./attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/cloud-audit-logging \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID. \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID./attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/gke-metrics-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID. \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID./attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/kubestore-collector \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID. \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID./attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/metadata-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID. \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID./attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/stackdriver-log-forwarder \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
  2. Verifikasi binding kebijakan untuk akun layanan baremetal-cloud-ops:

    gcloud iam service-accounts get-iam-policy \
        baremetal-cloud-ops@PROJECT_ID.
    

    Responsnya akan terlihat seperti berikut:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/admin-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/admin-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/admin-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/admin-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/admin-cluster/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/user-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/user-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/user-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/user-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project./attribute.fleetclusteridentity/user-cluster/kube-system/stackdriver-log-forwarder
      role: roles/iam.workloadIdentityUser
    etag: BwYhT4gL-dY=
    version: 1
    

Membuat cluster admin

Langkah-langkah untuk membuat cluster admin sedikit berbeda untuk penawaran Pratinjau (versi 1.30-1.32) dan GA (versi 1.33 dan yang lebih tinggi). Langkah-langkah GA menggunakan perintah bmctl configure projects untuk mengonfigurasi Workload Identity Federation untuk cluster Anda.

1.33 dan yang lebih baru

Perbedaan konfigurasi cluster yang paling jelas untuk cluster yang menggunakan Autentikasi Cluster Workload Identity adalah Anda tidak menentukan jalur ke kunci akun layanan yang didownload.

  1. Saat Anda mengisi setelan cluster di file konfigurasi, biarkan jalur kunci akun layanan di bagian kredensial kosong seperti yang ditunjukkan dalam contoh berikut:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  2. Tambahkan anotasi baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" ke file konfigurasi cluster:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  3. Di workstation admin, perbarui variabel lingkungan GCP_ACCESS_TOKEN dengan token akses yang baru diambil:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    Secara default, token akses memiliki masa aktif 3.600 detik (1 jam). Saat Anda menggunakan Autentikasi Cluster Workload Identity, bmctl akan memeriksa waktu habis masa berlaku token. Jika masa berlaku token dalam waktu 1.800 detik (30 menit), bmctl akan melaporkan error dan keluar.

  4. Konfigurasi Workload Identity Federation untuk cluster yang Anda buat:

    bmctl configure projects --project-id=PROJECT_ID \
        --admin-cluster=ADMIN_CLUSTER_NAME
    
  5. Jalankan perintah bmctl create cluster untuk membuat cluster admin Anda.

1.30-1.32

Perbedaan konfigurasi cluster yang paling jelas untuk cluster yang menggunakan Autentikasi Cluster Workload Identity adalah Anda tidak menentukan jalur ke kunci akun layanan yang didownload.

  1. Saat Anda mengisi setelan cluster di file konfigurasi, biarkan jalur kunci akun layanan di bagian kredensial kosong seperti yang ditunjukkan dalam contoh berikut:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  2. Di workstation admin, buat dan download kunci untuk akun layanan admin-sa:

    Kunci ini diperlukan untuk mengizinkan akses bagi akun layanan admin-sa dan Anda harus segera menghapusnya setelah akun layanan diizinkan.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.
    

    Ganti TMP_KEY_FILE_PATH dengan jalur, termasuk nama file, dari file kunci yang didownload.

  3. Izinkan akses ke Google Cloud dengan akun layanan admin-sa:

    gcloud auth activate-service-account admin-sa@PROJECT_ID. \
        --key-file=TMP_KEY_FILE_PATH
    
  4. Hapus file kunci JSON yang didownload:

    rm TMP_KEY_FILE_PATH
    

    Token akses berumur pendek, jadi Anda biasanya perlu membuatnya ulang sebelum menjalankan perintah bmctl untuk operasi cluster, seperti membuat, mengupgrade, atau mereset cluster.

  5. Di workstation admin, buat variabel lingkungan GCP_ACCESS_TOKEN dengan nilai token akses yang dibuat oleh akun layanan admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \
        --impersonate-service-account=admin-sa@PROJECT_ID.)
    

    Secara default, token akses memiliki masa aktif 3.600 detik (1 jam).

  6. Jalankan perintah bmctl create cluster untuk membuat cluster admin Anda.

Membuat cluster pengguna

Langkah-langkah untuk membuat cluster admin sedikit berbeda untuk penawaran Pratinjau (versi 1.30-1.32) dan GA (versi 1.33 dan yang lebih tinggi). Langkah-langkah GA menggunakan perintah bmctl configure projects untuk mengonfigurasi Workload Identity Federation untuk cluster Anda.

1.33 dan yang lebih baru

  1. Tambahkan anotasi baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" ke file konfigurasi cluster:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-USER_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: USER_CLUSTER_NAME
      namespace: cluster-USER_CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    

    Token akses berumur pendek, jadi Anda biasanya perlu membuatnya ulang sebelum menjalankan perintah bmctl untuk operasi cluster, seperti membuat, mengupgrade, atau mereset cluster.

  2. Di workstation admin, perbarui variabel lingkungan GCP_ACCESS_TOKEN dengan token akses yang baru diambil:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    Secara default, token akses memiliki masa aktif 3.600 detik (1 jam).

  3. Konfigurasi Workload Identity Federation untuk cluster yang Anda buat:

    bmctl configure projects --project-id=PROJECT_ID \
        --user-clusters=USER_CLUSTER_NAME
    
  4. Gunakan kubectl untuk men-deploy manifes cluster pengguna:

    kubectl apply -f USER_CLUSTER_CONFIG \
        --kubeconfig ADMIN_KUBECONFIG
    

Ganti kode berikut:

  • USER_CLUSTER_CONFIG: jalur file konfigurasi cluster pengguna.

  • ADMIN_KUBECONFIG: jalur file kubeconfig cluster admin.

1.30-1.32

  1. Di workstation admin, buat dan download kunci untuk akun layanan admin-sa:

    Kunci ini diperlukan untuk mengizinkan akses bagi akun layanan admin-sa dan Anda harus segera menghapusnya setelah akun layanan diizinkan.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.
    

    Ganti TMP_KEY_FILE_PATH dengan jalur, termasuk nama file, dari file kunci yang didownload.

  2. Izinkan akses ke Google Cloud dengan akun layanan admin-sa:

    gcloud auth activate-service-account admin-sa@PROJECT_ID. \
        --key-file=TMP_KEY_FILE_PATH
    
  3. Hapus file kunci JSON yang didownload:

    rm TMP_KEY_FILE_PATH
    

    Token akses berumur pendek, jadi Anda biasanya perlu membuatnya ulang sebelum menjalankan perintah bmctl untuk operasi cluster, seperti membuat, mengupgrade, atau mereset cluster.

  4. Di workstation admin, buat variabel lingkungan GCP_ACCESS_TOKEN dengan nilai token akses yang dibuat oleh akun layanan admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \
        --impersonate-service-account=admin-sa@PROJECT_ID.)
    

    Secara default, token akses memiliki masa aktif 3.600 detik (1 jam).

  5. Jalankan perintah bmctl create cluster untuk membuat cluster pengguna Anda.

Operasi cluster lainnya

Untuk cluster yang menggunakan Autentikasi Cluster Workload Identity, perintah bmctl berikut mengharuskan Anda menetapkan variabel lingkungan GCP_ACCESS_TOKEN ke token akses yang valid dan aktif:

  • bmctl configure projects
  • bmctl create cluster
  • bmctl register bootstrap
  • bmctl reset cluster
  • bmctl upgrade cluster

bmctl register bootstrap mendukung penggunaan variabel lingkungan GCP_ACCESS_TOKEN untuk Autentikasi Cluster Workload Identity hanya untuk Google Distributed Cloud versi 1.34.0 dan yang lebih baru. Untuk versi sebelum 1.34.0, Anda harus menggunakan file kunci akun layanan untuk mengautentikasi bmctl register bootstrap.

Jika bmctl mendeteksi bahwa variabel lingkungan GCP_ACCESS_TOKEN telah ditetapkan, variabel tersebut akan melakukan validasi token:

  • Jika token valid, bmctl akan menggunakannya untuk operasi cluster.

  • Jika token tidak valid, ambil token baru:

    Token akses berumur pendek, jadi Anda biasanya perlu membuatnya ulang sebelum menjalankan perintah bmctl untuk operasi cluster, seperti membuat, mengupgrade, atau mereset cluster. Di workstation admin, perbarui variabel lingkungan GCP_ACCESS_TOKEN dengan token akses yang baru diambil:

    1.33 dan yang lebih baru

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    1.30-1.32

    sh export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.)

    Secara default, token akses memiliki masa aktif 3.600 detik (1 jam). Saat Anda menggunakan Autentikasi Cluster Workload Identity, bmctl akan memeriksa waktu habis masa berlaku token. Jika masa berlaku token dalam waktu 1.800 detik (30 menit), bmctl akan melaporkan error dan keluar.

Penyesuaian

Anda dapat menggunakan akun layanan dengan nama unik untuk Autentikasi Cluster Workload Identity selama akun tersebut memiliki binding untuk peran yang diperlukan.

1.33 dan yang lebih baru

Secara default, Autentikasi Cluster Workload Identity untuk cluster versi 1.33 dan yang lebih baru hanya menggunakan akun layanan baremetal-gcr. Oleh karena itu, ini adalah satu-satunya akun layanan yang dapat disesuaikan.

  1. Pastikan akun layanan yang ingin Anda gunakan memiliki peran yang diidentifikasi dalam tabel di bagian Sebelum memulai.

  2. Beri anotasi pada file konfigurasi cluster untuk menentukan nama kustom untuk akun layanan Workload Identity Cluster Authentication:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
      annotations:
        ...
        baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    

Ganti CUSTOM_AR_GSA dengan nama email akun layanan yang digunakan oleh Google Distributed Cloud untuk mendownload image container dari Artifact Registry.

1.30-1.32

  1. Pastikan akun layanan yang ingin Anda gunakan memiliki peran yang diidentifikasi dalam tabel di bagian Sebelum memulai.

  2. Beri anotasi pada file konfigurasi cluster untuk menentukan nama kustom untuk akun layanan Workload Identity Cluster Authentication:

    Dengan menentukan nama kustom, Anda dapat menggunakan akun layanan yang ada. Pastikan nama akun layanan kustom yang Anda tentukan berbeda satu sama lain. Kami tidak mendukung penggunaan satu akun layanan untuk menggantikan dua atau beberapa akun layanan default.

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
      annotations:
        ...
        baremetal.cluster.gke.io/controller-service-account: "CUSTOM_CONTROLLER_GSA"
        baremetal.cluster.gke.io/cloud-ops-service-account: "CUSTOM_CLOUD_OPS_GSA"
        baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.30.0-gke.1930
      ...
    

Ganti kode berikut:

  • CUSTOM_CONTROLLER_GSA: nama email akun layanan yang digunakan oleh Connect Agent untuk mempertahankan koneksi antara cluster Anda dan Google Cloud, serta untuk mendaftarkan cluster Anda.

  • CUSTOM_CLOUD_OPS_GSA: nama email akun layanan yang digunakan oleh Agen Stackdriver untuk mengekspor log dan metrik dari cluster ke Cloud Logging dan Cloud Monitoring.

  • CUSTOM_AR_GSA: nama email akun layanan yang digunakan oleh Google Distributed Cloud untuk mendownload image container dari Artifact Registry.

Batasan

Fitur dan kemampuan berikut tidak didukung saat Anda menggunakan Autentikasi Cluster Workload Identity untuk software Distributed Cloud khusus untuk bare metal:

  • Menggunakan server proxy
  • Kontrol Layanan VPC
  • Mengupdate cluster mode berkunci yang ada untuk menggunakan Autentikasi Cluster Workload Identity
  • Pengelolaan siklus proses cluster menggunakan klien GKE On-Prem API, seperti Google Cloud CLI, Terraform, atau konsol Google Cloud

Langkah berikutnya