Mettre à jour une stratégie d'autorisation binaire

Ce document explique comment exclure les images dans les stratégies d'autorisation binaire.

Dans ce document, vous mettez à jour la stratégie pour exclure les images de conteneurs d'Artifact Registry de la mise en œuvre de l'autorisation binaire, et définir la règle par défaut pour interdire le déploiement de tous les autres conteneurs.

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. Si vous n'utilisez pas Cloud Shell, installez kubectl.
  15. Créer un cluster avec l'autorisation binaire activée

    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.

    Console Google Cloud

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

      Accéder à la page GKE

      La console affiche une liste des clusters GKE dans votre projet Google Cloud .

    2. Cliquez sur Créer un cluster.

    3. Entrez test-cluster dans le champ Name (Nom).

      Champ Nom dans le modèle de cluster standard

    4. Sélectionnez Zonal dans les options Location type (Type d'emplacement).

    5. Sélectionnez us-central1-a dans la liste déroulante Zone.

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

    7. Sur le panneau Security (Sécurité), sélectionnez Enable Binary Authorization (Activer l'autorisation binaire).

      Activer l'option d'autorisation binaire

    8. Sélectionnez Appliquer uniquement.

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

    Afficher la stratégie 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 en procédant 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/<var>PROJECT_ID</var>/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"
    

    L'API REST renvoie les éléments suivants :

    {
      "name": "projects/PROJECT_ID/policy",
      "globalPolicyEvaluationMode": "ENABLE",
      "defaultAdmissionRule": {
        "evaluationMode": "ALWAYS_ALLOW",
        "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
      }
    }
    

    Autoriser uniquement les images exclues

    Cette section explique comment modifier la stratégie pour exclure des images et interdire le déploiement de toutes les autres images.

    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. Sous Images exclues des règles de déploiement, développez Chemins d'accès des images.

    5. Cliquez sur Ajouter des chemins d'accès de l'image.

      Artifact Registry

      Dans Nouveau chemin d'accès de l'image, collez le chemin d'accès suivant à partir d'un dépôt Artifact Registry :

      us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      
    6. Cliquez sur OK pour enregistrer le chemin d'accès de l'image.

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

    gcloud

    Pour modifier la stratégie de façon à autoriser les exemples d'images d'Artifact Registry, 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, et ajoutez les images exclues à admissionWhitelistPatterns.

      Pour exclure les exemples d'images suivants d'Artifact Registry, modifiez le fichier YAML de stratégie comme suit :

      admissionWhitelistPatterns:
      - namePattern: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      globalPolicyEvaluationMode: ENABLE
      defaultAdmissionRule:
        evaluationMode: ALWAYS_DENY
        enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      name: projects/<var>PROJECT_ID</var>/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",
        "admissionWhitelistPatterns": [
          {
            "namePattern": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
          }
        ],
        "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 la stratégie

    Pour tester la stratégie en déployant l'image que vous avez ajoutée à la liste d'autorisation Exempt image, procédez comme suit :

    1. Déployez une image exclue sur le cluster.

      Console Google Cloud

      Déployez une image exclue :

      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 le chemin d'accès de l'image de conteneur.

        Artifact Registry

        Pour déployer une image à partir d'Artifact Registry, saisissez les éléments suivants :

        us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        
      5. Cliquez sur Continuer.

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

      7. Cliquez sur Déployer.

      kubectl

      Artifact Registry

      Déployez l'image depuis Artifact Registry :

      kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
      
    2. Vérifiez que l'image a été autorisée à se déployer :

      Console Google Cloud

      Pour vérifier que l'image a été déployée, procédez comme suit :

      1. Accédez à la page GKE

      Accéder à la page GKE

      1. Accédez à la page "Charges de travail".

      La charge de travail hello-server s'affiche avec une icône verte, indiquant qu'elle est en cours d'exécution.

      kubectl

      Pour vérifier que l'image a été autorisée à se déployer, saisissez la commande suivante :

      kubectl get pods
      

      L'image s'exécute.

    3. Supprimez le pod.

      Console Google Cloud

      Sur la page Charges de travail GKE :

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

      2. Cliquez sur Supprimer.

      3. Lorsque vous êtes invité à supprimer des ressources, cliquez sur Supprimer.

      kubectl

      kubectl delete pod hello-server
      

    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, saisissez la commande suivante :

    gcloud container clusters delete \
        --zone=us-central1-a \
        test-cluster
    

    Étapes suivantes