Zugriff auf Ressourcen mit IAM sichern

Kubernetes-Nutzer und -Dienstkonten benötigen Berechtigungen zum Verwalten von Config Connector-Ressourcen. Mit Config Connector kann die Steuerungsebene Ihres Projekts von Identitäten verwaltet werden, die die rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) von Kubernetes verwenden. Sie können auch Verweise auf Richtlinien für die Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM) einrichten.

Die Ressourcen, die auf IAMPolicy und IAMPolicyMember verweisen können, sind in der Referenz der Config Connector-Ressourcen aufgeführt. Diese Ressourcen haben das Attribut „Can be Reference by IAMPolicy/IAMPolicyMember”.

In diesem Thema wird erläutert, wie Sie den Zugriff auf Google Cloud -Ressourcen mit Identity and Access Management sichern.

Hinweis

Installieren Sie Config Connector in Ihrem Cluster.

Zugriff auf die Steuerungsebene mit RBAC sichern

In diesem Beispiel erstellen Sie ein Dienstkonto und erteilen ihm Berechtigungen zum Verwalten von PubSubTopic. Dieses Dienstkonto kann keine anderen Arten von Config Connector-Ressourcen verwalten.

  1. Erstellen Sie eine Datei mit dem Namen pubsub-topic-service-account.yaml und folgendem Inhalt:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: pubsub-topic-service-account
      namespace: default
    

    Wenden Sie dies an, um das Dienstkonto pubsub-topic-service-account zu erstellen:

    kubectl apply -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE

    Ersetzen Sie CC_NAMESPACE durch den Namespace, von dem aus Config Connector Ressourcen verwaltet.

  2. Bestätigen Sie, dass pubsub-topic-service-account keine PubSubTopic-Ressourcen erstellen kann, indem Sie prüfen, ob die Ausgabe des folgenden Befehls no enthält:

    kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
  3. Erstellen Sie als Nächstes einen ClusterRole, mit dem Pub/Sub-Themen erstellt werden können.

    ClusterRole kann nur Ressourcen verwalten, deren Werte in rules.apiGroups und rules.resources angegeben sind. Informationen zum Ermitteln von Werten für apiGroups und resources finden Sie in der Referenz der Config Connector-Ressourcen.

    Erstellen Sie eine Datei mit dem Namen pubsub-topic-editor-role.yaml und folgendem Inhalt:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      creationTimestamp: null
      name: pubsub-topic-editor
    rules:
    - apiGroups:
      - pubsub.cnrm.cloud.google.com
      resources:
      - pubsubtopics
      verbs:
      - get
      - list
      - watch
      - create
      - update
      - patch
      - delete
    

    Wenden Sie pubsub-topic-editor.yaml an, um ClusterRole zu erstellen:

    kubectl apply -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE

    Ersetzen Sie CC_NAMESPACE durch den Namespace, von dem aus Config Connector Ressourcen verwaltet.

  4. Erstellen Sie als Nächstes ein RoleBinding zwischen ClusterRole und Ihrem Dienstkonto. Erstellen Sie eine Datei mit dem Namen pubsub-topic-editor-rolebinding.yaml und folgendem Inhalt:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: pubsub-topic-editor-rolebinding.
    subjects:
    - kind: ServiceAccount
      name: pubsub-topic-service-account
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: pubsub-topic-editor
    
  5. Wenden Sie pubsub-topic-editor-rolebinding.yaml auf Ihren Cluster an:

    kubectl apply -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE

    Ersetzen Sie CC_NAMESPACE durch den Namespace, von dem aus Config Connector Ressourcen verwaltet.

  6. Bestätigen Sie, dass pubsub-topic-service-account zum Erstellen von PubSubTopic-Ressourcen berechtigt ist, indem Sie bestätigen, dass die Ausgabe des folgenden Befehls yes lautet:

    kubectl auth can-i get pubsubtopics \
      --as=system:serviceaccount:default:pubsub-topic-service-account

Bereinigen

Verwenden Sie kubectl delete, um das Dienstkonto, die IAM-Rolle und die Rollenbindung zu entfernen.

kubectl delete -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE

Ersetzen Sie CC_NAMESPACE durch den Namespace Config Connector verwaltet Ressourcen von.

Die Datenebene mit IAM-Richtlinien sichern

