Sécuriser l'accès aux ressources avec IAM
Les utilisateurs et les comptes de service Kubernetes ont besoin d'autorisations pour gérer les ressources de Config Connector. Avec Config Connector, le plan de contrôle de votre projet peut être géré par des identités qui utilisent le contrôle des accès basé sur les rôles (RBAC) de Kubernetes. Vous pouvez également faire référence aux stratégies IAM (Identity and Access Management).
Les ressources pouvant référencer IAMPolicy et IAMPolicyMember sont répertoriées dans la documentation de référence sur les ressources. Ces ressources ont la propriété intitulée "Peut être référencé par IAMPolicy/IAMPolicyMember".
Cet article explique comment sécuriser l'accès aux ressources Google Cloud à l'aide d'Identity and Access Management.
Avant de commencer
Installez Config Connector sur votre cluster.
Sécuriser l'accès au plan de contrôle avec RBAC
Dans cet exemple, vous allez créer un compte de service et lui accorder des autorisations pour gérer un PubSubTopic. Ce compte de service ne peut pas gérer d'autres types de ressources de Config Connector.
Créez un fichier nommé
pubsub-topic-service-account.yamlavec le contenu suivant :apiVersion: v1 kind: ServiceAccount metadata: name: pubsub-topic-service-account namespace: defaultAppliquez cela pour créer le compte de service
pubsub-topic-service-account:kubectl apply -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE
Remplacez
CC_NAMESPACEpar l'espace de noms à partir duquel Config Connector gère les ressources.Confirmez que
pubsub-topic-service-accountne peut pas créer de ressourcesPubSubTopicen vérifiant que le résultat de la commande suivante contientno:kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
Ensuite, créez un
ClusterRolequi permet la création de sujets Pub/Sub.Le ClusterRole ne peut gérer que les ressources dont les valeurs sont spécifiées dans
rules.apiGroupsetrules.resources. Pour trouver les valeurs deapiGroupsetresources, consultez la documentation de référence sur vos ressources.Créez un fichier nommé
pubsub-topic-editor-role.yamlavec le contenu suivant :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 - deleteAppliquez
pubsub-topic-editor.yamlpour créer leClusterRole:kubectl apply -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
Remplacez
CC_NAMESPACEpar l'espace de noms à partir duquel Config Connector gère les ressources.Ensuite, créez un objet RoleBinding entre l'objet ClusterRole et votre compte de service. Créez un fichier nommé
pubsub-topic-editor-rolebinding.yamlavec le contenu suivant :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-editorAppliquez
pubsub-topic-editor-rolebinding.yamlà votre cluster.kubectl apply -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE
Remplacez
CC_NAMESPACEpar l'espace de noms à partir duquel Config Connector gère les ressources.Confirmez que
pubsub-topic-service-accountest autorisé à créer des ressourcesPubSubTopicen vérifiant que le résultat de la commande suivante estyes:kubectl auth can-i get pubsubtopics \ --as=system:serviceaccount:default:pubsub-topic-service-account
Nettoyer
Utilisez kubectl delete pour supprimer le compte de service, le rôle IAM et Rolebinding.
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
Remplacez CC_NAMESPACE par l'espace de noms à partir duquel Config Connector gère les ressources.
Sécuriser le plan de données avec les stratégies IAM
Dans cet exemple, vous utilisez les autorisations accordées précédemment pour créer un PubSubTopic et limiter l'accès à celui-ci avec une ressource IAMPolicyMember.
Créez un fichier nommé
pubsub-topic-sample.yamlavec le contenu suivant :apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: name: pubsubtopic-sampleAppliquer
pubsub-topic-sample.yamlaveckubectl:kubectl apply -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
Remplacez
CC_NAMESPACEpar l'espace de noms à partir duquel Config Connector gère les ressources.Créez un fichier nommé
iampolicymember.yamlavec le contenu suivant, en remplaçantEMAIL_ADDRESSpar l'adresse e-mail de votre compte Google Cloud :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"Appliquez la fonction
iampolicymember.yaml.kubectl apply -f iampolicymember.yaml --namespace CC_NAMESPACE
Remplacez
CC_NAMESPACEpar l'espace de noms à partir duquel Config Connector gère les ressources.Vérifiez que la stratégie a été appliquée à Google Cloud en exécutant cette commande et en recherchant votre adresse e-mail dans le résultat, en remplaçant
PROJECT_IDpar l'ID de votre projet :gcloud beta pubsub topics get-iam-policy projects/PROJECT_ID/topics/pubsubtopic-sample
L'accès à vos sujets Pub/Sub est désormais protégé par un IAMPolicyMember.
Nettoyer
Utilisez kubectl delete pour supprimer le sujet Pub/Sub et IAMPolicyMember de votre projet Google Cloud .
kubectl delete -f iampolicymember.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
Bonnes pratiques de sécurité pour l'isolation mutualisée
Pour empêcher l'élévation non autorisée des privilèges et appliquer l'isolation des locataires, suivez ces bonnes pratiques :
Appliquer le mode avec espace de noms : évitez le mode cluster dans les environnements mutualisés. En mode cluster, tous les espaces de noms partagent un seul compte de service IAM. Tout utilisateur pouvant créer des ressources Config Connector dans n'importe quel espace de noms peut agir avec les autorisations IAM complètes de ce compte de service.
Limiter le RBAC pour les ressources IAM : limitez les autorisations de création et de modification pour les ressources
IAMPolicy,IAMPartialPolicyetIAMPolicyMemberà l'aide du contrôle des accès basé sur les rôles (RBAC) de Kubernetes. Si les développeurs disposent d'un accès en écriture étendu à ces ressources, ils peuvent modifier les liaisons IAM Google Cloud .Définissez le champ d'application des liaisons IAM pour la fédération d'identité de charge de travail pour GKE : configurez ces liaisons strictement pour les comptes de service Kubernetes désignés dans des espaces de noms spécifiques. En mode avec espace de noms, associez chaque compte de service IAM uniquement au compte de service Kubernetes Config Connector de son espace de noms :
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"Remplacez les éléments suivants :
GSA_NAME: nom du compte de service IAM que Config Connector utilise pour l'espace de noms.PROJECT_ID: ID du projet contenant votre cluster et le compte de service IAM.CC_NAMESPACE: espace de noms à partir duquel Config Connector gère les ressources.
N'attribuez pas le rôle
roles/iam.workloadIdentityUserà un ensemble de comptes principaux, tel que tous les pods de l'espace de nomscnrm-system. En mode espace de noms, les contrôleurs Config Connector de tous les espaces de noms s'exécutent danscnrm-system. Ce type de liaison permet donc au contrôleur de chaque espace de noms d'emprunter l'identité du compte de service IAM.
Étapes suivantes
Utilisez des secrets pour transmettre des informations de manière sécurisée aux ressources Google Cloud .