Configurer une stratégie d'autorisation binaire avec GKE
Ce guide de démarrage rapide explique comment configurer et tester une règle de base dans une stratégie d'autorisation binaire.
Dans ce guide de démarrage rapide, vous allez afficher et configurer la règle par défaut dans la stratégie. La règle par défaut autorise le déploiement de toutes les images. Pour ce faire, déployez une image de conteneur sur un cluster Google Kubernetes Engine (GKE). Vous définissez ensuite la règle par défaut pour interdire le déploiement de toutes les images et toute tentative de déploiement.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Installez
kubectl
.
Créer un cluster avec activation forcée de l'autorisation binaire
Vous allez maintenant créer un cluster GKE avec l'autorisation binaire activée. Il s'agit du cluster dans lequel vous souhaitez exécuter les images de conteneur que vous déployez.
L'autorisation binaire fonctionne avec les clusters Autopilot ou Standard.
Console Google Cloud
Les étapes suivantes permettent de configurer un cluster Autopilot.
Dans la console Google Cloud, accédez à la page Clusters Kubernetes de GKE :
Cliquez sur Créer.
Dans Créer un cluster Autopilot, procédez comme suit :
Dans le champ Nom, saisissez
test-cluster
.Dans le menu Région, sélectionnez
us-central1
.Développez la section Paramètres avancés.
Cliquez sur le lien Sécurité pour afficher le panneau Sécurité.
Dans la section Sécurité, cochez la case Activer l'autorisation binaire.
Sélectionnez Appliquer uniquement.
Cliquez sur Suivant, puis sur Suivant : Vérification et création.
Pour commencer la création du cluster, cliquez sur Créer.
gcloud
Exécutez gcloud container clusters create
avec l'option --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
activée.
gcloud container clusters create \ --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \ --zone us-central1-a \ test-cluster
La création d'un cluster peut prendre plusieurs minutes.
Règle par défaut
Par défaut, votre stratégie d'autorisation binaire est configurée pour autoriser le déploiement de toutes les images de conteneur.
Console Google Cloud
Pour afficher la stratégie par défaut, procédez comme suit :
Accédez à la page Autorisation binaire dans Google Cloud Console.
Accéder à la page "Autorisation binaire"
La console affiche des détails sur la stratégie.
Cliquez sur Modifier la règle.
Dans Project Default Rule (Règle par défaut du projet), l'option Allow All Images (Autoriser toutes les images) est sélectionnée.
gcloud
Pour afficher la stratégie par défaut, exportez le fichier YAML de stratégie comme suit :
gcloud container binauthz policy export
Par défaut, ce fichier comporte les éléments suivants :
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_ALLOW enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
API REST
Pour afficher la stratégie par défaut, récupérez-la au format JSON comme suit :
curl \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
La commande produit le résultat suivant :
{ "name": "projects/PROJECT_ID/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
Tester la règle d'application forcée
Vous pouvez tester la règle d'application en essayant de déployer un exemple d'image de conteneur sur le cluster.
Pour ce guide de démarrage rapide, vous utiliserez l'exemple d'image de conteneur situé dans le chemin gcr.io/google-samples/hello-app
dans Container Registry. Il s'agit d'une image de conteneur publique créée par Google et contenant un exemple d'application "Hello, World!"
console Google Cloud
Pour tester la stratégie, procédez comme suit :
Accédez à la page des Clusters GKE dans la console Google Cloud.
Cliquez sur Déployer.
La console vous invite à saisir des détails sur le déploiement.
Sélectionnez Existing Container Image (Image existante du conteneur).
Saisissez
gcr.io/google-samples/hello-app:1.0
comme chemin d'accès à l'image de conteneur.Cliquez sur Continuer.
Saisissez
hello-server
dans le champ Application name (Nom de l'application).Cliquez sur Déployer.
kubectl
Pour tester la stratégie, procédez comme suit :
Mettez à jour le fichier
kubeconfig
local :gcloud container clusters get-credentials \ --zone us-central1-a \ test-cluster
Cela fournit les identifiants et les informations de point de terminaison requis pour accéder au cluster dans GKE.
Déployez l'image :
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
Maintenant, vérifiez que le déploiement a été autorisé par l'autorisation binaire.
console Google Cloud
Pour vérifier que l'image a été déployée, accédez à la page Charges de travail GKE dans la console Google Cloud.
Le nom d'une charge de travail correspondant au déploiement s'affiche. L'icône verte indique que l'image a été déployée avec succès.
kubectl
Pour vérifier que l'image a été déployée, procédez comme suit :
kubectl get pods
La commande imprime un message semblable à celui ci-dessous, indiquant que le déploiement a bien été effectué :
NAME READY STATUS RESTARTS AGE hello-server-579859fb5b-h2k8s 1/1 Running 0 1m
Veillez à supprimer le déploiement pour pouvoir passer à l'étape suivante :
console Google Cloud
Pour supprimer le déploiement, procédez comme suit :
Revenez à la page Charges de travail GKE dans la console Google Cloud.
Sélectionnez la charge de travail
hello-server
.Cliquez sur Supprimer.
kubectl
Pour supprimer le déploiement, procédez comme suit :
kubectl delete deployment hello-server
Configurer la règle d'application pour interdire toutes les images
Maintenant, modifiez la stratégie pour bloquer le déploiement de toutes les images au lieu de l'autoriser.
console Google Cloud
Pour modifier la stratégie, procédez comme suit :
Revenez à la page Autorisation binaire dans la console Google Cloud.
Cliquez sur Modifier la règle.
Sélectionnez Disallow All Images (Interdire toutes les images).
Cliquez sur Save Policy (Enregistrer la stratégie).
gcloud
Pour modifier la stratégie, procédez comme suit :
Exportez le fichier YAML de stratégie :
gcloud container binauthz policy export > /tmp/policy.yaml
Dans un éditeur de texte, modifiez
evaluationMode
, défini jusqu'alors surALWAYS_ALLOW
, en le remplaçant parALWAYS_DENY
.Le fichier YAML de stratégie doit ressembler à ceci :
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
Importez le fichier YAML de stratégie dans l’autorisation binaire :
gcloud container binauthz policy import /tmp/policy.yaml
API REST
Pour modifier la stratégie, procédez comme suit :
Créez un fichier texte avec la stratégie mise à jour au format JSON :
cat > /tmp/policy.json << EOM { "name": "projects/${PROJECT_ID}/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_DENY", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } } EOM
Envoyez la stratégie mise à jour à l'API REST :
curl -X PUT \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ --data-binary @/tmp/policy.json \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
Tester une nouvelle fois la stratégie
Testez une nouvelle fois la stratégie en déployant un exemple d'image de conteneur sur le cluster. Cette fois, l'autorisation binaire bloque le déploiement de l'image.
console Google Cloud
Déployez l'image :
Accédez à la page des Clusters GKE dans la console Google Cloud.
Cliquez sur Déployer.
La console vous invite à saisir des détails sur le déploiement.
Sélectionnez Existing Container Image (Image existante du conteneur).
Saisissez
gcr.io/google-samples/hello-app:1.0
comme chemin d'accès à l'image de conteneur.Cliquez sur Continuer.
Saisissez
hello-server
dans le champ Application name (Nom de l'application).Cliquez sur Déployer.
kubectl
Déployez l'image :
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
Vous pouvez maintenant vérifier que la stratégie a été bloquée :
console Google Cloud
Pour vérifier que l'image n'a pas été déployée, procédez comme suit :
Revenez à la page Charges de travail GKE dans la console Google Cloud.
Le nom d'une charge de travail associée à l'image de conteneur s'affiche. L'icône rouge indique que l'image n'a pas été déployée.
kubectl
Pour vérifier que l'image n'a pas été déployée, exécutez la commande suivante :
kubectl get pods
La commande imprime le message suivant, qui indique que l'image n'a pas été déployée :
No resources found.
Vous pouvez obtenir plus de détails sur le déploiement avec la commande suivante :
kubectl get event --template \ '{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}{{.message}}{{"\n"}}{{end}}'
Une réponse semblable à celle-ci s'affiche :
FailedCreate: Error creating: pods POD_NAME is forbidden: admission webhook "imagepolicywebhook.image-policy.k8s.io" denied the request: Image IMAGE_NAME denied by Binary Authorization default admission rule. Denied by always_deny admission rule
Dans ce résultat :
- POD_NAME : nom du pod.
- IMAGE_NAME : nom de l'image.
- ATTESTOR_NAME : nom du certificateur.
Effectuer un nettoyage
Pour éviter que les ressources utilisées sur cette page soient facturées sur votre compte Google Cloud, procédez comme suit :
Supprimez le cluster que vous avez créé dans GKE :
Console
Pour supprimer le cluster, procédez comme suit :
Accédez à la page des Clusters GKE dans la console Google Cloud.
Sélectionnez le cluster
test-cluster
, puis cliquez sur Supprimer.
gcloud
Pour supprimer le cluster, procédez comme suit :
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster
Étape suivante
- Utilisez le certificateur
built-by-cloud-build
pour déployer uniquement des images créées par Cloud Build (bêta). - Pour accéder à un tutoriel de bout en bout sur les exigences d'attestation, consultez les pages suivantes :
- Consultez nos ressources sur le DevOps et découvrez le programme de recherche DevOps Research and Assessment (DORA).