Utiliser le mode "bris de glace"

Cette page fournit des instructions sur l'utilisation du mode "bris de glace" avec l'autorisation binaire.

Présentation

L'autorisation binaire assure la sécurité sur la chaîne d'approvisionnement logicielle en déterminant si GKE peut déployer une image de conteneur. Parfois, vous devez forcer le déploiement d'une image de conteneur qui aurait été bloquée par l'outil d'application de l'autorisation binaire. Dans ce cas, l'autorisation binaire fournit une fonctionnalité appelée bris de glace. Pour contourner les contraintes de la stratégie et autoriser le déploiement d'images, vous annotez la définition de pod avec une option de stratégie break-glass.

Le mode "bris de glace" fournit une issue de secours qui vous permet d'ignorer l'application de la stratégie d'autorisation binaire et de déployer une image de conteneur, y compris celles qui seraient interdites par la stratégie.

Enfin, le mode "bris de glace" enregistre automatiquement l'événement de type "bris de glace" dans Cloud Logging, où vous pouvez effectuer manuellement un audit ou déclencher automatiquement une alerte ou un autre événement en aval.

Instaurer un événement de type "bris de glace"

Mettre à jour la stratégie d'autorisation binaire afin de rejeter toutes les requêtes de déploiement

Bien que le mode "bris de glace" soit spécifique à l'autorisation binaire, il nécessite la mise à jour de l'annotation sur une spécification de pod.

Pour mettre à jour la stratégie afin de rejeter toutes les requêtes de déploiement d'une image de conteneur, procédez comme suit :

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

    Accéder à la page "Autorisation binaire"

  2. Cliquez sur Modifier la règle.

  3. Définissez la règle par défaut du projet sur Deny All :

À la page Modifier la règle, dans Règle par défaut du projet, cliquez sur Interdire toutes les images.

  1. Cliquez sur Enregistrer la règle.

Essayer de déployer une image de conteneur

  1. Créez un fichier de configuration au format YAML. Ce fichier contient les informations de base requises pour créer le pod :

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
    spec:
      containers:
      - name: container-name
        image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. Créez le pod à l'aide de kubectl :

    kubectl create -f /tmp/create_pod.yaml
    

    Notez l'erreur suivante : Error from server (Forbidden): error when creating "/tmp/create_pod.yaml": pods "pod-name" is forbidden: image policy webhook backend denied one or more images: Denied by default admission rule. Overridden by evaluation mode.

Activer le mode "bris de glace" et relancer le déploiement

  1. Créez un fichier de configuration au format YAML. Ce fichier contient maintenant l'annotation de bris de glace ainsi que d'autres informations requises pour créer le pod :

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
      annotations:
        alpha.image-policy.k8s.io/break-glass: "true"
    spec:
      containers:
      - name: container-name
        image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. Créez le pod à l'aide de kubectl :

    kubectl create -f /tmp/create_pod.yaml
    

    Notez le résultat : pod/pod-name created

Rechercher l'entrée de journal de type "bris de glace" dans Cloud Logging

  1. Accédez à la page de la visionneuse Cloud Logging :

    Accéder à la page "Visionneuse de journaux"

  2. Sélectionnez Cluster Kubernetes dans la liste Ressources.

  3. Sélectionnez la période dans le sélecteur de période.

  4. Effectuez un copier-coller de ce qui suit dans la zone de requête de recherche :

    imagepolicywebhook.image-policy.k8s.io/break-glass
    

    Les enregistrements renvoyés peuvent être développés pour afficher des informations sur l'événement de déploiement de type "bris de glace".

Effectuer un nettoyage en supprimant le pod

kubectl delete -f /tmp/create_pod.yaml

Vérifiez ensuite que vous avez obtenu le résultat suivant : pod "pod-name" deleted