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.comsts.googleapis.comiamcredentials.googleapis.comgkehub.googleapis.com
Pastikan Anda telah menginstal alat command line berikut:
- Google Cloud CLI versi terbaru, 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.
- Google Cloud CLI versi terbaru, yang
mencakup
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)
- Pemilik (
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.objectViewerroles/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 AndaNAMESPACE: 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.
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 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.adminGanti nilai berikut:
PROJECT_NUMBER: nomor project numerik AndaNAMESPACE: namespace untuk cluster AndaKSA_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.
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 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 AndaKSA_NAME: nama untuk Kubernetes ServiceAccount Anda
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.
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.jsonMenggunakan 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.jsonGanti
PROJECT_NUMBERdengan nomor project Anda. Google Cloud 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 Kubernetes ServiceAccount AndaMY_CONTAINER: nama container AndaMY_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
- Men-deploy workload di Distributed Cloud connected
- Mengelola layanan
- Menerapkan praktik terbaik keamanan