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 nutzen. 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 mithilfe von Cloud Identity and Access Management sichern.

Hinweis

Installieren Sie zuerst Config Connector in Ihrem Cluster, um die Schritte auf dieser Seite abzuschließen.

Zugang zur Steuerebene 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 <var>CC_NAMESPACE</var>
kubectl delete -f pubsub-topic-editor-role.yaml --namespace <var>CC_NAMESPACE</var>
kubectl delete -f pubsub-topic-service-account.yaml --namespace <var>CC_NAMESPACE</var>

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 und ersetzen Sie 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. Bestätigen Sie, dass die Richtlinie auf Google Cloud angewendet wurde, indem Sie diesen Befehl ausführen, in der Ausgabe nach Ihrer E-Mail-Adresse suchen und PROJECT_ID durch Ihre Projekt-ID ersetzen:

    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 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

Nächste Schritte

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