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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Binary Authorization APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  7. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry, Binary Authorization APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  13. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  14. Installez kubectl.
  15. 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.

    1. Dans la console Google Cloud , accédez à la page Clusters Kubernetes de GKE :

      Accéder à la page GKE

    2. Cliquez sur Créer.

    3. Dans Créer un cluster Autopilot, procédez comme suit :

      1. Dans le champ Nom, saisissez test-cluster.

      2. Dans le menu Région, sélectionnez us-central1.

      3. Développez la section Paramètres avancés.

      4. Cliquez sur le lien Sécurité pour afficher le panneau Sécurité.

      5. Dans la section Sécurité, cochez la case Activer l'autorisation binaire.

      6. Sélectionnez Appliquer uniquement.

      7. Cliquez sur Suivant, puis sur Suivant : Vérification et création.

      8. 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 :

    1. Accédez à la page Autorisation binaire dans la console Google Cloud .

      Accéder à la page "Autorisation binaire"

      La console affiche des détails sur la stratégie.

    2. Cliquez sur Modifier la règle.

    3. 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 us-docker.pkg.dev/google-samples/containers/gke/hello-app dans Artifact 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 :

    1. Accédez à la page Clusters GKE dans la consoleGoogle Cloud .

      Accéder à la page GKE

    2. Cliquez sur Déployer.

      La console vous invite à saisir des détails sur le déploiement.

    3. Sélectionnez Existing Container Image (Image existante du conteneur).

    4. Saisissez us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 comme chemin d'accès à l'image de conteneur.

    5. Cliquez sur Continuer.

    6. Saisissez hello-server dans le champ Application name (Nom de l'application).

    7. Cliquez sur Déployer.

    kubectl

    Pour tester la stratégie, procédez comme suit :

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

    2. Déployez l'image :

      kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/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 .

    Accéder à la page GKE

    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 :

    1. Revenez à la page Charges de travail GKE dans la consoleGoogle Cloud .

      Accéder à la page GKE

    2. Sélectionnez la charge de travail hello-server.

    3. 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 :

    1. Revenez à la page Autorisation binaire dans la console Google Cloud .

      Accéder à la page "Autorisation binaire"

    2. Cliquez sur Modifier la règle.

    3. Sélectionnez Disallow All Images (Interdire toutes les images).

    4. Cliquez sur Save Policy (Enregistrer la stratégie).

    gcloud

    Pour modifier la stratégie, procédez comme suit :

    1. Exportez le fichier YAML de stratégie :

      gcloud container binauthz policy export  > /tmp/policy.yaml
      
    2. Dans un éditeur de texte, modifiez evaluationMode, défini jusqu'alors sur ALWAYS_ALLOW, en le remplaçant par ALWAYS_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
      
    3. 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 :

    1. 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
      
    2. 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 :

    1. Accédez à la page Clusters GKE dans la consoleGoogle Cloud .

      Accéder à la page GKE

    2. Cliquez sur Déployer.

      La console vous invite à saisir des détails sur le déploiement.

    3. Sélectionnez Existing Container Image (Image existante du conteneur).

    4. Saisissez us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 comme chemin d'accès à l'image de conteneur.

    5. Cliquez sur Continuer.

    6. Saisissez hello-server dans le champ Application name (Nom de l'application).

    7. Cliquez sur Déployer.

    kubectl

    Déployez l'image :

    kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/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 consoleGoogle Cloud .

    Accéder à la page GKE

    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 dans cette démonstration 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 :

    1. Accédez à la page Clusters GKE dans la consoleGoogle Cloud .

      Accéder à la page GKE

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