arrow_back

Mettre en œuvre le contrôle des accès basé sur les rôles avec Google Kubernetes Engine

Accédez à plus de 700 ateliers et cours

Mettre en œuvre le contrôle des accès basé sur les rôles avec Google Kubernetes Engine

Atelier 1 heure universal_currency_alt 5 crédits show_chart Débutant
info Cet atelier peut intégrer des outils d'IA pour vous accompagner dans votre apprentissage.
Accédez à plus de 700 ateliers et cours

Présentation

Dans cet atelier, vous allez créer des espaces de noms dans un cluster GKE. Vous utiliserez ensuite le contrôle des accès basé sur les rôles pour autoriser un non-administrateur à utiliser des pods dans un espace de noms spécifique.

Objectifs

Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :

  • Créer des espaces de noms afin de contrôler l'accès des utilisateurs aux ressources du cluster
  • Créer des rôles et des liaisons de rôles pour contrôler les accès dans un espace de noms
Remarque : Dans cet atelier, vous disposez de deux noms d'utilisateur, indiqués dans la boîte de dialogue "Détails de connexion".

Nous appellerons ces comptes Username 1 et Username 2.

Tâche 1 : Créer des espaces de noms pour que les utilisateurs puissent accéder aux ressources du cluster

Se connecter à la console Google Cloud en tant que premier utilisateur

  1. Ouvrez une fenêtre de navigation privée et connectez-vous à la console Google Cloud comme d'habitude avec les identifiants de Username 1 fournis dans Qwiklabs. Remarque : Le même mot de passe est associé aux deux noms d'utilisateur.
  2. Dans la barre de titre de la console Google Cloud, cliquez sur Activer Cloud Shell (Icône Activer Cloud Shell).
  3. Lorsque vous y êtes invité, cliquez sur Continuer.

Vous pouvez directement passer à la tâche suivante sans attendre le démarrage de Cloud Shell.

Remarque : Le compte Username 2 peut actuellement accéder au projet, mais uniquement avec le rôle Lecteur. Toutes les ressources du projet lui sont donc accessibles, mais en lecture seule.

Se connecter à la console Google Cloud en tant que deuxième utilisateur

  1. Ouvrez un nouvel onglet dans la fenêtre de navigation privée.
  2. Accédez à console.cloud.google.com.
  3. Cliquez sur l'icône d'utilisateur située en haut à droite de l'écran, puis sur Ajouter un compte.
  4. Connectez-vous à la console Google Cloud avec le compte Username 2 fourni. Rappelez-vous que le même mot de passe est associé aux deux noms d'utilisateur.
  5. Dans la barre de titre de la console Google Cloud, cliquez sur Activer Cloud Shell (Icône Activer Cloud Shell).
  6. Lorsque vous y êtes invité, cliquez sur Continuer.

Vous pouvez directement passer à la tâche suivante sans attendre le démarrage de Cloud Shell.

Se connecter au cluster GKE de l'atelier

  1. Revenez à l'onglet de la console Google Cloud du compte Username 1.
Remarque : Assurez-vous que vous vous trouvez bien dans l'onglet Username 1 de la console Google Cloud.
  1. Dans Cloud Shell, définissez les variables d'environnement correspondant à la zone et au nom du cluster en saisissant la commande suivante :
export my_zone={{{ project_0.default_zone | ZONE }}} export my_cluster=standard-cluster-1
  1. Configurez la complétion par tabulation dans l'outil de ligne de commande kubectl :
source <(kubectl completion bash)
  1. Configurez l'accès à votre cluster pour kubectl :
gcloud container clusters get-credentials $my_cluster --zone $my_zone
  1. Dans Cloud Shell, saisissez la commande suivante pour cloner le dépôt de l'atelier dans l'environnement Cloud Shell de l'atelier :
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
  1. Créez un lien symbolique qui servira de raccourci vers le répertoire de travail :
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
  1. Passez au répertoire qui contient les exemples de fichiers de l'atelier :
cd ~/ak8s/RBAC/

Créer un espace de noms

Nous avons généré pour vous un fichier manifeste nommé my-namespace.yaml, que vous utiliserez pour créer un espace de noms nommé production.

apiVersion: v1 kind: Namespace metadata: name: production
  1. Saisissez la commande suivante pour lister les espaces de noms actuellement dans le cluster :
kubectl get namespaces

Résultat :

NAME STATUS AGE default Active 17m kube-node-lease Active 17m kube-public Active 17m kube-system Active 17m
  1. Exécutez la commande suivante dans Cloud Shell pour créer l'espace de noms :
