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.
Erstellen Sie eine Datei mit dem Namen
pubsub-topic-service-account.yamlund folgendem Inhalt:apiVersion: v1 kind: ServiceAccount metadata: name: pubsub-topic-service-account namespace: defaultWenden Sie dies an, um das Dienstkonto
pubsub-topic-service-accountzu erstellen:kubectl apply -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE
Ersetzen Sie
CC_NAMESPACEdurch den Namespace, von dem aus Config Connector Ressourcen verwaltet.Bestätigen Sie, dass
pubsub-topic-service-accountkeinePubSubTopic-Ressourcen erstellen kann, indem Sie prüfen, ob die Ausgabe des folgenden Befehlsnoenthält:kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
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.apiGroupsundrules.resourcesangegeben sind. Informationen zum Ermitteln von Werten fürapiGroupsundresourcesfinden Sie in der Referenz der Config Connector-Ressourcen.Erstellen Sie eine Datei mit dem Namen
pubsub-topic-editor-role.yamlund 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 - deleteWenden Sie
pubsub-topic-editor.yamlan, umClusterRolezu erstellen:kubectl apply -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
Ersetzen Sie
CC_NAMESPACEdurch den Namespace, von dem aus Config Connector Ressourcen verwaltet.Erstellen Sie als Nächstes ein RoleBinding zwischen ClusterRole und Ihrem Dienstkonto. Erstellen Sie eine Datei mit dem Namen
pubsub-topic-editor-rolebinding.yamlund 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-editorWenden Sie
pubsub-topic-editor-rolebinding.yamlauf Ihren Cluster an:kubectl apply -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE
Ersetzen Sie
CC_NAMESPACEdurch den Namespace, von dem aus Config Connector Ressourcen verwaltet.Bestätigen Sie, dass
pubsub-topic-service-accountzum Erstellen vonPubSubTopic-Ressourcen berechtigt ist, indem Sie bestätigen, dass die Ausgabe des folgenden Befehlsyeslautet: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.
Erstellen Sie eine Datei mit dem Namen
pubsub-topic-sample.yamlund dem folgendem Inhalt:apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: name: pubsubtopic-sampleWenden Sie
pubsub-topic-sample.yamlmitkubectlan:kubectl apply -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
Ersetzen Sie
CC_NAMESPACEdurch den Namespace, von dem aus Config Connector Ressourcen verwaltet.Erstellen Sie eine Datei mit dem Namen
iampolicymember.yamlund dem folgenden Inhalt. Ersetzen Sie dabeiEMAIL_ADDRESSdurch 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"Wenden Sie
iampolicymember.yamlan.kubectl apply -f iampolicymember.yaml --namespace CC_NAMESPACE
Ersetzen Sie
CC_NAMESPACEdurch den Namespace, von dem aus Config Connector Ressourcen verwaltet.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_IDdurch 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- undIAMPolicyMember-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.workloadIdentityUsernicht einer Hauptkontogruppe zu, z. B. allen Pods im Namespacecnrm-system. Im Namespace-Modus werden die Config Connector-Controller für alle Namespaces incnrm-systemausgefü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.