Activer le mode de simulation

Présentation

Cette page explique comment activer le mode de simulation. Lorsque le mode de simulation est activé, l'autorisation binaire vérifie la conformité avec la stratégie lors de la création du pod, sans toutefois empêcher la création effective du pod. Au lieu de cela, les messages d'état relatifs à la conformité avec la stratégie sont enregistrés dans Cloud Logging. Grâce à ces informations, vous pouvez déterminer si le déploiement de certaines images de conteneurs aurait été involontairement bloqué et corriger la stratégie en conséquence. Une fois que la stratégie applique les exigences de conformité comme prévu, vous pouvez désactiver le mode de simulation.

Avant de commencer

Ce guide part du principe que vous avez configuré l'autorisation binaire. Pour une configuration élémentaire, consultez le guide de démarrage rapide.

Pour accéder à un tutoriel de bout en bout utilisant les attestations, reportez-vous la page Premiers pas avec la CLI ou Premiers pas avec la console.

Activer le mode de simulation

Pour activer le mode de simulation, procédez comme suit :

gcloud

  1. Exportez la stratégie d'autorisation binaire par défaut :

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. Dans un éditeur de texte, définissez le mode d'application (enforcementMode) sur DRYRUN_AUDIT_LOG_ONLY.

    Le fichier YAML de stratégie doit se présenter comme suit :

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google_containers/*
    - namePattern: gcr.io/google-containers/*
    - namePattern: k8s.gcr.io/*
    - namePattern: gke.gcr.io/*
    - namePattern: gcr.io/stackdriver-agents/*
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: DRYRUN_AUDIT_LOG_ONLY
    name: projects/PROJECT_ID/policy
    
  3. Ré-importez le fichier YAML de stratégie dans l’autorisation binaire :

    gcloud container binauthz policy import /tmp/policy.yaml
    
  4. Mettez à jour le fichier kubeconfig local :

    gcloud container clusters get-credentials \
    --zone us-central1-a \
    CLUSTER_NAME
    

    CLUSTER_NAME correspond au nom de votre cluster GKE.

Console

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

    Accéder à la page "Autorisation binaire"

  2. Cliquez sur Configurer la règle ou, si une stratégie existe, sur Modifier la règle.

  3. Dans la stratégie, changez la valeur du mode d'évaluation (evaluationMode) de ALWAYS_ALLOW à ALWAYS_DENY et définissez la valeur du mode d'application (enforcementMode) sur DRYRUN_AUDIT_LOG_ONLY.

    Le fichier YAML de stratégie devrait ressembler à ceci :

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google_containers/*
    - namePattern: gcr.io/google-containers/*
    - namePattern: k8s.gcr.io/*
    - namePattern: gke.gcr.io/*
    - namePattern: gcr.io/stackdriver-agents/*
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: DRYRUN_AUDIT_LOG_ONLY
    name: projects/PROJECT_ID/policy
    
  4. Cliquez sur Enregistrer la règle.

Déployer un conteneur

  1. Déployez l'image de conteneur.

    1. [Facultatif] : Créez un fichier pod.yaml présentant le contenu suivant :

      apiVersion: v1
      kind: Pod
      metadata:
        name: test-pod
      spec:
        containers:
        - name: test-container
          image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
      
    2. Déployez l'image de conteneur :

      kubectl apply -f pod.yaml
      
  2. Vérifiez que le pod est en cours d'exécution.

    Le pod doit être en cours d'exécution. Pour le confirmer, exécutez la commande suivante :

    kubectl get pods
    

    Vous devriez voir que le pod test-pod est bien en cours d'exécution.

  3. Consultez le journal d'audit :

    Pour afficher les entrées du journal d'audit de simulation dans Cloud Logging, consultez la section Événements de simulation dans Cloud Logging.

    Voici un exemple de journal d'audit associé à une simulation :

    {
     insertId: "f87d1ef8-fa7b-4079-be90-d0638e7983ba"
     labels: {
      authorization.k8s.io/decision: "allow"
      authorization.k8s.io/reason: ""
      imagepolicywebhook.image-policy.k8s.io/dry-run: "true"
      imagepolicywebhook.image-policy.k8s.io/overridden-verification-result: "'gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4': Denied by an ALWAYS_DENY admission rule
    "
     }
     logName: "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
     operation: {…}
     protoPayload: {…}
     receiveTimestamp: "2020-06-10T15:59:23.857650559Z"
     resource: {…}
     timestamp: "2020-06-10T15:59:00.185878Z"
    }
    

    Où PROJECT-ID correspond à l'ID de votre projet.

Effectuer un nettoyage

Supprimer le pod

kubectl delete -f /tmp/pod.yaml

Désactiver le mode de simulation

Veillez à désactiver le mode de simulation en modifiant le mode d'application (enforcementMode) dans la règle defaultAdmissionRule de votre stratégie d'autorisation binaire. Exemple :

   enforcementMode: ALWAYS_ALLOW