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.comsts.googleapis.comiamcredentials.googleapis.comgkehub.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.
- Versi terbaru Google Cloud CLI, yang mencakup
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)
- Pemilik (
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.objectViewerroles/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 AndaNAMESPACE: 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.
Gunakan perintah gcloud projects describe untuk menemukan nomor project numerik Anda:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"Ganti
PROJECT_IDdengan ID project Anda.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.adminGanti nilai berikut:
PROJECT_NUMBER: nomor project numerik AndaNAMESPACE: namespace untuk cluster AndaKSA_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.
Gunakan perintah gcloud iam service-accounts create untuk membuat akun layanan Google:
gcloud iam service-accounts create my-app-sa \ --project=PROJECT_IDGanti
PROJECT_IDdengan ID project Anda.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.adminGunakan 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 AndaKSA_NAME: nama untuk ServiceAccount Kubernetes Anda
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.
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.jsonMenggunakan 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.jsonGanti
PROJECT_NUMBERdengan nomor project Google Cloud Anda. Anda dapat menemukan nomor project dengan menjalankangcloud projects describe PROJECT_ID --format="value(projectNumber)".Gunakan perintah
kubectl create configmapuntuk membuatConfigMapKubernetes guna menyimpan file konfigurasi:kubectl create configmap CREDENTIAL_CONFIG_MAP \ --namespace NAMESPACE \ --from-file=credential-configuration.jsonGanti nilai berikut:
CREDENTIAL_CONFIG_MAP: nama untukConfigMapAnda, yang berisi file konfigurasi kredensial AndaNAMESPACE: namespace untuk cluster Anda
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_MAPGanti nilai berikut:
KSA_NAME: nama untuk ServiceAccount Kubernetes AndaMY_CONTAINER: nama container AndaMY_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
- Men-deploy workload di Distributed Cloud terhubung
- Mengelola layanan
- Menerapkan praktik terbaik keamanan