Membatasi deployment ke namespace GKE

Saat Anda men-deploy ke Google Kubernetes Engine (GKE), akun layanan eksekusi Cloud Deploy default memiliki akses ke semua namespace dalam cluster target. Anda dapat mengonfigurasi akun layanan tersebut untuk men-deploy hanya ke satu namespace.

  1. Pastikan akun layanan eksekusi tidak memiliki peran IAM roles/container.developer.

  2. Berikan peran roles/container.clusterViewer kepada akun layanan.

    gcloud projects add-iam-policy-binding PROJECT_ID \
     --member="serviceAccount:SERVICE_ACCOUNT" \
     --role="roles/container.clusterViewer"
    

    Dengan peran ini, akun layanan dapat melakukan autentikasi di cluster, tetapi tidak melakukan tindakan lain.

  3. Buat Peran RBAC Kubernetes yang memberikan akses admin ke namespace.

    Peran RBAC dalam contoh ini memiliki izin yang luas, setara dengan peran IAM clouddeploy.developer. Untuk meminimalkan risiko eskalasi hak istimewa, sebaiknya Anda mengubah izin ini ke minimum yang diperlukan untuk aplikasi Anda. Untuk mengetahui petunjuknya, lihat dokumentasi RBAC untuk GKE.

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: admin
      namespace: NAMESPACE
    rules:
    - apiGroups: ["", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    
  4. Buat RoleBinding yang mengikat Peran RBAC tersebut di namespace yang Anda pilih ke akun layanan eksekusi Cloud Deploy:

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: admin
      namespace: NAMESPACE
    subjects:
    # Google Cloud user account
    - kind: User
      name: SERVICE_ACCOUNT
    roleRef:
      kind: Role
      name: admin
      apiGroup: rbac.authorization.k8s.io
    

    Manifes ini menentukan binding kebijakan RBAC yang mengikat Peran admin ke akun layanan eksekusi Anda. NAMESPACE adalah namespace yang ingin Anda beri akses akun layanan. Akun layanan tidak dapat mengakses namespace lain di cluster.

  5. Terapkan manifes RBAC ke cluster:

    kubectl apply -f YAML_NAME