Cette page explique comment utiliser la commande Google Cloud CLI du service d'évaluation des règles pour évaluer rapidement si une image ou une ressource Kubernetes est conforme à une règle de plate-forme basée sur la validation continue.
Présentation
Le service d'évaluation des règles est une fonctionnalité de l'autorisation binaire que vous pouvez utiliser avec des règles de plate-forme basée sur la validation continue (CV, Continuous Validation). Le service d'évaluation des règles évalue à la demande si une image de conteneur que vous spécifiez est conforme à une règle de plate-forme CV. Le service d'évaluation des règles est disponible en tant que commande gcloud CLI et en tant que méthode projects.platforms.gke.policies.evaluate.
La CV recherche des cas de non-respect des règles au moins une fois toutes les 24 heures. Par conséquent, l'affichage des événements de CV dans Logging peut prendre jusqu'à 24 heures après l'activation de la CV ou le déploiement d'une ressource Kubernetes. En outre, la CV génère des entrées de journal lorsqu'elle détecte un cas de non-respect de règle. La CV ne génère pas d'entrées de journal lorsque les ressources Kubernetes sont conformes à la règle.
Le service d'évaluation des règles génère un verdict qui indique si l'image est conforme ou non à la règle.
Le service d'évaluation des règles vous permet de déterminer rapidement si votre image est conforme à une règle.
Lorsque vous utilisez le service, vous spécifiez l'URL de l'image, directement ou dans une ressource Kubernetes, ainsi que le nom de la règle basée sur la validation CV GKE.
Ainsi, le service d'évaluation des règles peut vous aider à développer des règles et à déboguer des ressources Kubernetes non conformes avant d'utiliser la CV.
Cette fonctionnalité n'est compatible qu'avec les règles basées sur la validation CV GKE.
Les images doivent également spécifier un condensé d'image au format IMAGE_URL@IMAGE_DIGEST
, sauf dans les cas suivants :
- Vérification du répertoire de confiance : la vérification réussit si l'image se trouve dans un répertoire que vous spécifiez.
- Listes d'autorisation d'images exclues : toutes les autres vérifications nécessitent un condensé d'image au format
IMAGE_URL@IMAGE_DIGEST
.
Avant de commencer
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Rôles requis
Pour obtenir les autorisations nécessaires à l'utilisation du service d'évaluation des règles, demandez à votre administrateur de vous accorder le rôle IAM d'évaluateur de règles (roles/binaryauthorization.policyEvaluator
) sur le projet de règles.
Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Si votre règle utilise certaines vérifications, vous devrez peut-être demander à votre administrateur d'attribuer les rôles requis spécifiques à la vérification suivants :
- Rôles requis pour la vérification d'attestation de signature simple
- Rôles requis pour la vérification des failles
- Rôles requis pour la vérification de la fraîcheur
Évaluer les règles de plate-forme basées sur la validation
Le service d'évaluation des règles peut évaluer une seule URL d'image ou une seule image spécifiée dans une ressource Kubernetes au format JSON ou YAML.
Évaluer les règles de plate-forme basées sur la validation avec une ressource Kubernetes
Pour évaluer une règle avec une ressource Kubernetes à l'aide de gcloud CLI, exécutez la commande suivante :
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
POLICY_ID
: ID de la règle de plate-forme. Si la règle se trouve dans un autre projet, vous pouvez utiliser le nom complet de la ressource :projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.POD_SPECIFICATION_PATH
: chemin d'accès à la spécification de pod.
Exécutez la commande suivante :
Linux, macOS ou Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --resource=POD_SPECIFICATION_PATH
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --resource=POD_SPECIFICATION_PATH
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --resource=POD_SPECIFICATION_PATH
Pour évaluer une règle qui spécifie la plate-forme, qui doit être définie sur gke
, exécutez la commande suivante :
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
POLICY_ID
: ID de la règle de plate-forme. Si la règle se trouve dans un autre projet, vous pouvez utiliser le nom complet de la ressource :projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.POD_SPECIFICATION_PATH
: chemin d'accès à la spécification de pod.
Exécutez la commande suivante :
Linux, macOS ou Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --platform=gke \ --resource=POD_SPECIFICATION_PATH
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --platform=gke ` --resource=POD_SPECIFICATION_PATH
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --platform=gke ^ --resource=POD_SPECIFICATION_PATH
Évaluer les règles de plate-forme basées sur la validation avec une URL d'image
Pour évaluer une règle à l'aide d'une URL d'image, exécutez la commande suivante :
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
POLICY_ID
: ID de la règle de plate-forme. Si la règle se trouve dans un autre projet, vous pouvez utiliser le nom complet de la ressource :projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.IMAGE_URL
: chemin d'accès à la spécification de pod.
Exécutez la commande suivante :
Linux, macOS ou Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=IMAGE_URL
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=IMAGE_URL
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=IMAGE_URL
Lorsque vous utilisez l'option --image
, l'espace de noms et le compte de service sont implicitement considérés comme vides. Si la règle que vous évaluez utilise des ensembles de vérifications limités à kubernetesNamespace
ou kubernetesServiceAccount
, les résultats renvoyés peuvent ne pas être exacts.
Examiner le résultat de la commande
Le résultat de la commande contient un verdict de premier niveau qui indique l'état de conformité du pod. Les états de conformité suivants peuvent être renvoyés :
CONFORMANT
: la ressource Kubernetes est conforme à la règle de plate-forme.NON_CONFORMANT
: la ressource Kubernetes n'est pas conforme à la règle de plate-forme.ERROR
: l'évaluation s'est terminée par une erreur.
La réponse contient également des résultats imbriqués contenant des informations détaillées sur l'état de conformité de toutes les vérifications évaluées pour chaque image contenue dans la ressource Kubernetes.
Chaque bloc ImageResults
contient un champ explanation
lisible par l'humain qui décrit pourquoi l'image est autorisée ou non.
Pour faciliter l'écriture de scripts, la commande renvoie un code de sortie différent de zéro lorsque la spécification du pod n'est pas conforme à la règle ou lorsque l'évaluation échoue.
Les exemples de sortie suivants illustrent deux cas. Dans le premier cas, la ressource Kubernetes est conforme à la règle. Dans le second cas, la ressource n'est pas conforme à la règle.
Afficher un résultat conforme
Cette section décrit le résultat d'une vérification du service d'évaluation des règles dans laquelle le pod est conforme à la règle de plate-forme.
results:
- imageResults:
- checkSetResult:
checkResults:
results:
- displayName: My trusted directory check
evaluationResult:
verdict: CONFORMANT
explanation: Image is in a trusted directory
type: TrustedDirectoryCheck
displayName: Default check set
scope: {}
imageUri: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
verdict: CONFORMANT
kubernetesNamespace: default
kubernetesServiceAccount: default
podName: my-pod
verdict: CONFORMANT
verdict: CONFORMANT
Dans le résultat, un verdict de CONFORMANT
est renvoyé pour les types d'évaluation suivants :
- Vérification : l'image est conforme à la vérification individuelle, dans ce cas, la vérification du répertoire de confiance.
- CheckSet : l'image est conforme à chacune des vérifications du CheckSet.
- Règle : l'image est conforme à la règle.
Comme l'image est conforme à la règle, la commande renvoie un code de sortie égal à zéro.
Afficher un résultat non conforme
Cette section décrit le résultat d'une vérification du service d'évaluation des règles dans laquelle le pod n'est pas conforme à la règle de plate-forme.
results:
- imageResults:
- checkSetResult:
checkResults:
results:
- displayName: My trusted directory check
evaluationResult:
verdict: NON_CONFORMANT
explanation: Image isn't in a trusted directory
type: TrustedDirectoryCheck
displayName: Default check set
scope: {}
imageUri: us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0
verdict: NON_CONFORMANT
kubernetesNamespace: default
kubernetesServiceAccount: default
podName: my-pod
verdict: NON_CONFORMANT
verdict: NON_CONFORMANT
Dans le résultat, comme l'image n'est pas conforme à la vérification individuelle (dans le cas présent, la vérification du répertoire de confiance, et donc l'ensemble de toutes les vérifications), le verdict de premier niveau est NON_CONFORMANT
, et la commande renvoie un code de sortie différent de zéro.
Tester le service d'évaluation des règles
Cette section décrit comment tester le service d'évaluation des règles. Vous créez une règle de plate-forme basée sur la validation qui contient la vérification du répertoire de confiance. Dans le premier test, vous pouvez ensuite évaluer une spécification de pod conforme à la règle. Dans le deuxième test, vous évaluez une spécification de pod non conforme à la règle.
Pour créer une règle contenant une vérification du répertoire de confiance, exécutez les commandes suivantes :
Créez un fichier de règle de plate-forme :
cat << EOF > my-policy.yaml gkePolicy: checkSets: - checks: - displayName: "My trusted directory check" trustedDirectoryCheck: trustedDirPatterns: - "us-docker.pkg.dev/google-samples/containers/gke/" displayName: "My default check set" EOF
Créez la règle :
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
- POLICY_ID : ID de règle de plate-forme de votre choix. Si la règle se trouve dans un autre projet, vous pouvez utiliser le nom complet de la ressource :
projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
. - POLICY_PATH : chemin d'accès au fichier de règle.
- POLICY_PROJECT_ID : ID du projet de règle.
Exécutez la commande suivante :
Linux, macOS ou Cloud Shell
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=POLICY_PATH \ --project=POLICY_PROJECT_ID
Windows (PowerShell)
gcloud beta container binauthz policy create POLICY_ID ` --platform=gke ` --policy-file=POLICY_PATH ` --project=POLICY_PROJECT_ID
Windows (cmd.exe)
gcloud beta container binauthz policy create POLICY_ID ^ --platform=gke ^ --policy-file=POLICY_PATH ^ --project=POLICY_PROJECT_ID
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=my-policy.yaml
- POLICY_ID : ID de règle de plate-forme de votre choix. Si la règle se trouve dans un autre projet, vous pouvez utiliser le nom complet de la ressource :
Évaluer une image conforme
Dans cette section, vous allez évaluer une spécification de pod conforme à la règle que vous avez créée précédemment dans ce guide. L'évaluation produit un verdict indiquant que la spécification de pod est CONFORMANT
, car la spécification de pod fait référence à une image qui se trouve dans le répertoire spécifié dans trustedDirPatterns
lors de la vérification du répertoire de confiance.
Créez la spécification de pod :
cat << EOF > my-conforming-pod.json { "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "" }, "spec": { "containers": [ { "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0" } ] } } EOF
Utilisez le service d'évaluation des règles en exécutant la commande suivante :
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
POLICY_ID
: ID de la règle de plate-forme. Si la règle se trouve dans un autre projet, vous pouvez utiliser le nom complet de la ressource :projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.my-conforming-pod.json
: chemin d'accès à la spécification de pod.
Exécutez la commande suivante :
Linux, macOS ou Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=my-conforming-pod.json
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=my-conforming-pod.json
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=my-conforming-pod.json
Évaluer une image non conforme
Dans cette section, vous allez évaluer une spécification de pod non conforme à la règle que vous avez créée précédemment dans ce guide. L'évaluation produit un verdict indiquant que la spécification de pod est NON_CONFORMANT
, car celle-ci fait référence à une image qui se trouve en dehors du répertoire spécifié dans trustedDirPatterns
, dans la vérification du répertoire de confiance.
Pour évaluer une image non conforme, exécutez les commandes suivantes :
Créez la spécification de pod :
cat << EOF > my-non-conforming-pod.json { "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "" }, "spec": { "containers": [ { "image": "us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0" } ] } } EOF
Utilisez le service d'évaluation des règles en exécutant la commande suivante :
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
POLICY_ID
: ID de la règle de plate-forme. Si la règle se trouve dans un autre projet, vous pouvez utiliser le nom complet de la ressource :projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.my-non-conforming-pod.json
: chemin d'accès à la spécification de pod.
Exécutez la commande suivante :
Linux, macOS ou Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=my-non-conforming-pod.json
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=my-non-conforming-pod.json
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=my-non-conforming-pod.json