Menyiapkan gateway Connect

Panduan ini ditujukan bagi administrator platform yang perlu menyiapkan gateway Connect untuk digunakan oleh akun layanan dan pengguna project mereka. Penyiapan ini memungkinkan pengguna:

  • Gunakan konsol Google Cloud untuk login ke cluster terdaftar di luar Google Cloud dengan identitas Google Cloud mereka.

  • Gunakan kubectl untuk mengakses cluster melalui Connect Gateway.

Penyiapan ini hanya memungkinkan autentikasi pengguna dan layanan berdasarkan ID individu mereka, bukan keanggotaan mereka di Google Grup. Untuk menyiapkan dukungan grup tambahan, lihat Menyiapkan gateway Connect dengan Google Grup.

Jika Anda belum familier dengan gateway Connect, lihat ringkasan kami untuk mengetahui penjelasan tentang konsep dasar dan cara kerjanya.

Sebelum memulai

  1. Pastikan Anda telah menginstal alat command line berikut:

    • Versi terbaru Google Cloud CLI, alat command line untuk berinteraksi dengan Google Cloud.
    • kubectl untuk menjalankan perintah terhadap cluster Kubernetes. Jika Anda perlu menginstal kubectl, ikuti petunjuk berikut

    Jika Anda menggunakan Cloud Shell sebagai lingkungan shell untuk berinteraksi dengan Google Cloud, alat ini akan diinstal untuk Anda.

  2. Lakukan inisialisasi gcloud CLI untuk digunakan dengan project Anda, atau jalankan perintah berikut untuk memberi otorisasi 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 agar 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 kustom dengan izin serviceusage.services.enable yang diaktifkan, atau memberi Anda roles/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 gateway Connect, 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 mengautentikasi ke cluster menggunakan konsol Google Cloud , 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 gateway Connect. 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 didaftarkan, jalankan perintah berikut:

gcloud container fleet memberships list

Anda akan melihat daftar semua cluster terdaftar Anda, seperti pada 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 konsol Google Cloud , seperti yang dijelaskan di bagian berikut.

Memberikan peran untuk akses melalui kubectl

Setidaknya, pengguna dan akun layanan memerlukan peran IAM berikut untuk menggunakan kubectl guna berinteraksi dengan cluster melalui gateway Connect, kecuali jika pengguna memiliki roles/owner dalam project:

  • roles/gkehub.gatewayAdmin: Peran ini memungkinkan pengguna mengakses API gateway Connect untuk menggunakan kubectl guna mengelola cluster. Peran ini mencakup izin gkehub.gateway.stream, yang memungkinkan pengguna menjalankan perintah kubectl attach, cp, dan exec. Untuk persyaratan tambahan guna menjalankan perintah tersebut, lihat Dukungan pratinjau untuk perintah.

    • Jika pengguna hanya memerlukan akses baca saja ke cluster yang terhubung, Anda dapat memberikan roles/gkehub.gatewayReader sebagai gantinya.

    • Jika pengguna memerlukan akses baca / tulis ke cluster yang terhubung, Anda dapat memberikan roles/gkehub.gatewayEditor.

  • roles/gkehub.viewer: Peran ini memungkinkan pengguna mengambil kubeconfigs cluster.

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:

  • MEMBER adalah pengguna atau akun layanan, yang dalam format user|serviceAccount:emailID, misalnya:

    • user:alice@example.com
    • serviceAccount:test_sa@example-project.
  • GATEWAY_ROLE adalah roles/gkehub.gatewayAdmin, roles/gkehub.gatewayReader atau roles/gkehub.gatewayEditor.

Anda dapat mengetahui lebih lanjut cara memberikan izin dan peran IAM di bagian 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 menggunakan Google Cloud konsol memerlukan minimal peran IAM berikut untuk melihat cluster:

  • roles/container.viewer. Peran ini memungkinkan pengguna melihat halaman Cluster GKE dan resource penampung lainnya di konsol Google Cloud . 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 konsol Google Cloud . Perhatikan bahwa ini adalah salah satu peran yang diperlukan untuk akses kubectl. 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_ID dengan project ID project host fleet. Selain itu, ganti MEMBER dengan alamat email pengguna atau akun layanan menggunakan format user|serviceAccount:emailID, misalnya:

    • user:alice@example.com
    • serviceAccount:test_sa@example-project.
    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 cara memberikan peran IAM, lihat bagian Mengelola akses ke project, folder, dan organisasi dalam dokumentasi IAM.

Mengonfigurasi otorisasi RBAC

Server Kubernetes API setiap cluster harus dapat mengizinkan permintaan yang berasal dari konsol atau dari perintah kubectl yang masuk melalui gateway Connect dari pengguna dan akun layanan yang Anda tentukan. Google Cloud Untuk memastikannya, Anda perlu memperbarui kebijakan role-based access control (RBAC) di setiap cluster yang ingin Anda buat dapat diakses melalui gateway. Anda perlu menambahkan atau memperbarui kebijakan berikut:

  • Kebijakan peniruan identitas yang mengizinkan agen Connect untuk mengirim permintaan ke server Kubernetes API atas nama pengguna.
  • Kebijakan izin yang menentukan izin yang dimiliki pengguna di cluster. Ini dapat berupa peran tingkat cluster seperti clusterrole/cluster-admin atau clusterrole/cloud-console-reader, atau peran tingkat namespace seperti role/default/pod-reader.

(Opsional) Membuat peran cloud-console-reader

Pengguna yang diautentikasi yang 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 kustom yang mencakup izin minimum untuk melihat node, volume persisten, pod, dan class penyimpanan cluster. Anda dapat menentukan kumpulan izin ini dengan membuat resource ClusterRole RBAC, cloud-console-reader, di cluster.

cloud-console-reader memberikan izin get, list, dan watch kepada penggunanya di node cluster, volume persisten, pod, dan kelas penyimpanan, yang memungkinkan mereka melihat detail tentang resource ini.

kubectl

Untuk membuat cloud-console-reader ClusterRole 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 menunjukkan cara membuat dan menerapkan kebijakan RBAC yang diperlukan. Cara termudah untuk melakukannya adalah dengan 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 fleetnya. Anda dapat mengetahui cara memeriksa nama keanggotaan cluster Anda di Mendapatkan status keanggotaan fleet.
  • ROLE: peran Kubernetes yang ingin Anda berikan kepada pengguna di cluster, misalnya, clusterrole/cluster-admin, clusterrole/cloud-console-reader, atau role/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..
  • PROJECT_ID: project ID tempat cluster terdaftar.
  • KUBECONFIG_PATH: jalur file lokal tempat kubeconfig yang berisi entri untuk cluster disimpan. Dalam sebagian besar kasus, nilainya adalah $HOME/.kube/config.
  • KUBECONFIG_CONTEXT: konteks cluster seperti yang muncul di file kubeconfig. Anda bisa mendapatkan 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.), dengan memberi keduanya izin cluster-admin pada 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.
  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.
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 keluar 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 dalam melindungi data Anda di Ringkasan Kontrol Layanan VPC.

Anda dapat menggunakan Kontrol Layanan VPC dengan gateway Connect untuk keamanan data tambahan, setelah Anda memastikan bahwa API yang diperlukan untuk menggunakan gateway dapat diakses dari dalam perimeter layanan yang ditentukan.

Apa langkah selanjutnya?