Bereitstellung auf einen GKE-Namespace beschränken

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

  1. Prüfen Sie, ob 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 weiter 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 clouddeploy.developer IAM-Rolle entsprechen. Um das Risiko einer Berechtigungseskalation zu minimieren, empfehlen wir, diese Berechtigungen auf das Minimum zu beschränken, das für Ihre Anwendungen erforderlich ist. 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 diese RBAC-Rolle im ausgewählten Namespace an das Ausführungsdienstkonto von Cloud Deploy 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 auf keinen anderen Namespace im Cluster zugreifen.

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

    kubectl apply -f YAML_NAME