Utiliser le mode "bris de glace" (GKE)

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

Avant de commencer

Dans ce guide, nous partons du principe que vous avez configuré l'autorisation binaire.

Présentation

Vous utilisez le bris de glace pour déployer une image de conteneur qui est généralement bloquée par l'autorisation binaire.

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.

Cette fonctionnalité est mise en œuvre conformément aux recommandations figurant dans la spécification des contrôleurs d'admission Kubernetes.

Lorsque vous utilisez le mode "bris de glace" pour déployer une image, un événement de type "bris de glace" est automatiquement consigné dans Cloud Audit Logs. Dans Cloud Audit Logs, vous pouvez effectuer manuellement un audit ou déclencher automatiquement une alerte ou un autre événement en aval.

Pour activer le mode "bris de glace", vous ajoutez un libellé au podspec avec une option de règle break-glass.

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

Cette section explique comment utiliser le mode "bris de glace" pour déployer des images, y compris celles qui ne respectent pas la stratégie d'autorisation binaire.

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

Pour mettre à jour la stratégie afin d'empêcher le déploiement de toutes les images, procédez comme suit :

Cloud Console

  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. Sur la page Modifier la règle, dans Règle par défaut du projet, notez le mode d'évaluation d'origine, puis cliquez sur Interdire toutes les images.

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

gcloud

  1. Pour enregistrer la règle existante dans le projet actuel, exécutez la commande suivante :

    gcloud container binauthz policy export > SAVE_POLICY_YAML
    

    Remplacez SAVE_POLICY_YAML par le chemin du fichier d'exportation, par exemple, /tmp/save_policy.yaml.

  2. Créer un fichier de règles :

    cat > TEST_POLICY_YAML << EOM
    admissionWhitelistPatterns:
    defaultAdmissionRule:
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      evaluationMode: ALWAYS_DENY
    globalPolicyEvaluationMode: DISABLE
    EOM
    

    Remplacez TEST_POLICY_YAML par un chemin d'accès au fichier, par exemple, /tmp/policy.yaml.

  3. Importez la stratégie :

    gcloud container binauthz policy import TEST_POLICY_YAML
    

    Remplacez TEST_POLICY_YAML par un chemin d'accès au fichier, par exemple, /tmp/policy.yaml.

Par défaut, le déploiement de toutes les images est bloqué.

Essayer de déployer une image de conteneur

Bien que le mode "bris de glace" soit spécifique à l'autorisation binaire, vous devez mettre à jour le libellé sur un podspec pour l'activer. Pour ce faire, exécutez les commandes suivantes :

  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: breakglass-pod
    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
    

    Une erreur indique que l'image a été bloquée par votre stratégie. L'erreur se présente comme suit :

    Error from server (Forbidden): error when creating "/tmp/create_pod.yaml": pods "breakglass-pod" is forbidden: image policy webhook backend denied one or more images: Image gcr.io/google-samples/hello-app denied by Binary Authorization default
    admission rule. Denied by always_deny admission rule`.

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

  1. Créez un fichier de configuration au format YAML.

    La commande suivante crée le fichier contenant le libellé break-glass et d'autres informations requises pour créer le pod :

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
      labels:
        image-policy.k8s.io/break-glass: "true"
    spec:
      containers:
      - name: container-name
        image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    

    Pour toutes les versions maîtres Kubernetes précédentes, vous activez le mode "bris de glace" en ajoutant alpha.image-policy.k8s.io/break-glass au nœud annotations, comme suit :

    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 Audit Logs

Affichez les événements de type "bris de glace" dans les Cloud Audit Logs.

Effectuer un nettoyage

  1. Supprimez le pod :

      kubectl delete -f /tmp/create_pod.yaml
      

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

  2. Réimportez votre règle d'origine.

      gcloud container binauthz policy import /tmp/policy_save.yaml