Guide de démarrage rapide : Surveiller la sécurité des pods avec la validation continue

Découvrez comment faire vos premiers pas avec la validation continue de l'autorisation binaire avec des règles basées sur la vérification. Dans ce guide de démarrage rapide, vous allez utiliser les vérifications CV suivantes pour valider en continu les pods en cours d'exécution pour les conditions suivantes :

  • Répertoire de confiance: vérifie que les images associées au pod se trouvent dans un ou plusieurs répertoires de confiance que vous spécifiez dans la règle.
  • Fraîcheur d'image : vérifie que les images du pod ont été importées au maximum depuis un nombre de jours spécifié dans la règle.

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  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 Binary Authorization and Google Kubernetes Engine APIs:

    gcloud services enable container.googleapis.com binaryauthorization.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 Binary Authorization and Google Kubernetes Engine APIs:

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  12. Installez l'outil de ligne de commande kubectl.
  13. 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.

Créer une règle de plate-forme

Pour configurer une règle de plate-forme GKE pour la CV, 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:
        - trustedDirectoryCheck:
            trustedDirPatterns:
            - us-central1-docker.pkg.dev/my-project/my-directory
          displayName: My trusted directory check
        - imageFreshnessCheck:
            maxUploadAgeDays: 30
          displayName: My image freshness check
        displayName: My trusted directory and image freshness check set
    EOF
    

    Cette règle vérifie les conditions suivantes:

    • Les images des pods sont stockées dans le dépôt Artifact Registry nommé us-central1-docker.pkg.dev/my-project/my-directory.

    • Les images des pods ont été importées dans les dépôts Artifact Registry ou Container Registry au cours des 30 derniers jours.

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

    gcloud beta container binauthz policy create POLICY_ID \
        --platform=gke \
        --policy-file=/tmp/my-policy.yaml \
        --project=POLICY_PROJECT_ID
    

    Remplacez les éléments suivants :

    • POLICY_ID : ID de votre choix
    • POLICY_PROJECT_ID : ID du projet de règles

Créer ou mettre à jour un cluster

Pour activer la CV sur un cluster, vous pouvez créer un cluster ou mettre à jour un cluster existant.

  • Pour créer un cluster avec la règle de plate-forme basée sur les vérifications activée, exécutez la commande suivante :

    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
    

    Remplacez les éléments 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

    Attendez que le cluster soit créé.

  • Pour mettre à jour un cluster existant avec les règles basées sur des vérifications activées, exécutez la commande suivante.

    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
    

    Remplacez les éléments 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

    Attendez que le cluster soit mis à jour.

Déployer une image

  1. Obtenez l'identifiant pour kubectl :

    gcloud container clusters get-credentials CLUSTER_NAME
    
  2. Déployez une image :

    kubectl run hello-app \
        --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    

    L'image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 répond à la vérification d'actualisation, car elle a été importée dans le dépôt au cours des 30 derniers jours. Mais l'image échoue à la vérification du répertoire de confiance, car elle ne se trouve pas dans us-central1-docker.pkg.dev/my-project/my-directory. Par conséquent, la CV génère des entrées de journal TrustedDirectoryCheck dans Cloud Logging.

Afficher les journaux

L'entrée de journal apparaît dans Cloud Logging dans les 24 heures suivant le déploiement du pod, mais elle peut apparaître en quelques heures seulement.

Pour afficher le journal dans Cloud Logging, utilisez le filtre suivant :

logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation"
"policyName"

Le journal du pod hello-app est semblable à celui ci-dessous. Certains champs peuvent être différents selon l'ID de votre projet, le nom du cluster, etc…

{
  "insertId": "637c2de7-0000-2b64-b671-24058876bb74",
  "jsonPayload": {
    "podEvent": {
      "endTime": "2022-11-22T01:14:30.430151Z",
      "policyName": "projects/1234567890/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": "Default check set",
              "checkSetIndex": "0",
              "checkName": "My trusted directory check",
              "verdict": "NON_CONFORMANT",
              "checkType": "TrustedDirectoryCheck",
              "checkIndex": "0"
            }
          ],
          "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
        }
      ],
      "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-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"
}

L'entrée de journal affiche des informations sur le cas de non-respect des règles, y compris les champs suivants :

  • policyName : règle de plate-forme utilisée par la CV lors de l'identification de la violation
  • checkResults : bloc de résultats qui inclut les champs suivants :

    • explanation : message d'erreur
    • checkSetName : valeur displayName de l'ensemble de vérifications
    • checkSetIndex : index de l'ensemble de vérifications dans la règle
    • checkName : nom de la vérification
    • checkIndex : index de la vérification dans l'ensemble de test
    • verdict : verdict ayant entraîné la création de l'entrée de journal (dans le cas présent, NOT_CONFORMANT), car la vérification a n'a pas été satisfaite.

Certaines vérifications peuvent inclure des informations supplémentaires afin de vous aider à comprendre pourquoi la vérification n'a pas été satisfaite.

Comme l'image satisfait la vérification de fraîcheur, elle n'apparaît pas dans le journal.

Effectuer un nettoyage

Pour éviter que les ressources utilisées sur cette page ne soient facturées sur votre compte Google Cloud, supprimez le projet Google Cloud contenant les ressources.

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