kubectl create -f ./my-namespace.yaml
  1. Vérifiez que votre espace de noms a bien été créé à l'aide de la commande suivante :
kubectl get namespaces

Résultat :

NAME STATUS AGE default Active 6m kube-node-lease Active 6m kube-public Active 6m kube-system Active 6m production Active 4s

Votre nouvel espace de noms apparaît en bas de la liste.

  1. Pour afficher les informations concernant un espace de noms existant, exécutez la commande suivante :
kubectl describe namespaces production

Résultat :

Name: production Labels: Annotations: Status: Active Resource Quotas Name: gke-resource-quotas Resource Used Hard -------- --- --- count/ingresses.extensions 0 100 count/jobs.batch 0 5k pods 0 1500 services 0 500 No LimitRange resource.

Créer une ressource dans un espace de noms

Si vous ne spécifiez pas l'espace de noms d'un pod, celui-ci utilisera l'espace de noms par défaut. Dans cette tâche, vous allez spécifier l'emplacement de votre nouvel espace de noms au moment où vous créerez un pod. Nous avons généré pour vous un fichier manifeste simple nommé my-pod.yaml. Il va vous servir à créer un pod avec un conteneur nginx.

apiVersion: v1 kind: Pod metadata: name: nginx labels: name: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
  1. Dans Cloud Shell, exécutez la commande suivante pour créer la ressource dans l'espace de noms nommé production :
kubectl apply -f ./my-pod.yaml --namespace=production

Vous pouvez également spécifier l'espace de noms dans le fichier yaml. Pour ce faire, il convient d'ajouter le champ namespace: production dans la section "metadata:".

Exemple :

apiVersion: v1 kind: Pod metadata: name: nginx labels: name: nginx namespace: production spec: containers: - name: nginx image: nginx ports: - containerPort: 80
  1. Saisissez la commande suivante pour afficher votre pod :
kubectl get pods

Résultat :

No resources found in default namespace.

Votre pod ne s'affiche pas, car kubectl a recherché l'espace de noms par défaut au lieu de votre nouvel espace de noms.

  1. Exécutez de nouveau la commande, mais cette fois, indiquez le nom du nouvel espace de noms :
kubectl get pods --namespace=production

Résultat :

NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 20s

Le pod que vous venez de créer doit maintenant s'afficher.

Cliquez sur "Check my progress" (Vérifier ma progression) pour vérifier l'objectif.

Créer un espace de noms et un pod

Tâche 2 : Créer un rôle et une liaison de rôle

Dans cette tâche, vous allez créer un exemple de rôle personnalisé, puis une liaison de rôle qui accorde le rôle d'éditeur au compte Username 2 dans l'espace de noms "production".

Ce rôle est défini dans le fichier pod-reader-role.yaml qui vous a été fourni. Ce fichier manifeste définit le rôle pod-reader qui peut créer, récupérer, lister et consulter des objets Pod dans l'espace de noms production. Sachez que ce rôle ne permet pas de supprimer des pods.

kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: production name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["create", "get", "list", "watch"]

Créer un rôle personnalisé

Pour créer un rôle, votre compte doit disposer des autorisations qu'il octroie à ce rôle. Lorsque vous êtes administrateur du cluster, il suffit de créer la liaison de rôle ci-dessous pour attribuer le rôle "cluster-admin" à votre propre compte utilisateur.

  1. Pour accorder les droits d'administrateur de cluster au compte Username 1, exécutez la commande suivante en remplaçant [USERNAME_1_EMAIL] par l'adresse e-mail du compte Username 1 :
kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user [USERNAME_1_EMAIL]

Exemple de résultat :

kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user gcpstaging28307_student@qwiklabs.net
  1. Dans Cloud Shell, exécutez la commande suivante pour créer le rôle :
kubectl apply -f pod-reader-role.yaml
  1. Pour afficher la liste des rôles et vérifier que le rôle a bien été créé, exécutez la commande suivante :
kubectl get roles --namespace production

Résultat :

NAME AGE pod-reader 3m

Créer une liaison de rôle

Le rôle permet d'accorder des privilèges, mais n'a aucune utilité s'il n'est pas associé à d'autres éléments. Il doit être lié à un utilisateur et à un objet à l'aide de RoleBinding.

