Autentikasi Cluster Workload Identity

Dokumen ini menjelaskan cara menyiapkan dan menggunakan Autentikasi Cluster Workload Identity untuk Google Distributed Cloud (khusus software) di bare metal. Alih-alih kunci akun layanan, Autentikasi Cluster Workload Identity menggunakan token berumur pendek dan Workload Identity Federation untuk membuat dan mengamankan cluster Anda. Kredensial berjangka pendek untuk akun layanan berbentuk token akses OAuth 2.0. Token akses tidak berlaku lagi setelah 1 jam secara default. Demikian pula, masa berlaku token penarikan gambar juga berakhir setelah 1 jam secara default.

Sebaliknya, mode kunci, 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. Kemudian, kunci disimpan sebagai Secret di cluster dan cluster pengguna terkelola mana pun. Secara default, masa berlaku kunci akun layanan tidak pernah berakhir dan berisiko keamanan jika tidak dikelola dengan benar. Untuk mengetahui informasi tentang cara menyetel 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 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 menjadi beban administratif yang signifikan.

Autentikasi Cluster Workload Identity diperkenalkan untuk Pratinjau dengan rilis 1.30 dan tersedia secara umum untuk rilis 1.33 dan yang lebih baru. Autentikasi Cluster Workload Identity hanya dapat diaktifkan saat membuat cluster baru. Anda tidak dapat mengonfigurasi cluster yang ada untuk menggunakan Autentikasi Cluster Workload Identity selama update atau upgrade. Untuk mengetahui batasan tambahan, lihat Batasan.

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.

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 Google Cloud resource, tetapi diperlukan sebagai tambahan untuk prasyarat penginstalan hanya software Google Distributed Cloud standar. Akun layanan yang diperlukan untuk Autentikasi Cluster Workload Identity mirip dengan akun layanan yang dijelaskan dalam Menyiapkan Google Cloud resource, tetapi akun layanan ini diberi nama 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/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

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 ke fleet. Akun layanan ini juga memperbarui token untuk akun layanan baremetal-gcr. roles/gkehub.admin
roles/monitoring.dashboardEditor
roles/serviceusage.serviceUsageViewer
baremetal-cloud-ops Agen Stackdriver 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 memberikan peran yang diperlukan untuk Autentikasi Cluster Workload Identity. Untuk mengetahui daftar akun layanan dan perannya yang diperlukan, lihat tabel di bagian sebelumnya.

Membuat akun layanan

Untuk membuat akun layanan bagi 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 sebelumnya yang 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 Google Cloud project Anda.

    1.30-1.32

    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 Google Cloud project 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 bagi akun layanan admin-sa:

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

1.30-1.32

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

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

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

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/kubernetesmetadata.publisher
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.logWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.metricWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/opsconfigmonitoring.resourceMetadata.writer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/serviceusage.serviceUsageViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --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.iam.gserviceaccount.com \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    

Menyiapkan autentikasi

Langkah-langkah berikut menyiapkan alur autentikasi yang menggunakan token berjangka pendek untuk mengautentikasi operasi cluster:

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

    gcloud auth login
    
  2. Di workstation admin Anda, 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.iam.gserviceaccount.com
    

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

  3. Di workstation admin Anda, 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, masa berlaku token akses adalah 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"
    

    Respons harus menyertakan baris yang terlihat mirip dengan berikut:

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

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

Mengonfigurasi Workload Identity Federation untuk cluster Anda

Untuk memberikan Google Cloud akses dengan Workload Identity Federation untuk GKE, Anda membuat kebijakan izin IAM yang memberikan akses pada Google Cloud resource tertentu kepada prinsipal 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 di dokumentasi IAM.

1.33 dan yang lebih baru

Untuk versi cluster yang Workload Identity Cluster Authentication-nya sudah tersedia secara umum, Anda menggunakan perintah bmctl configure projects untuk mengonfigurasi Workload Identity Federation bagi cluster Anda. Perintah ini disertakan dalam langkah-langkah untuk membuat cluster admin dan membuat cluster pengguna.

1.30-1.32

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

Tambahkan binding kebijakan IAM untuk operator cluster

Perintah berikut memberikan kemampuan kepada akun layanan Kubernetes anthos-cluster-operator 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, berikan anthos-cluster-operator di cluster kemampuan untuk meniru akun layanan baremetal-controller:

    Pada perintah berikut, principalSet terdiri dari kumpulan identitas beban kerja dan akun layanan Kubernetes, anthos-cluster-operator, di namespace kube-system.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/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:

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

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

    Responsnya akan terlihat seperti berikut:

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

Tambahkan binding kebijakan IAM untuk operator Google Cloud Observability

Perintah berikut memberikan kemampuan kepada akun layanan Google Cloud Observability Kubernetes berikut untuk meniru identitas 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, berikan kemampuan kepada operator Google Cloud Observability di cluster untuk meniru akun layanan baremetal-cloud-ops:

    Di setiap perintah berikut, principalSet terdiri dari kumpulan identitas beban kerja 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.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/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.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/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.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/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.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/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.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/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.iam.gserviceaccount.com
    

    Responsnya akan terlihat seperti berikut:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/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 baru). 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 Identitas Beban Kerja, bmctl akan memeriksa waktu habis masa berlaku token. Jika masa berlaku token berada dalam 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.

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 Anda, buat dan download kunci untuk akun layanan admin-sa:

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

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

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

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

    gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --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.iam.gserviceaccount.com)
    

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

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

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 baru). 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 hanya berlaku dalam waktu singkat, 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 Anda, buat dan download kunci untuk akun layanan admin-sa:

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

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

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

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

    gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --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.iam.gserviceaccount.com)
    

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

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

Operasi cluster lainnya

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

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

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 hanya berlaku dalam waktu singkat, jadi Anda biasanya perlu membuatnya ulang sebelum menjalankan perintah bmctl untuk operasi cluster, seperti membuat, mengupgrade, atau mereset cluster. Di workstation admin Anda, 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

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

    Secara default, token akses memiliki masa aktif 3.600 detik (1 jam). Saat Anda menggunakan Autentikasi Cluster Identitas Beban Kerja, bmctl akan memeriksa waktu habis masa berlaku token. Jika masa berlaku token berada dalam 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, hanya akun layanan ini yang dapat disesuaikan.

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

  2. Anotasikan file konfigurasi cluster untuk menentukan nama kustom bagi 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 Sebelum memulai.

  2. Anotasikan file konfigurasi cluster untuk menentukan nama kustom bagi 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 lebih 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 Google Distributed Cloud (khusus software) di bare metal:

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

Langkah berikutnya