Panduan ini ditujukan bagi administrator platform yang perlu menyiapkan Connect gateway untuk digunakan oleh pengguna dan akun layanan project mereka. Penyiapan ini memungkinkan pengguna:
Menggunakan Google Cloud konsol untuk login ke cluster terdaftar di luar Google Cloud dengan identitas Google Cloud mereka.
Menggunakan
kubectluntuk mengakses cluster melalui Connect gateway.
Penyiapan ini hanya memungkinkan autentikasi pengguna dan layanan berdasarkan ID masing-masing, bukan keanggotaan mereka di Google Grup. Untuk menyiapkan dukungan grup tambahan, lihat Menyiapkan Connect gateway dengan Google Grup.
Jika Anda belum memahami Connect gateway, lihat ringkasan kami untuk mengetahui penjelasan tentang konsep dasar dan cara kerjanya.
Sebelum memulai
Pastikan Anda telah menginstal alat command line berikut:
- Google Cloud CLI versi terbaru, alat command line untuk berinteraksi dengan. Google Cloud
kubectluntuk menjalankan perintah terhadap cluster Kubernetes. Jika Anda perlu menginstalkubectl, ikuti petunjuk ini
Jika Anda menggunakan Cloud Shell sebagai lingkungan shell untuk berinteraksi dengan Google Cloud, alat ini akan diinstal untuk Anda.
Inisialisasi gcloud CLI untuk digunakan dengan project Anda, atau jalankan perintah berikut untuk mengotorisasi gcloud CLI dan menetapkan project Anda sebagai default:
gcloud auth login gcloud config set project PROJECT_ID
Peran IAM yang diperlukan untuk penyiapan
Panduan ini mengasumsikan bahwa Anda memiliki izin roles/owner di project Anda.
Jika Anda bukan pemilik project, minta pemilik project untuk memberi Anda izin tambahan di project sehingga Anda dapat melakukan tugas berikut:
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable, yang disertakan dalam peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pemilik project dapat membuat peran khusus dengan izinserviceusage.services.enableyang diaktifkan, atau memberi Andaroles/serviceusage.serviceUsageAdmin, sebagai berikut:gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:USER_EMAIL_ADDRESS \ --role='roles/serviceusage.serviceUsageAdmin'Untuk memberikan izin IAM kepada pengguna dan akun layanan agar mereka dapat menggunakan Connect gateway, Anda memerlukan peran Project IAM Admin (
roles/resourcemanager.projectIamAdmin), yang dapat diberikan oleh pemilik project dengan perintah berikut:gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:USER_EMAIL_ADDRESS \ --role='roles/resourcemanager.projectIamAdmin'
Mengaktifkan API
Untuk menambahkan gateway ke project Anda, aktifkan Connect gateway API dan API dependensi yang diperlukan. Jika pengguna Anda hanya ingin melakukan autentikasi ke cluster
menggunakan Google Cloud konsol, Anda tidak perlu mengaktifkan
connectgateway.googleapis.com, tetapi Anda harus mengaktifkan API lainnya.
gcloud services enable --project=PROJECT_ID \
connectgateway.googleapis.com \
gkeconnect.googleapis.com \
gkehub.googleapis.com \
cloudresourcemanager.googleapis.com
Memverifikasi cluster terdaftar
Hanya cluster yang terdaftar ke fleet project Anda yang dapat diakses melalui Connect gateway. Cluster GKE di infrastruktur lokal dan di cloud publik lainnya akan otomatis terdaftar saat dibuat. Namun, cluster GKE di Google Cloud dan cluster terlampir harus didaftarkan secara terpisah. Jika Anda perlu mendaftarkan cluster, ikuti petunjuk dalam panduan pendaftaran cluster kami. Perhatikan bahwa cluster GKE harus didaftarkan ke fleet untuk menggunakan gateway.
Untuk memverifikasi bahwa cluster telah terdaftar, jalankan perintah berikut:
gcloud container fleet memberships list
Anda akan melihat daftar semua cluster terdaftar, seperti dalam contoh output ini:
NAME EXTERNAL_ID
cluster-1 0192893d-ee0d-11e9-9c03-42010a8001c1
cluster-2 f0e2ea35-ee0c-11e9-be79-42010a8400c2
Memberikan peran IAM kepada pengguna
Akses ke cluster dikontrol oleh Identity and Access Management (IAM). Peran IAM yang diperlukan
untuk mengakses cluster menggunakan kubectl sedikit berbeda
dengan peran untuk mengakses cluster di Google Cloud konsol, seperti yang dijelaskan
di bagian berikut.
Memberikan peran untuk akses melalui kubectl
Minimal, pengguna dan akun layanan memerlukan
peran IAM berikut untuk menggunakan kubectl guna berinteraksi dengan cluster
melalui Connect gateway, kecuali jika pengguna memiliki roles/owner di project:
roles/gkehub.gatewayAdmin: Peran ini memungkinkan pengguna mengakses Connect gateway API untuk menggunakankubectlguna mengelola cluster. Peran ini mencakup izingkehub.gateway.stream, yang memungkinkan pengguna menjalankan perintahkubectlattach,cp, danexec. Untuk mengetahui persyaratan tambahan guna menjalankan perintah tersebut, lihat Dukungan pratinjau untuk perintah.Jika pengguna hanya memerlukan akses baca-saja ke cluster terhubung, Anda dapat memberikan
roles/gkehub.gatewayReader.Jika pengguna memerlukan akses baca / tulis ke cluster terhubung, Anda dapat memberikan
roles/gkehub.gatewayEditor.
roles/gkehub.viewer: Peran ini memungkinkan pengguna mengambilkubeconfigscluster.
Untuk mengetahui detail tentang izin yang disertakan dalam peran ini, lihat Peran GKE Hub dalam dokumentasi IAM.
Anda dapat menggunakan perintah berikut untuk memberikan peran ini:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=MEMBER \
--role=GATEWAY_ROLE
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=MEMBER \
--role=roles/gkehub.viewer
dengan:
MEMBERadalah pengguna atau akun layanan, yang dalam formatuser|serviceAccount:emailID, misalnya:user:alice@example.comserviceAccount:test_sa@example-project.iam.gserviceaccount.com
GATEWAY_ROLEadalahroles/gkehub.gatewayAdmin,roles/gkehub.gatewayReader, atauroles/gkehub.gatewayEditor.
Anda dapat mengetahui lebih lanjut cara memberikan izin dan peran IAM di Memberikan, mengubah, dan mencabut akses ke resource.
Memberikan peran untuk akses melalui konsol Google Cloud
Pengguna yang ingin berinteraksi dengan cluster di luar Google Cloud penggunaan Google Cloud konsol memerlukan peran IAM berikut minimal untuk melihat cluster:
roles/container.viewer. Peran ini memungkinkan pengguna melihat halaman Cluster GKE dan resource container lainnya di Google Cloud konsol. Untuk mengetahui detail tentang izin yang disertakan dalam peran ini, lihat Peran Kubernetes Engine dalam dokumentasi IAM.roles/gkehub.viewer. Peran ini memungkinkan pengguna melihat cluster di luar Google Cloud di Google Cloud konsol. Perhatikan bahwa ini adalah salah satu peran yang diperlukan untuk akseskubectl. Jika Anda telah memberikan peran ini kepada pengguna, Anda tidak perlu memberikannya lagi. Untuk mengetahui detail tentang izin yang disertakan dalam peran ini, lihat Peran GKE Hub dalam dokumentasi IAM.Dalam perintah berikut, ganti
PROJECT_IDdengan project ID project host fleet. Selain itu, gantiMEMBERdengan alamat email atau akun layanan pengguna menggunakan formatuser|serviceAccount:emailID, misalnya:user:alice@example.comserviceAccount:test_sa@example-project.iam.gserviceaccount.com
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=MEMBER \ --role=roles/container.viewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=MEMBER \ --role=roles/gkehub.viewer
Untuk mengetahui informasi selengkapnya tentang pemberian peran IAM, lihat Mengelola akses ke project, folder, dan organisasi dalam dokumentasi IAM.
Mengonfigurasi otorisasi RBAC
Server Kubernetes API setiap cluster harus dapat mengotorisasi
permintaan yang berasal dari Google Cloud konsol atau dari kubectl perintah
yang berasal melalui Connect gateway dari pengguna dan akun layanan
yang Anda tentukan. Untuk memastikannya, Anda harus memperbarui kebijakan role-based access control (RBAC) di setiap cluster yang ingin Anda akses melalui gateway. Anda harus menambahkan atau memperbarui kebijakan berikut:
- Kebijakan peniruan identitas yang mengotorisasi agen Connect untuk mengirim permintaan ke server Kubernetes API atas nama pengguna.
- Kebijakan izin yang menentukan izin yang dimiliki pengguna di cluster. Kebijakan ini dapat berupa peran tingkat cluster seperti
clusterrole/cluster-adminatauclusterrole/cloud-console-reader, atau peran tingkat namespace sepertirole/default/pod-reader.
(Opsional) Membuat peran cloud-console-reader
Pengguna yang diautentikasi dan ingin mengakses resource cluster di Google Cloud konsol
harus memiliki izin Kubernetes yang relevan untuk melakukannya. Jika Anda tidak ingin memberikan izin yang lebih luas kepada pengguna tersebut, seperti izin admin cluster, Anda dapat membuat peran RBAC khusus yang mencakup izin minimum untuk melihat node, volume persisten, pod, dan class penyimpanan cluster. Anda dapat menentukan kumpulan
izin ini dengan membuat ClusterRole RBAC resource,
cloud-console-reader, di cluster.
cloud-console-reader memberikan izin get, list, dan watch kepada penggunanya di node cluster, volume persisten, pod, dan class penyimpanan, yang memungkinkan mereka melihat detail tentang resource ini.
kubectl
Untuk membuat ClusterRole cloud-console-reader dan menerapkannya ke cluster, jalankan perintah berikut:
cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cloud-console-reader
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumes", "pods"]
verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml
Kemudian, Anda dapat memberikan peran ini kepada pengguna saat menyiapkan kebijakan izin, seperti yang dijelaskan di bagian berikutnya.
Membuat dan menerapkan kebijakan RBAC yang diperlukan
Berikut ini cara membuat dan menerapkan kebijakan RBAC yang diperlukan. Cara termudah untuk melakukannya adalah menggunakan gcloud CLI untuk membuat dan menerapkan kebijakan yang sesuai untuk Anda. Atau, jika mau, Anda dapat membuat file kebijakan RBAC dan menerapkannya dengan kubectl.
gcloud
Untuk membuat dan menerapkan kebijakan ke cluster pilihan Anda dengan gcloud CLI, jalankan perintah berikut:
gcloud container fleet memberships generate-gateway-rbac \
--membership=MEMBERSHIP_NAME \
--role=ROLE \
--users=USERS \
--project=PROJECT_ID \
--kubeconfig=KUBECONFIG_PATH \
--context=KUBECONFIG_CONTEXT \
--apply
Ganti kode berikut:
- MEMBERSHIP_NAME: nama yang digunakan untuk merepresentasikan cluster secara unik dalam fleet-nya. Anda dapat mengetahui cara memeriksa nama keanggotaan cluster di Mendapatkan status keanggotaan fleet.
- ROLE: peran Kubernetes yang ingin Anda berikan kepada pengguna di
cluster, misalnya,
clusterrole/cluster-admin,clusterrole/cloud-console-reader, ataurole/mynamespace/namespace-reader. Peran ini harus sudah ada sebelum Anda menjalankan perintah. - USERS: alamat email pengguna (akun pengguna atau
akun layanan) yang ingin Anda beri izin, sebagai
daftar yang dipisahkan koma. Contoh:
--users=dana@example.com,test-acct@test-project.iam.gserviceaccount.com. - PROJECT_ID: project ID tempat cluster terdaftar.
- KUBECONFIG_PATH: jalur file lokal tempat kubeconfig
yang berisi entri untuk cluster disimpan. Biasanya
$HOME/.kube/config. KUBECONFIG_CONTEXT: konteks cluster seperti yang muncul dalam file kubeconfig. Anda dapat memperoleh konteks saat ini dari command line dengan menjalankan
kubectl config current-context. Baik Anda menggunakan konteks saat ini atau tidak, pastikan konteks tersebut berfungsi untuk mengakses cluster dengan menjalankan perintah berikut:kubectl get namespaces \ --kubeconfig=KUBECONFIG_PATH \ --context=KUBECONFIG_CONTEXT
Setelah menjalankan gcloud container fleet memberships generate-gateway-rbac, Anda akan melihat sesuatu seperti berikut di akhir output, yang dipangkas agar mudah dibaca
Validating input arguments. Specified Cluster Role is: clusterrole/cluster-admin Generated RBAC policy is: -------------------------------------------- ... --- Applying the generate RBAC policy to cluster with kubeconfig: artifacts/kubeconfig, context: example-cluster-admin@example-cluster Writing RBAC policy for user: 222larabrown@gmail.com to cluster. Successfully applied the RBAC policy to cluster.
Ini adalah konteks untuk mengakses cluster melalui Connect gateway.
Untuk mengetahui detail selengkapnya tentang perintah generate-gateway-rbac, lihat
panduan referensi gcloud CLI.
kubectl
Contoh berikut menunjukkan cara membuat kebijakan yang sesuai untuk pengguna (dana@example.com) dan akun layanan (test@example-project.iam.gserviceaccount.com), yang memberi keduanya izin cluster-admin di cluster dan menyimpan file kebijakan sebagai /tmp/gateway-rbac.yaml. Kebijakan tersebut kemudian diterapkan ke cluster yang terkait dengan konteks saat ini:
cat <<EOF > /tmp/gateway-rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: gateway-impersonate
rules:
- apiGroups:
- ""
resourceNames:
- dana@example.com
- test@example-project.iam.gserviceaccount.com
resources:
- users
verbs:
- impersonate
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: gateway-impersonate
roleRef:
kind: ClusterRole
name: gateway-impersonate
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: connect-agent-sa
namespace: gke-connect
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: gateway-cluster-admin
subjects:
- kind: User
name: dana@example.com
- kind: User
name: test@example-project.iam.gserviceaccount.com
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
EOF
# Apply policies to the cluster.
kubectl apply --kubeconfig=KUBECONFIG_PATH -f /tmp/gateway-rbac.yaml
Anda dapat mengetahui lebih lanjut cara menentukan izin RBAC di Menggunakan otorisasi RBAC.
Dukungan Kontrol Layanan VPC
Kontrol Layanan VPC memberikan lapisan pertahanan keamanan tambahan untuk Google Cloud layanan yang tidak bergantung pada Identity and Access Management (IAM). Meskipun IAM memungkinkan kontrol akses berbasis identitas yang terperinci, Kontrol Layanan VPC memungkinkan keamanan perimeter berbasis konteks yang lebih luas, termasuk mengontrol egress data di seluruh perimeter—misalnya, Anda dapat menentukan bahwa hanya project tertentu yang dapat mengakses data BigQuery Anda. Anda dapat menemukan informasi selengkapnya tentang cara kerja Kontrol Layanan VPC untuk melindungi data Anda di Ringkasan Kontrol Layanan VPC.
Anda dapat menggunakan Kontrol Layanan VPC dengan Connect gateway untuk keamanan data tambahan, setelah memastikan bahwa API yang diperlukan untuk menggunakan gateway dapat diakses dari dalam perimeter layanan yang Anda tentukan.
Apa langkah selanjutnya?
- Pelajari cara menggunakan Connect gateway untuk terhubung ke cluster dari command line.
- Lihat contoh cara menggunakan Connect gateway sebagai bagian dari otomatisasi DevOps Anda dalam tutorial Mengintegrasikan dengan Cloud Build.