In diesem Beispiel verwenden Sie die zuvor erteilten Berechtigungen, um einen PubSubTopic zu erstellen und den Zugriff mit einer IAMPolicyMember-Ressource darauf zu beschränken.

  1. Erstellen Sie eine Datei mit dem Namen pubsub-topic-sample.yaml und dem folgendem Inhalt:

    apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
    kind: PubSubTopic
    metadata:
      name: pubsubtopic-sample
    

    Wenden Sie pubsub-topic-sample.yaml mit kubectl an:

    kubectl apply -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE

    Ersetzen Sie CC_NAMESPACE durch den Namespace, von dem aus Config Connector Ressourcen verwaltet.

  2. Erstellen Sie eine Datei mit dem Namen iampolicymember.yaml und dem folgenden Inhalt. Ersetzen Sie dabei EMAIL_ADDRESS durch die E-Mail-Adresse Ihres Google Cloud -Kontos:

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
      name: iampolicymember-sample
    spec:
      resourceRef:
        apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
        kind: PubSubTopic
        name: pubsubtopic-sample
      role: roles/pubsub.admin
      member: "user:EMAIL_ADDRESS"
    
  3. Wenden Sie iampolicymember.yaml an.

    kubectl apply -f iampolicymember.yaml  --namespace CC_NAMESPACE 

    Ersetzen Sie CC_NAMESPACE durch den Namespace, von dem aus Config Connector Ressourcen verwaltet.

  4. Prüfen Sie, ob die Richtlinie auf Google Cloud angewendet wurde. Führen Sie dazu den folgenden Befehl aus und suchen Sie in der Ausgabe nach Ihrer E-Mail-Adresse. Ersetzen Sie dabei PROJECT_ID durch Ihre Projekt-ID:

    gcloud beta pubsub topics get-iam-policy projects/PROJECT_ID/topics/pubsubtopic-sample

Der Zugriff auf Ihre Pub/Sub-Themen ist jetzt mit IAMPolicyMember geschützt.

Bereinigen

Verwenden Sie kubectl delete, um das Pub/Sub-Thema und das IAMPolicyMember aus Ihrem Google Cloud Projekt zu entfernen.

kubectl delete -f iampolicymember.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE

Best Practices für die Sicherheit bei der Mehrmandanten-Isolierung

Beachten Sie die folgenden Best Practices, um eine nicht autorisierte Rechteausweitung zu verhindern und die Mandantenisolation zu erzwingen:

  • Namespace-Modus erzwingen: Vermeiden Sie den Clustermodus in Mehrmandantenumgebungen. Im Clustermodus verwenden alle Namespaces ein einziges IAM-Dienstkonto. Jeder Nutzer, der Config Connector-Ressourcen in einem beliebigen Namespace erstellen kann, kann mit den vollständigen IAM-Berechtigungen dieses Dienstkontos agieren.

  • RBAC für IAM-Ressourcen einschränken: Schränken Sie die Berechtigungen zum Erstellen und Ändern von IAMPolicy-, IAMPartialPolicy- und IAMPolicyMember-Ressourcen mithilfe der rollenbasierten Zugriffssteuerung (Role-Based Access Control, RBAC) von Kubernetes ein. Wenn Entwickler umfassenden Schreibzugriff auf diese Ressourcen haben, können sie Google Cloud IAM-Bindungen ändern.

  • IAM-Bindungen für die Workload Identity-Föderation für GKE einschränken: Konfigurieren Sie diese Bindungen ausschließlich für bestimmte Kubernetes-ServiceAccounts in bestimmten Namespaces. Binden Sie im Namespace-Modus jedes IAM-Dienstkonto nur an das Config Connector-Kubernetes-ServiceAccount für seinen Namespace:

    gcloud iam service-accounts add-iam-policy-binding \
        GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --member="serviceAccount:PROJECT_ID.svc.id.goog[cnrm-system/cnrm-controller-manager-CC_NAMESPACE]" \
        --role="roles/iam.workloadIdentityUser"
    

    Ersetzen Sie Folgendes:

    • GSA_NAME: der Name des IAM-Dienstkontos, das Config Connector für den Namespace verwendet.
    • PROJECT_ID: die ID des Projekts, das Ihren Cluster und das IAM-Dienstkonto enthält.
    • CC_NAMESPACE: der Namespace, aus dem Config Connector Ressourcen verwaltet.

    Weisen Sie die Rolle roles/iam.workloadIdentityUser nicht einer Hauptkontogruppe zu, z. B. allen Pods im Namespace cnrm-system. Im Namespace-Modus werden die Config Connector-Controller für alle Namespaces in cnrm-system ausgeführt. Mit dieser Art von Bindung kann der Controller jedes Namespace die Identität des IAM-Dienstkontos übernehmen.

Nächste Schritte

Verwenden Sie Secrets, um Informationen sicher an Google Cloud -Ressourcen zu übergeben.