Utiliser la vérification de fraîcheur d'image

Cette page explique comment utiliser la vérification de fraîcheur des images de la validation continue (CV) d'autorisation binaire pour vérifier la fraîcheur des images associées aux pods exécutés sur les clusters Google Kubernetes Engine (GKE) où la CV est activée. Pour ce faire, la CV vérifie quand l'image a été importée dans le registre d'images.

Cette vérification n'est possible que sur les dépôts Artifact Registry et Container Registry.

Coûts

Ce guide utilise les produits Google Cloud suivants :

  • Autorisation binaire, mais la CV est disponible gratuitement pendant la phase bêta
  • Google Kubernetes Engine

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Artifact Registry, Binary Authorization, Google Kubernetes Engine APIs:

    gcloud services enable artifactregistry.googleapis.com binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Artifact Registry, Binary Authorization, Google Kubernetes Engine APIs:

    gcloud services enable artifactregistry.googleapis.com binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com
  12. Assurez-vous que gcloud CLI est mis à jour à la dernière version.
  13. Installez l'outil de ligne de commande kubectl.
  14. Si vos stratégies d'autorisation binaire et vos clusters GKE se trouvent dans des projets différents, assurez-vous que l'autorisation binaire est activée dans les deux projets.

Rôles requis

Cette section vous explique comment définir des rôles pour cette vérification.

Présentation

Si vous exécutez tous les produits mentionnés dans ce guide dans le même projet, vous n'avez pas besoin de définir des autorisations. L'autorisation binaire configure correctement les rôles lorsque vous l'activez. Si vous exécutez les produits dans différents projets, vous devez définir des rôles comme décrit dans cette section.

Pour vous assurer que l'agent de service d'autorisation binaire du projet de règles dispose des autorisations nécessaires pour évaluer la vérification de fraîcheur des images CV, demandez à votre administrateur d'accorder à l'agent de service d'autorisation binaire du projet les rôles IAM suivants :

  • Si votre projet de cluster est différent du projet de règles : Évaluateur de règles d'autorisation binaire (roles/binaryauthorization.policyEvaluator) sur l'agent de service d'autorisation binaire du projet de cluster, pour qu'il puisse accéder au projet de règles.
  • Si votre projet d'artefacts est différent de votre projet de règles : Lecteur Artifact Registry (roles/artifactregistry.reader) sur l'agent de service d'autorisation binaire du projet de règles, pour qu'il puisse accéder au projet d'attestation.
  • Si votre projet d'artefacts est différent de votre projet de clusters : Lecteur Artifact Registry (roles/artifactregistry.reader) sur l'agent de service d'autorisation binaire du projet de clusters, pour qu'il puisse accéder aux métadonnées des images dans le projet d'artefacts.

Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

Votre administrateur peut également attribuer à l'agent de service d'autorisation binaire du projet de règles les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

Attribuer des rôles à l'aide de gcloud CLI

Pour vous assurer que l'agent de service d'autorisation binaire de chaque projet dispose des autorisations nécessaires pour évaluer cette vérification, accordez à l'agent de service d'autorisation binaire de chaque projet les rôles IAM suivants.

Projet de clusters différent du projet de règles

Accordez à l'agent de service d'autorisation binaire du projet de clusters le rôle Évaluateur des règles d'autorisation binaire (roles/binaryauthorization.policyEvaluator) sur le projet de règles.

gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe CLUSTER_PROJECT_ID --format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \
  --role=roles/binaryauthorization.policyEvaluator

Remplacez les éléments suivants :

  • POLICY_PROJECT_ID : ID du projet contenant votre règle.
  • CLUSTER_PROJECT_ID : ID de projet du cluster.

Projet de règles différent du projet d'artefacts

Accordez à l'agent de service d'autorisation binaire du projet de règles le rôle Lecteur Artifact Registry (roles/artifactregistry.reader) sur le projet d'artefacts.

gcloud projects add-iam-policy-binding ARTIFACT_PROJECT_ID \
    --member="serviceAccount:service-$(gcloud projects describe POLICY_PROJECT_ID --format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \
    --role=roles/artifactregistry.reader

Remplacez ARTIFACT_PROJECT_ID par l'ID du projet contenant votre dépôt Artifact Registry.

Projet de clusters différent du projet d'artefacts

