Démarrage rapide : tout autoriser et tout interdire

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. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Activer les API Artifact Registry, Binary Authorization.

    Activer les API

  5. Installez et initialisez le SDK Cloud.
  6. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  7. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  8. Activer les API Artifact Registry, Binary Authorization.

    Activer les API

  9. Installez et initialisez le SDK Cloud.
  10. Installez kubectl.

Créer un cluster avec l'autorisation binaire activée

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.

Google Cloud Console

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

    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. Dans la section Sécurité, cochez la case Activer l'autorisation binaire.

    Activer l'option d'autorisation binaire

  8. Cliquez sur Create (Créer).

gcloud

Exécutez gcloud container clusters create avec l'option --enable-binauthz activée.

gcloud container clusters create \
    --enable-binauthz \
    --zone us-central1-a \
    test-cluster

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.

Cloud Console

Pour afficher la stratégie par défaut, procédez comme suit :

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

    Capture d'écran de l'onglet Policy (Règles) affichant la règle par défaut

  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.

    Capture d'écran de l'option permettant de choisir un type de règle par défaut

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 :

admissionWhitelistPatterns:
- namePattern: gcr.io/google_containers/*
- namePattern: gcr.io/google-containers/*
- namePattern: k8s.gcr.io/*
- namePattern: gke.gcr.io/*
- namePattern: gcr.io/stackdriver-agents/*
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"

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

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "gcr.io/google_containers/*"
    },
    {
      "namePattern": "gcr.io/google-containers/*"
    },
    {
      "namePattern": "k8s.gcr.io/*"
    },
    {
      "namePattern": "gke.gcr.io/*"
    },
    {
      "namePattern": "gcr.io/stackdriver-agents/*"
    }
  ],
  "globalPolicyEvaluationMode": "ENABLE",
  "defaultAdmissionRule": {
    "evaluationMode": "ALWAYS_ALLOW",
    "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
  }
}

Tester la stratégie

Vous pouvez tester la stratégie 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!"

Cloud Console

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

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

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

    Capture d'écran de la page "Créer un déploiement"

  4. Saisissez gcr.io/google-samples/hello-app:1.0 comme chemin d'accès à l'image de conteneur.

  5. Cliquez sur Continue (Continuer).

    Capture d'écran de la page "Configurer le déploiement"

  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 gcr.io/google-samples/hello-app:1.0 --port 8080
    

Maintenant, vérifiez que le déploiement a été autorisé par l'autorisation binaire.

Cloud Console

Pour vérifier que l'image a été déployée, accédez à la page Charges de travail GKE dans Cloud Console.

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.

Capture d'écran d'un message indiquant la réussite d'un déploiement

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 :

Cloud Console

Pour supprimer le déploiement, procédez comme suit :

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

    Accéder à la page GKE

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

  3. Cliquez sur Supprimer.

kubectl

Pour supprimer le déploiement, procédez comme suit :

kubectl delete deployment hello-server

Configurer la stratégie pour interdire toutes les images

Maintenant, modifiez la stratégie pour bloquer le déploiement de toutes les images au lieu de l'autoriser.

Cloud Console

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

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

    Accéder à la page "Autorisation binaire"

  2. Cliquez sur Modifier la règle.

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

    Capture d'écran de l'option permettant de choisir un type de règle par défaut

  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.

Cloud Console

Déployez l'image :

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

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

    Capture d&#39;écran de la page &quot;Créer un déploiement&quot;

  4. Saisissez gcr.io/google-samples/hello-app:1.0 comme chemin d'accès à l'image de conteneur.

  5. Cliquez sur Continue (Continuer).

    Capture d&#39;écran de la page &quot;Configurer le déploiement&quot;

  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 gcr.io/google-samples/hello-app:1.0 --port 8080

Vous pouvez maintenant vérifier que la stratégie a été bloquée :

Cloud Console

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 Cloud Console.

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.

Capture d&#39;écran d&#39;un message indiquant l&#39;échec d&#39;un déploiement

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 page soient facturées sur votre compte Google Cloud :

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 Cloud Console.

    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