Bereitstellung auf einen GKE-Namespace beschränken

Wenn Sie in Google Kubernetes Engine (GKE) bereitstellen, hat das Standard-Ausführungsdienstkonto von Cloud Deploy Zugriff auf alle Namespaces im Zielcluster. Sie können das Dienstkonto so konfigurieren, dass es nur in einem Namespace bereitgestellt wird.

  1. Achten Sie darauf, dass das Ausführungsdienstkonto nicht die IAM-Rolle roles/container.developer hat.

  2. Weisen Sie dem Dienstkonto die Rolle roles/container.clusterViewer zu.

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

    Mit dieser Rolle kann sich das Dienstkonto im Cluster authentifizieren, aber nichts anderes tun.

  3. Erstellen Sie eine Kubernetes-RBAC-Rolle, die Administratorzugriff auf den Namespace gewährt.

    Die RBAC-Rolle in diesem Beispiel hat umfassende Berechtigungen, die der IAM-Rolle clouddeploy.developer entsprechen. Um das Risiko einer Berechtigungseskalation zu minimieren, empfehlen wir, diese Berechtigungen auf das für Ihre Anwendungen erforderliche Minimum zu ändern. Eine Anleitung finden Sie in der RBAC-Dokumentation für GKE.

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: admin
      namespace: NAMESPACE
    rules:
    - apiGroups: ["", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    
  4. Erstellen Sie eine RoleBinding, die die RBAC-Rolle im ausgewählten Namespace an das Cloud Deploy-Ausführungsdienstkonto bindet:

    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
    

    Dieses Manifest definiert eine RBAC-Richtlinie, die die Rolle admin an Ihr Ausführungsdienstkonto bindet. NAMESPACE ist der Namespace, für den Sie dem Dienstkonto Zugriff gewähren möchten. Das Dienstkonto kann nicht auf andere Namespaces im Cluster zugreifen.

  5. Wenden Sie das RBAC-Manifest auf den Cluster an:

    kubectl apply -f YAML_NAME