Accordez à l'agent de service d'autorisation binaire du projet de clusters le rôle Lecteur Artifact Registry (roles/artifactregistry.reader) sur le projet d'artefacts.

gcloud projects add-iam-policy-binding ARTIFACT_PROJECT_ID \
    --member="serviceAccount:service-$(gcloud projects describe CLUSTER_PROJECT_ID --format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \
    --role=roles/artifactregistry.reader

Remplacez les éléments suivants :

  • ARTIFACT_PROJECT_ID : ID du projet contenant votre dépôt Artifact Registry.
  • CLUSTER_PROJECT_ID : ID du projet qui exécute vos clusters GKE.

Créer une règle de plate-forme

Pour créer une règle de plate-forme CV avec la vérification de fraîcheur d'image, procédez comme suit :

  1. Créez le fichier YAML de règle de plate-forme :

    cat << EOF > /tmp/my-policy.yaml
    gkePolicy:
      checkSets:
      - checks:
        - imageFreshnessCheck:
            maxUploadAgeDays: MAX_UPLOAD_AGE_DAYS
          displayName: CHECK_DISPLAY_NAME
        displayName: CHECK_SET_DISPLAY_NAME
    EOF
    

    Remplacez les éléments suivants :

    • MAX_UPLOAD_AGE_DAYS : temps maximal écoulé depuis l'importation de l'image dans le registre, en jours.
    • CHECK_SET_DISPLAY_NAME : nom à afficher de votre choix pour l'ensemble de vérifications (facultatif).
    • CHECK_DISPLAY_NAME : nom à afficher de votre choix pour la vérification (facultatif).
  2. Créez la règle de plate-forme :

    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
    

Activer la CV

Vous pouvez créer un cluster ou mettre à jour un cluster existant pour utiliser la surveillance CV avec des règles de plate-forme basées sur des vérifications.

Créer un cluster utilisant la surveillance CV

Dans cette section, vous allez créer un cluster qui n'utilise que la surveillance CV avec des règles de plate-forme basées sur des vérifications.

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • CLUSTER_NAME : nom du cluster.
  • LOCATION : emplacement (par exemple : us-central1 ou asia-south1).
  • POLICY_PROJECT_ID : l'ID du projet dans lequel la règle est stockée.
  • POLICY_ID : ID de la règle.
  • CLUSTER_PROJECT_ID : ID de projet du cluster.

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters create CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters create CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Créer un cluster utilisant l'application forcée et la surveillance CV

Dans cette section, vous allez créer un cluster qui utilise à la fois l'application des règles Singleton de projet et la surveillance CV avec des règles de plate-forme basées sur les vérifications :

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • CLUSTER_NAME : nom du cluster.
  • LOCATION : emplacement (par exemple : us-central1 ou asia-south1).
  • POLICY_PROJECT_ID : l'ID du projet dans lequel la règle est stockée.
  • POLICY_ID : ID de la règle.
  • CLUSTER_PROJECT_ID : ID de projet du cluster.

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters create CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters create CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Mettre à jour un cluster pour utiliser la surveillance CV

Dans cette section, vous allez mettre à jour un cluster pour utiliser la surveillance CV avec uniquement des règles de plate-forme basées sur la vérification. Si l'application de la règle Singleton de projet est déjà activée sur le cluster, l'exécution de cette commande la désactive. Envisagez plutôt de mettre à jour le cluster avec l'application forcée et la surveillance CV activées.

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • CLUSTER_NAME : nom du cluster
  • LOCATION : emplacement (par exemple : us-central1 ou asia-south1)
  • POLICY_PROJECT_ID : ID du projet dans lequel la règle est stockée
  • POLICY_ID : ID de la règle
  • CLUSTER_PROJECT_ID : ID de projet du cluster

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters update CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters update CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Mettre à jour un cluster pour utiliser l'application forcée et la surveillance CV

Dans cette section, vous allez mettre à jour un cluster pour utiliser à la fois l'application forcée de la règle Singleton de projet et la surveillance CV avec des règles de plate-forme basées sur des vérifications.

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • CLUSTER_NAME : nom du cluster
  • LOCATION : emplacement (par exemple : us-central1 ou asia-south1)
  • POLICY_PROJECT_ID : ID du projet dans lequel la règle est stockée
  • POLICY_ID : ID de la règle
  • CLUSTER_PROJECT_ID : ID de projet du cluster

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters update CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters update CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Afficher les journaux pour les entrées de CV

