Guide de démarrage rapide

Ce guide de démarrage rapide explique comment configurer et tester une stratégie simple dans une autorisation binaire.

Dans ce guide de démarrage rapide, vous allez afficher et tester la stratégie par défaut, puis la configurer pour interdire le déploiement de toutes les images de conteneurs stockées dans Container Registry sur un cluster Google Kubernetes Engine (GKE). Il ne s'agit pas d'une stratégie transposable dans une configuration réelle. Dans le cas d'une stratégie réelle, vous aurez généralement besoin que des certificateurs délivrent des attestations pour votre environnement avant de pouvoir déployer une image de conteneur.

Pour des explications plus détaillées sur la façon de configurer une stratégie avec les attestations requises, reportez-vous à la section Premiers pas avec la CLI ou à la section Premiers pas avec la console.

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. Installez et initialisez le SDK Cloud.
  5. Installez kubectl.

Activer les API requises

Activez les API pour GKE, Container Analysis et l'autorisation binaire :

gcloud

  1. Définissez le projet Google Cloud par défaut utilisé par les commandes gcloud :

    PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    

    PROJECT_ID correspond au nom de votre projet.

  2. Activez les API requises :

    gcloud services enable \
        container.googleapis.com \
        containeranalysis.googleapis.com \
        binaryauthorization.googleapis.com
    

console

Activez les API requises :

Activer les API

Cette opération peut prendre quelques minutes.

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 conteneurs que vous déployez :

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

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 Availability, Networking, Security, and Additional Features (Disponibilité, mise en réseau, sécurité et autres fonctionnalités).

  7. Dans la section Security (Sécurité), sélectionnez Enable Binary Authorization (Activer l'autorisation binaire).

    Option d'activation de l'autorisation binaire

  8. Cliquez sur Créer.

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.

gcloud

Pour visualiser la stratégie par défaut, exportez le fichier YAML de stratégie :

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 :

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"
  }
}

console

Pour visualiser la stratégie par défaut :

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

    Accéder à la page "Binary Authorization" (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 Configurer la règle ou, si une stratégie existe, sur Edit Policy (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

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, qui contient un exemple d'application Hello World.

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
    

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

  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

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

  7. Cliquez sur Déployer.

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

kubectl

Pour vérifier que l'image a été déployée :

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

console

Pour vérifier que l'image a été déployée, accédez à la page Charges de travail GKE dans Google 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

Veillez à supprimer le déploiement pour pouvoir passer à l'étape suivante :

kubectl

Pour supprimer le déploiement :

kubectl delete deployment hello-server

Console

Pour supprimer le déploiement :

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

    Accéder à la page GKE

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

  3. Cliquez sur Supprimer.

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.

gcloud

Pour modifier la stratégie :

  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 :

  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"
    

console

Pour modifier la stratégie :

  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 Enregistrer la règle.

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.

kubectl

Déployez l'image :

kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080

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'écran de la page

  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

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

  7. Cliquez sur Déployer.

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

kubectl

Pour vérifier que l'image n'a pas été déployée :

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}}'

La réponse renvoyée montre que le déploiement n'a pas été autorisé par la stratégie :

FailedCreate:Error creating: pods "hello-server-579859fb5b-lvfgd" is forbidden:
image policy webhook backend denied one or more images: Denied by default admission
rule. Overridden by evaluation mode

Console

Pour vérifier que l'image n'a pas été déployée :

Revenez à la page Charges de travail GKE dans Google 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'écran d'un message indiquant l'échec d'un déploiement

Effectuer un nettoyage

Pour éviter que les ressources utilisées dans ce guide de démarrage rapide soient facturées sur votre compte Google Cloud, procédez comme suit :

Supprimez le cluster que vous avez créé dans GKE :

gcloud

Pour supprimer le cluster :

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

Console

Pour supprimer le cluster :

  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.

Étapes suivantes