Le fichier manifeste username2-editor-binding.yaml crée une liaison de rôle appelée username2-editor, qui est associée au rôle pod-reader créé plus haut pour le deuxième utilisateur de l'atelier. Ce rôle permet de créer et d'afficher des pods, mais pas d'en supprimer.

kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: username2-editor namespace: production subjects: - kind: User name: [USERNAME_2_EMAIL] apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io

Avant d'utiliser ce fichier, vous devez remplacer l'espace réservé [USERNAME_2_EMAIL] qu'il contient par l'adresse e-mail du compte Username 2.

  1. Dans Cloud Shell, créez une variable d'environnement contenant l'adresse e-mail complète du compte Username 2.
export USER2=[USERNAME_2_EMAIL]

Exemple de résultat :

export USER2=gcpstaginguser68_student@qwiklabs.net
  1. Dans Cloud Shell, utilisez la commande sed pour remplacer l'espace réservé dans le fichier par la valeur de la variable d'environnement.
sed -i "s/\[USERNAME_2_EMAIL\]/${USER2}/" username2-editor-binding.yaml
  1. Dans Cloud Shell, exécutez la commande suivante pour vérifier que la modification a bien été appliquée :
cat username2-editor-binding.yaml

La section "subjects" doit maintenant ressembler à ce qui suit.

Exemple de résultat :

subjects: - kind: User name: gcpstaginguser68_student@qwiklabs.net apiGroup: rbac.authorization.k8s.io

Vous appliquerez cette liaison de rôle plus tard.

Tester l'accès

Vous allez maintenant vérifier si Username 2 peut créer un pod dans l'espace de noms "production" à l'aide du fichier manifeste production-pod.yaml. Ce fichier manifeste déploie un pod simple avec un seul conteneur nginx.

apiVersion: v1 kind: Pod metadata: name: production-pod labels: name: production-pod namespace: production spec: containers: - name: production-pod image: nginx ports: - containerPort: 8080

Comme il s'agit d'un compte utilisateur distinct, vous devez de nouveau préparer l'environnement Cloud Shell afin d'avoir accès au cluster et aux exemples de fichiers dans le dépôt de l'atelier.

  1. Revenez à l'onglet de la console Google Cloud du compte Username 2.
Remarque : Assurez-vous que vous vous trouvez bien dans l'onglet Username 2 de la console Google Cloud.
  1. Dans Cloud Shell, pour le compte Username 2, définissez les variables d'environnement correspondant à la zone et au nom du cluster en saisissant la commande suivante :
export my_zone={{{ project_0.default_zone | ZONE }}} export my_cluster=standard-cluster-1
  1. Configurez la complétion par tabulation dans l'outil de ligne de commande kubectl :
source <(kubectl completion bash)
  1. Configurez l'accès à votre cluster pour kubectl :
gcloud container clusters get-credentials $my_cluster --zone $my_zone
  1. Dans Cloud Shell, saisissez la commande suivante pour cloner le dépôt de l'atelier dans l'environnement Cloud Shell de l'atelier :
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
  1. Créez un lien symbolique qui servira de raccourci vers le répertoire de travail :
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
  1. Passez au répertoire qui contient les exemples de fichiers de l'atelier :
cd ~/ak8s/RBAC/
  1. Vérifiez que le compte Username 2 peut afficher l'espace de noms "production" en saisissant la commande suivante :
kubectl get namespaces

Résultat :

NAME STATUS AGE default Active 29m kube-node-lease Active 29m kube-public Active 29m kube-system Active 29m production Active 23m

L'espace de noms "production" apparaît bien en bas de la liste. Nous pouvons donc continuer.

  1. Dans Cloud Shell, exécutez la commande suivante pour créer la ressource dans l'espace de noms nommé "production" :
kubectl apply -f ./production-pod.yaml

L'opération échoue, car le compte Username 2 ne dispose pas des autorisations nécessaires pour créer des pods. À ce stade, le compte Username 2 (Nom d'utilisateur 2) ne dispose que des droits d'affichage qu'il avait au début de l'atelier, car vous ne lui avez pas encore associé d'autres rôles. C'est précisément ce que nous allons faire maintenant.

  1. Revenez à l'onglet de la console Google Cloud du compte Username 1.
Remarque : Assurez-vous que vous vous trouvez bien dans l'onglet Username 1 de la console Google Cloud.
  1. Dans le Cloud Shell du compte Username 1, exécutez la commande suivante pour créer une liaison de rôle accordant au compte Username 2 le rôle pod-reader, incluant l'autorisation de créer des pods dans l'espace de noms production :