La CV consigne les cas de non-respect des règles de plate-forme dans Cloud Logging sous 24 heures. Les entrées sont généralement visibles en quelques heures.

Si aucune image n'enfreint les règles de plate-forme que vous avez activées, aucune entrée n'apparaît dans les journaux.

Pour afficher les entrées de journal de la CV des sept derniers jours, exécutez la commande suivante :

gcloud logging read \
     --order="desc" \
     --freshness=7d \
     --project=CLUSTER_PROJECT_ID \
    'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"'

Remplacez CLUSTER_PROJECT_ID par l'ID du projet de cluster.

Types de test

Les journaux de CV vérifient les informations de violation dans checkResults. Dans l'entrée, la valeur checkType indique la vérification. Les valeurs pour chaque vérification sont les suivantes :

  • ImageFreshnessCheck
  • SigstoreSignatureCheck
  • SimpleSigningAttestationCheck
  • SlsaCheck
  • TrustedDirectoryCheck
  • VulnerabilityCheck

Exemple de journal

L'exemple d'entrée de journal CV suivant décrit une image non conforme qui enfreint une vérification de répertoire de confiance :

{
  "insertId": "637c2de7-0000-2b64-b671-24058876bb74",
  "jsonPayload": {
    "podEvent": {
      "endTime": "2022-11-22T01:14:30.430151Z",
      "policyName": "projects/123456789/platforms/gke/policies/my-policy",
      "images": [
        {
          "result": "DENY",
          "checkResults": [
            {
              "explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
              "checkSetName": "My check set",
              "checkSetIndex": "0",
              "checkName": "My trusted directory check",
              "verdict": "NON_CONFORMANT",
              "checkType": "TrustedDirectoryCheck",
              "checkIndex": "0"
            }
          ],
          "image": "gcr.io/my-project/hello-app:latest"
        }
      ],
      "verdict": "VIOLATES_POLICY",
      "podNamespace": "default",
      "deployTime": "2022-11-22T01:06:53Z",
      "pod": "hello-app"
    },
    "@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
  },
  "resource": {
    "type": "k8s_cluster",
    "labels": {
      "project_id": "my-project",
      "location": "us-central1-a",
      "cluster_name": "my-test-cluster"
    }
  },
  "timestamp": "2022-11-22T01:44:28.729881832Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
  "receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}

Effectuer un nettoyage

Cette section explique comment nettoyer la surveillance CV que vous avez configurée précédemment dans ce guide.

Vous pouvez désactiver la surveillance CV ou l'autorisation binaire et la CV dans votre cluster.

Désactiver l'autorisation binaire dans un cluster

Pour désactiver la CV et l'application forcée de l'autorisation binaire dans votre cluster, exécutez la commande suivante :

gcloud beta container clusters update CLUSTER_NAME \
    --binauthz-evaluation-mode=DISABLED \
    --location=LOCATION \
    --project=CLUSTER_PROJECT_ID

Remplacez les éléments suivants :

  • CLUSTER_NAME : nom du cluster
  • LOCATION : emplacement du cluster
  • CLUSTER_PROJECT_ID : ID de projet du cluster

Désactiver la surveillance des règles basées sur des vérifications dans un cluster

Pour désactiver la CV avec des règles basées sur la vérification dans le cluster et réactiver l'application forcée à l'aide de la règle d'application de l'autorisation binaire, exécutez la commande suivante :

gcloud beta container clusters update CLUSTER_NAME  \
    --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
    --location=LOCATION \
    --project="CLUSTER_PROJECT_ID"

Remplacez les éléments suivants :

  • CLUSTER_NAME : nom du cluster
  • LOCATION : emplacement du cluster
  • CLUSTER_PROJECT_ID : ID de projet du cluster

Notez que --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE équivaut à l'ancienne option --enable-binauthz.

Supprimer la stratégie

Pour supprimer la règle, exécutez la commande suivante. Il n'est pas nécessaire de supprimer la règle de plate-forme basée sur des vérifications pour désactiver son audit.

gcloud beta container binauthz policy delete POLICY_ID \
    --platform=gke \
    --project="POLICY_PROJECT_ID"

Remplacez les éléments suivants :

  • POLICY_ID : ID de la règle
  • POLICY_PROJECT_ID : ID du projet de règles

Étapes suivantes