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. À l'aide de 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 de la gestion de l'authentification et des accès.

Avant de commencer

Pour suivre les étapes décrites sur cette page, commencez par installer 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.

  1. Créez un fichier nommé pubsub-topic-service-account.yaml avec le contenu suivant :

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

    Appliquez 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_NAMESPACE par l'espace de noms à partir duquel Config Connector gère les ressources.

  2. Confirmez que pubsub-topic-service-account ne peut pas créer de ressources PubSubTopic en vérifiant que le résultat de la commande suivante contient no :

    kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
  3. Ensuite, créez un ClusterRole qui 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.apiGroups et rules.resources. Pour trouver les valeurs de apiGroups et resources, consultez la documentation de référence sur vos ressources.

    Créez un fichier nommé pubsub-topic-editor-role.yaml avec 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
      - delete
    

    Appliquez pubsub-topic-editor.yaml pour créer le ClusterRole :

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

    Remplacez CC_NAMESPACE par l'espace de noms à partir duquel Config Connector gère les ressources.

  4. Ensuite, créez un objet RoleBinding entre l'objet ClusterRole et votre compte de service. Créez un fichier nommé pubsub-topic-editor-rolebinding.yaml avec 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-editor
    
  5. Appliquez pubsub-topic-editor-rolebinding.yaml à votre cluster.

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

    Remplacez CC_NAMESPACE par l'espace de noms à partir duquel Config Connector gère les ressources.

  6. Confirmez que pubsub-topic-service-account est autorisé à créer des ressources PubSubTopic en vérifiant que le résultat de la commande suivante est yes :

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

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.

  1. Créez un fichier nommé pubsub-topic-sample.yaml avec le contenu suivant :

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

    Appliquer pubsub-topic-sample.yaml avec kubectl :

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

    Remplacez CC_NAMESPACE par l'espace de noms à partir duquel Config Connector gère les ressources.

  2. Créez un fichier nommé iampolicymember.yaml avec le contenu suivant, en remplaçant EMAIL_ADDRESS par 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"
    
  3. Appliquez la fonctioniampolicymember.yaml.

    kubectl apply -f iampolicymember.yaml  --namespace CC_NAMESPACE 

    Remplacez CC_NAMESPACE par l'espace de noms à partir duquel Config Connector gère les ressources.

  4. Confirmez que la stratégie a été appliquée à Google Cloud en exécutant la commande suivante (dans laquelle il faut remplacer PROJECT_ID par l'ID de votre projet) et en recherchant votre adresse e-mail dans le résultat :

    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

Étapes suivantes

Utilisez des secrets pour transmettre des informations en toute sécurité aux ressources Google Cloud.