Utiliser le service d'évaluation des règles

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

  1. Install the Google Cloud CLI.
  2. 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 :

É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 :

  1. 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
    
  2. 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
    

É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.

  1. 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
    
  2. 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 :

  1. 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
    
  2. 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

Étapes suivantes