Utiliser la vérification des failles

Cette page vous explique comment utiliser la vérification des failles de l'autorisation binaire (CV) pour surveiller les failles associées aux pods qui s'exécutent sur des clusters Google Kubernetes Engine (GKE) compatibles.

Coûts

Ce guide utilise les produits Google Cloud suivants :

  • Artifact Analysis
  • L'autorisation binaire, mais le CV est disponible sans frais pendant l'étape Aperçu
  • GKE

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. Installez Google Cloud CLI.
  3. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  4. Créer ou sélectionner un projet Google Cloud

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID
    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID
  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  6. Activer les API Artifact Analysis, Binary Authorization, Google Kubernetes Engine :

    gcloud services enable binaryauthorization.googleapis.com containeranalysis.googleapis.com container.googleapis.com
  7. Installez Google Cloud CLI.
  8. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  9. Créer ou sélectionner un projet Google Cloud

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID
    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID
  10. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  11. Activer les API Artifact Analysis, Binary Authorization, Google Kubernetes Engine :

    gcloud services enable binaryauthorization.googleapis.com containeranalysis.googleapis.com container.googleapis.com
  12. Assurez-vous que gcloud CLI est mise à jour vers 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 d'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 de chaque projet dispose des autorisations nécessaires pour évaluer la vérification des failles CVC, demandez à votre administrateur d'accorder à l'agent de service de l'autorisation binaire de chaque projet les rôles IAM suivants:

  • Si votre projet de cluster est différent du projet de stratégie : évaluateur de règles d'autorisation binaire (roles/binaryauthorization.policyEvaluator) sur l'agent de service d'autorisation binaire du projet de cluster pour lui permettre d'accéder au projet de stratégie
  • Si votre projet d'artefact est différent de votre projet de stratégie : Lecteur d'occurrences Container Analysis (roles/containeranalysis.occurrences.viewer) sur l'agent de service d'autorisation binaire du projet de règles afin qu'il puisse accéder aux informations sur les failles

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 de chaque projet 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 les comptes de service de chaque projet disposent des autorisations nécessaires pour évaluer cette vérification, accordez aux comptes de service de chaque projet les rôles IAM suivants:

  1. Si le projet dans lequel vous exécutez votre cluster est différent du projet où se trouve la stratégie, vous devez autoriser l'agent de service d'autorisation binaire du projet de cluster à accéder à la stratégie dans le projet de stratégie.

    1. Obtenez l'agent de service d'autorisation binaire du projet de cluster:

      PROJECT_NUMBER=$(gcloud projects list \
        --filter="projectId:CLUSTER_PROJECT_ID" \
        --format="value(PROJECT_NUMBER)")
      CLUSTER_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
      

      Remplacez CLUSTER_PROJECT_ID par l'ID de projet du cluster.

    2. Autorisez le CV à évaluer la stratégie sur le cluster:

      gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \
          --member="serviceAccount:$CLUSTER_SERVICE_ACCOUNT" \
          --role='roles/binaryauthorization.policyEvaluator'
      

      Remplacez POLICY_PROJECT_ID par l'ID du projet qui contient votre stratégie.

  2. Si votre projet Artifact Analysis est différent du projet de stratégie d'autorisation binaire, procédez comme suit:

    1. Obtenez l'agent de service d'autorisation binaire du projet de stratégie:

      PROJECT_NUMBER=$(gcloud projects list \
        --filter="projectId:POLICY_PROJECT_ID" \
        --format="value(PROJECT_NUMBER)")
      SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
      

      Remplacez POLICY_PROJECT_ID par l'ID du projet qui contient votre stratégie.

    2. Attribuez le rôle:

      gcloud projects add-iam-policy-binding VULNERABILITY_PROJECT_ID \
          --member="serviceAccount:$SERVICE_ACCOUNT" \
          --role='roles/containeranalysis.occurrences.viewer'
      

      Remplacez VULNERABILITY_PROJECT_ID par l'ID du projet dans lequel vous exécutez Artifact Analysis.

Créer la règle de plate-forme

Pour créer la règle de plate-forme de CV avec une vérification des failles, procédez comme suit:

  1. Créez la règle de plate-forme:

    cat > /tmp/my-policy.yaml <<EOF
    
    gkePolicy:
      checkSets:
      - checks:
        - vulnerabilityCheck:
            maximumFixableSeverity: MEDIUM
            maximumUnfixableSeverity: HIGH
            allowedCves:
              - CVE_ALLOWED
            blockedCves:
              - CVE_BLOCKED
            containerAnalysisVulnerabilityProjects: projects/VULNERABILITY_PROJECT
          displayName: My vulnerability check
        displayName: My vulnerability check set
    EOF
    
  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 stratégie.
  • POLICY_PROJECT_ID: ID du projet de stratégie

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 du CV avec des règles de plate-forme basées sur des vérifications.

Créer un cluster utilisant la surveillance du CV

Dans cette section, vous allez créer un cluster qui n'utilise que la surveillance de 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 stratégie est stockée
  • POLICY_ID: ID de la règle
  • CLUSTER_PROJECT_ID: ID du projet de 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 du CV

Dans cette section, vous allez créer un cluster qui utilise à la fois l'application des règles de projet-singleton et la surveillance du 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 stratégie est stockée
  • POLICY_ID: ID de la règle
  • CLUSTER_PROJECT_ID: ID du projet de 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 du CV

Dans cette section, vous allez mettre à jour un cluster pour qu'il n'utilise la surveillance du CV qu'avec des règles de plate-forme basées sur des vérifications. Si l'application de la règle de projet unique 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 en activant l'application forcée et la surveillance du CV.

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 stratégie est stockée
  • POLICY_ID: ID de la règle
  • CLUSTER_PROJECT_ID: ID du projet de 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 des CV

Dans cette section, vous allez mettre à jour un cluster pour utiliser à la fois l'application des règles de projet unique et la surveillance du 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: ID du projet dans lequel la stratégie est stockée
  • POLICY_ID: ID de la règle
  • CLUSTER_PROJECT_ID: ID du projet de 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

Tester la vérification des failles

Pour vérifier que la vérification est correctement configurée, mettez à jour la stratégie et modifiez les paramètres de vérification pour forcer une violation. Par exemple, vous pouvez ajouter une faille CVE spécifique à blockedCves, puis déployer une image présentant une faille.

Afficher les journaux des entrées CV

CV consigne les cas de non-respect des règles de plate-forme dans Cloud Logging sous 24 heures. Les entrées apparaissent généralement au bout de 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 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 du cluster.

Vérifier les types

Les journaux CV vérifient les cas de non-conformité dans checkResults. Dans l'entrée, la valeur checkType indique la vérification. Les valeurs de chaque vérification sont les suivantes:

  • ImageFreshnessCheck
  • SimpleSigningAttestationCheck
  • SlsaCheck
  • TrustedDirectoryCheck
  • VulnerabilityCheck

Exemple de journal

L'exemple d'entrée de journalisation CV ci-dessous décrit une image non conforme qui ne respecte pas une vérification de l'annuaire 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 du CV que vous avez configurée précédemment dans ce guide.

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

Désactiver l'autorisation binaire dans un cluster

Pour désactiver l'application forcée du CV et 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 du projet de cluster

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

Pour désactiver la CV avec des règles basées sur les vérifications dans le cluster et réactiver l'application à 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 du projet de cluster

Notez que --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE est équivalent à l'ancien indicateur --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 les 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 stratégie

Étapes suivantes