kubectl apply -f username2-editor-binding.yaml
  1. Dans le Cloud Shell du compte Username 1, exécutez la commande suivante pour rechercher la nouvelle liaison de rôle :
kubectl get rolebinding

Résultat :

No resources found in default namespace.

La liaison de rôle n'apparaît pas, car kubectl affiche l'espace de noms par défaut.

  1. Dans le Cloud Shell du compte Username 1, exécutez la commande suivante en spécifiant l'espace de noms "production" :
kubectl get rolebinding --namespace production

Résultat :

NAME AGE username2-editor 23s
  1. Revenez à l'onglet de la console Google Cloud du compte Username 2.
Remarque : Assurez-vous que vous vous trouvez bien dans l'onglet Username 2 de la console Google Cloud.
  1. Dans le Cloud Shell du compte Username 2, exécutez la commande suivante pour créer la ressource dans l'espace de noms "production" :
kubectl apply -f ./production-pod.yaml

L'opération doit maintenant réussir, car le compte Username 2 dispose maintenant des autorisations nécessaires pour créer des pods dans l'espace de noms production.

  1. Vérifiez que le pod a bien été déployé dans l'espace de noms "production" en saisissant la commande suivante :
kubectl get pods --namespace production

Résultat :

NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 16m production-pod 1/1 Running 0 20s

Le pod que vous venez de créer doit maintenant s'afficher.

  1. Vérifiez que le compte Username 2 ne dispose que des autorisations RBAC associées au rôle "pod-reader" en essayant de supprimer le pod "production-pod".
kubectl delete pod production-pod --namespace production

L'opération échoue, car le compte Username 2 ne dispose pas des autorisations nécessaires pour supprimer des pods.

Cliquez sur "Check my progress" (Vérifier ma progression) pour vérifier l'objectif.

Role et RoleBinding

Terminer l'atelier

Une fois l'atelier terminé, cliquez sur Terminer l'atelier. Google Cloud Skills Boost supprime les ressources que vous avez utilisées, puis efface le compte.

Si vous le souhaitez, vous pouvez noter l'atelier. Sélectionnez un nombre d'étoiles, saisissez un commentaire, puis cliquez sur Envoyer.

Le nombre d'étoiles correspond à votre degré de satisfaction :

  • 1 étoile = très insatisfait(e)
  • 2 étoiles = insatisfait(e)
  • 3 étoiles = ni insatisfait(e), ni satisfait(e)
  • 4 étoiles = satisfait(e)
  • 5 étoiles = très satisfait(e)

Si vous ne souhaitez pas donner votre avis, vous pouvez fermer la boîte de dialogue.

Pour soumettre des commentaires, suggestions ou corrections, veuillez accéder à l'onglet Assistance.

Copyright 2020 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.

Avant de commencer

  1. Les ateliers créent un projet Google Cloud et des ressources pour une durée déterminée.
  2. Les ateliers doivent être effectués dans le délai imparti et ne peuvent pas être mis en pause. Si vous quittez l'atelier, vous devrez le recommencer depuis le début.
  3. En haut à gauche de l'écran, cliquez sur Démarrer l'atelier pour commencer.

Utilisez la navigation privée

  1. Copiez le nom d'utilisateur et le mot de passe fournis pour l'atelier
  2. Cliquez sur Ouvrir la console en navigation privée

Connectez-vous à la console

  1. Connectez-vous à l'aide des identifiants qui vous ont été attribués pour l'atelier. L'utilisation d'autres identifiants peut entraîner des erreurs ou des frais.
  2. Acceptez les conditions d'utilisation et ignorez la page concernant les ressources de récupération des données.
  3. Ne cliquez pas sur Terminer l'atelier, à moins que vous n'ayez terminé l'atelier ou que vous ne vouliez le recommencer, car cela effacera votre travail et supprimera le projet.

Ce contenu n'est pas disponible pour le moment

Nous vous préviendrons par e-mail lorsqu'il sera disponible

Parfait !

Nous vous contacterons par e-mail s'il devient disponible

Un atelier à la fois

Confirmez pour mettre fin à tous les ateliers existants et démarrer celui-ci

Utilisez la navigation privée pour effectuer l'atelier

Ouvrez une fenêtre de navigateur en mode navigation privée pour effectuer cet atelier. Vous éviterez ainsi les conflits entre votre compte personnel et le compte temporaire de participant, qui pourraient entraîner des frais supplémentaires facturés sur votre compte personnel.