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 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 pour autoriser le déploiement d'images, même 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, que le déploiement soit conforme ou non à la stratégie. 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 champ label
à la spécification de pod 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 :
console Google Cloud
Accédez à la page "Autorisation binaire" dans Google Cloud Console.
Cliquez sur Modifier la stratégie.
Sur la page Modifier la stratégie, dans la règle par défaut du projet, notez le mode d'évaluation d'origine, puis cliquez sur Interdire toutes les images.
Cliquez sur Enregistrer la règle.
gcloud
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
.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
.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
Dans cette section, vous allez déployer une image. La règle par défaut de la stratégie est configurée pour interdire le déploiement de toutes les images. Par conséquent, la requête de déploiement échoue.
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
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
Dans cette section, vous allez activer le mode "bris de glace". Bien que le mode "bris de glace" soit spécifique à l'autorisation binaire, vous devez mettre à jour le champ label
dans la spécification du pod pour l'activer.
Pour activer le mode "bris de glace", exécutez les commandes suivantes :
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
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.
Les spécifications PodSpec plus anciennes qui spécifient annotations: alpha.image-policy.k8s.io/break-glass
déclenchent également le mode "bris de glace" et génèrent des entrées de journal. L'utilisation de cette annotation n'est plus recommandée, mais elle est toujours prise en charge pour maintenir la rétrocompatibilité.
Effectuer un nettoyage
Pour supprimer le pod et désactiver le mode "bris de glace", procédez comme suit :
Supprimez le pod :
kubectl delete -f /tmp/create_pod.yaml
Vérifiez que vous avez reçu un résultat tel que
pod <var>pod-name</var> deleted
.Supprimez le bloc
label
de la spécification de pod.Réinitialisez votre stratégie :
console Google Cloud
Accédez à la page "Autorisation binaire" dans Google Cloud Console.
Cliquez sur Modifier la stratégie.
Sur la page Modifier la stratégie, dans Règle par défaut du projet, rétablissez le paramètre d'évaluation précédent.
Cliquez sur Enregistrer la règle.
gcloud
Réimportez votre stratégie d'origine.
gcloud container binauthz policy import SAVE_POLICY_YAML
Remplacez SAVE_POLICY_YAML par le chemin d'accès au fichier que vous avez créé précédemment dans ce guide.
Votre stratégie est réinitialisée.
Étape suivante
- Affichez les événements de type "bris de glace" dans les Cloud Audit Logs.