Cette page explique comment utiliser la vérification d'attestation de signature simple de la validation continue de l'autorisation binaire. Cette vérification vérifie les attestations des images de conteneurs associées aux pods exécutés dans un cluster Google Kubernetes Engine (GKE) sur lequel la CV est activée.
Coûts
Ce guide utilise les produits Google Cloud suivants :
- Autorisation binaire, mais la CV est disponible gratuitement pendant la phase bêta
- GKE
- Cloud Key Management Service
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine APIs:
gcloud services enable binaryauthorization.googleapis.com
cloudkms.googleapis.com container.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine APIs:
gcloud services enable binaryauthorization.googleapis.com
cloudkms.googleapis.com container.googleapis.com - Assurez-vous que gcloud CLI est mis à jour à la dernière version.
- Installez l'outil de ligne de commande
kubectl
. - 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 de chaque projet dispose des autorisations nécessaires pour évaluer la vérification d'attestation de signature simple de CV, demandez à votre administrateur d'accorder à l'agent de service d'autorisation binaire de chaque 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'attestation est différent de votre projet de règles : Lecteur d'occurrences Container Analysis (
roles/containeranalysis.occurrences.viewer
) sur l'agent de service d'autorisation binaire du projet de règles pour, pour qu'il puisse accéder au projet d'attestation.
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 l'agent de service d'autorisation binaire de chaque projet dispose des autorisations nécessaires pour évaluer la vérification d'attestation de signature simple de la CV, accordez à chaque agent de service d'autorisation binaire les rôles IAM suivants :
Accordez à l'agent de service d'autorisation binaire du projet de cluster l'accès à la règle dans le projet de règles.
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.Autorisez la CV à évaluer la règle 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 contenant votre règle.
Autorisez l'agent de service d'autorisation binaire du projet de règles à accéder aux attestations dans votre projet d'attestation :
Obtenez l'agent de service d'autorisation binaire du projet de règles :
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 contenant votre règle.Attribuez le rôle :
gcloud projects add-iam-policy-binding ATTESTATION_PROJECT_ID \ --member="serviceAccount:$SERVICE_ACCOUNT" \ --role='roles/containeranalysis.occurrences.viewer'
Remplacez
ATTESTATION_PROJECT_ID
par l'ID du projet contenant vos attestations.
Créer une paire de clés
Dans cette section, vous allez créer une paire de clés asymétriques ECDSA (Elliptic Curve Digital Signature Algorithm).
Vous utilisez la clé privée pour signer l'image, ce qui crée l'attestation. Vous devez inclure la clé publique dans la règle de plate-forme. Lorsque la CV vérifie l'attestation, elle utilise la clé publique pour la valider.
Vous pouvez utiliser Cloud Key Management Service ou des clés locales, mais nous vous recommandons d'utiliser des clés Cloud KMS pour la production.
PKIX Cloud KMS
Pour créer la paire de clés dans Cloud KMS, procédez comme suit :
Configurez les variables d'environnement nécessaires à la création de la paire de clés. Pour ce faire, nous vous recommandons de renseigner les espaces réservés dans la commande suivante, puis d'exécuter la commande.
KMS_KEY_PROJECT_ID=KMS_KEY_PROJECT_ID KMS_KEYRING_NAME=KMS_KEYRING_NAME KMS_KEY_NAME=KMS_KEY_NAME KMS_KEY_LOCATION=global KMS_KEY_PURPOSE=asymmetric-signing KMS_KEY_ALGORITHM=ec-sign-p256-sha256 KMS_PROTECTION_LEVEL=software KMS_KEY_VERSION=1
Remplacez les éléments suivants :
KMS_KEY_PROJECT_ID
: ID de votre projet.KMS_KEYRING_NAME
: nom de votre trousseau de clés Cloud KMS.KMS_KEY_NAME
: nom de votre clé Cloud KMS.
Créez le trousseau de clés :
gcloud kms keyrings create ${KMS_KEYRING_NAME} \ --location=${KMS_KEY_LOCATION} \ --project=${KMS_KEY_PROJECT_ID}
Créez la clé :
gcloud kms keys create ${KMS_KEY_NAME} \ --location=${KMS_KEY_LOCATION} \ --keyring=${KMS_KEYRING_NAME} \ --purpose=${KMS_KEY_PURPOSE} \ --default-algorithm=${KMS_KEY_ALGORITHM} \ --protection-level=${KMS_PROTECTION_LEVEL} \ --project=${KMS_KEY_PROJECT_ID}
Exportez le matériel de clé publique dans un fichier :
gcloud kms keys versions get-public-key 1 \ --key=${KMS_KEY_NAME} \ --keyring=${KMS_KEYRING_NAME} \ --location=${KMS_KEY_LOCATION} \ --output-file=/tmp/ec_public.pem \ --project=${KMS_KEY_PROJECT_ID}
Clé locale
Pour créer la paire de clés localement, procédez comme suit :
Créez la clé privée :
PRIVATE_KEY_FILE="/tmp/ec_private.pem" openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
Extrayez la clé publique de la clé privée :
PUBLIC_KEY_FILE="/tmp/ec_public.pem" openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
Créer une règle de plate-forme
Pour créer une règle de plate-forme CV avec une vérification d'attestation de signature simple, procédez comme suit :
Créez le fichier YAML de règle de plate-forme de vérification d'attestation de signature simple :
PKIX Cloud KMS
cat > /tmp/my-policy.yaml <<EOF gkePolicy: checkSets: checks: simpleSigningAttestationCheck: containerAnalysisAttestationProjects: - projects/ATTESTATION_PROJECT_ID attestationAuthenticators: pkixPublicKeySet: pkixPublicKeys: publicKeyPem: | $(awk '{printf " %s\n", $0}' /tmp/ec_public.pem) signatureAlgorithm: ECDSA_P256_SHA256 keyId: | projects/KMS_KEY_PROJECT_ID/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION} EOF
Remplacez les éléments suivants :
ATTESTATION_PROJECT_ID
: ID du projet qui stocke les attestationsKMS_KEY_PROJECT_ID
: ID de votre projet de clé KMS
Clé locale
cat > /tmp/my-policy.yaml <<EOF gkePolicy: checkSets: checks: simpleSigningAttestationCheck: containerAnalysisAttestationProjects: - "projects/ATTESTATION_PROJECT_ID" attestationAuthenticators: pkixPublicKeySet: pkixPublicKeys: publicKeyPem: | $(awk '{printf " %s\n", $0}' /tmp/ec_public.pem) signatureAlgorithm: ECDSA_P256_SHA256 keyId: | PUBLIC_KEY_ID EOF
Remplacez les éléments suivants :
ATTESTATION_PROJECT_ID
: ID du projet qui stocke les attestationsPUBLIC_KEY_ID
: ID qui identifie de manière unique votre clé locale.
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
- 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 :
Stockez la valeur de l'ID pour une utilisation ultérieure :
PUBLIC_KEY_ID="PUBLIC_KEY_ID"
Remplacez
PUBLIC_KEY_ID
par l'ID que vous avez spécifié dans le champkeyId
du fichier de règles de la plate-forme plus tôt dans ce guide.La clé privée est utilisée lors de la création des attestations, comme décrit plus loin dans ce guide.
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
ouasia-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
ouasia-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 clusterLOCATION
: emplacement (par exemple :us-central1
ouasia-south1
)POLICY_PROJECT_ID
: ID du projet dans lequel la règle est stockéePOLICY_ID
: ID de la règleCLUSTER_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 clusterLOCATION
: emplacement (par exemple :us-central1
ouasia-south1
)POLICY_PROJECT_ID
: ID du projet dans lequel la règle est stockéePOLICY_ID
: ID de la règleCLUSTER_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
Créer la note Artifact Analysis
Dans cette section, vous allez créer un exemple de note Artifact Analysis pour associer des attestations. Pour créer la note, procédez comme suit :
Créez les variables de note :
NOTE_PROJECT_ID=NOTE_PROJECT_ID NOTE_ID="test-note" NOTE_URI="projects/${NOTE_PROJECT_ID}/notes/${NOTE_ID}" DESCRIPTION="CV test note"
Remplacez
NOTE_PROJECT_ID
par l'ID du projet contenant la note.Créez le fichier de contenu de note :
cat > /tmp/note_payload.json << EOM { "name": "${NOTE_URI}", "attestation": { "hint": { "human_readable_name": "${DESCRIPTION}" } } } EOM
Créez la note :
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: ${NOTE_PROJECT_ID}" \ --data-binary @/tmp/note_payload.json "https://containeranalysis.googleapis.com/v1/projects/${NOTE_PROJECT_ID}/notes/?noteId=${NOTE_ID}"
Remplacez
NOTE_PROJECT_ID
par l'ID du projet contenant la note.Facultatif : pour vérifier que vous avez bien créé la note, procédez comme suit :
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: NOTE_PROJECT_ID" \ "https://containeranalysis.googleapis.com/v1/projects/NOTE_PROJECT_ID/notes/"
Remplacez
NOTE_PROJECT_ID
par l'ID du projet contenant la note.
Tester la CV
Dans cette section, vous allez tester la CV en déployant l'image pour laquelle vous avez créé une attestation. Dans ce cas, la vérification d'attestation de signature simple CV vérifie l'attestation et ne produit aucune entrée de journal.
Vous tenterez ensuite de déployer une autre image sans attestation. Dans ce cas, la vérification CV ne trouve pas l'attestation et consigne la violation dans Cloud Logging.
Créez un certificat
Pour satisfaire la vérification, l'image doit posséder une attestation valide. Pour créer l'attestation, procédez comme suit :
Créez les variables que vous utiliserez pour créer l'attestation :
IMAGE_PATH=us-docker.pkg.dev/google-samples/containers/gke/hello-app IMAGE_DIGEST=sha256:37e5287945774f27b418ce567cd77f4bbc9ef44a1bcd1a2312369f31f9cce567 IMAGE_TO_ATTEST="${IMAGE_PATH}@${IMAGE_DIGEST}"
Créez un fichier de charge utile de signature :
cat > /tmp/generated_payload.json << EOM { "critical": { "identity": { "docker-reference": "${IMAGE_PATH}" }, "image": { "docker-manifest-digest": "${IMAGE_DIGEST}" }, "type": "Google cloud binauthz container signature" } } EOM
Créez l'attestation :
Signez la charge utile :
PKIX Cloud KMS
gcloud kms asymmetric-sign \ --version=${KMS_KEY_VERSION} \ --key=${KMS_KEY_NAME} \ --keyring=${KMS_KEYRING_NAME} \ --location=${KMS_KEY_LOCATION} --digest-algorithm sha256 \ --input-file=/tmp/generated_payload.json \ --signature-file=/tmp/ec_signature \ --project=${KMS_KEY_PROJECT_ID}
Clé locale
openssl dgst -sha256 -sign ${PRIVATE_KEY_FILE} /tmp/generated_payload.json > /tmp/ec_signature
Créez le contenu de l'attestation :
cat > /tmp/attestation.json << EOM { "resourceUri": "${IMAGE_TO_ATTEST}", "note_name": "${NOTE_URI}", "attestation": { "serialized_payload": "$(base64 --wrap=0 /tmp/generated_payload.json)", "signatures": [{ "public_key_id": "${PUBLIC_KEY_ID}", "signature": "$(base64 --wrap=0 /tmp/ec_signature)" }] } } EOM
Créez l'attestation :
curl -X POST "https://containeranalysis.googleapis.com/v1/projects/${NOTE_PROJECT_ID}/occurrences/" \ -H "Content-Type: application/json" \ -H "X-Goog-User-Project: ${NOTE_PROJECT_ID}" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ --data-binary @/tmp/attestation.json
Remplacez
NOTE_PROJECT_ID
par l'ID du projet contenant la note.
Déployer l'image contenant une attestation
Pour déployer une image pour laquelle une attestation a été créée, procédez comme suit :
Configurez
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID
Remplacez les éléments suivants :
CLUSTER_NAME
: nom du clusterLOCATION
: emplacement du clusterCLUSTER_PROJECT_ID
: ID de projet du cluster
Déployez un service et vérifiez le déploiement par rapport à la règle d'autorisation binaire :
kubectl run hello-app --image=$IMAGE_PATH@$IMAGE_DIGEST
Le pod a été déployé. Comme l'image possède une attestation, la CV ne produit pas d'entrées de journal associées à ce pod.
Déployer une image sans attestation
Dans cette section, vous allez déployer une image sans attestation associée.
Étant donné que la stratégie nécessite des attestations et que cette image n'en a pas, la CV consigne régulièrement la violation pendant l'exécution du conteneur.
Pour déployer l'image, exécutez la commande suivante :
kubectl run hello-app-no-attestation \
--image=gcr.io/google-samples/hello-app@sha256:845f77fab71033404f4cfceaa1ddb27b70c3551ceb22a5e7f4498cdda6c9daea
Le pod a été déployé. Comme l'image n'a pas d'attestation, la CV génère des entrées de journal pendant l'exécution du pod.
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 clusterLOCATION
: emplacement du clusterCLUSTER_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 clusterLOCATION
: emplacement du clusterCLUSTER_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èglePOLICY_PROJECT_ID
: ID du projet de règles
Étapes suivantes
- Utiliser la vérification de fraîcheur d'image
- Utiliser la vérification d'attestation de signature simple
- Utiliser la vérification de signature Sigstore
- Utiliser la vérification SLSA
- Utiliser la vérification du répertoire de confiance
- Utiliser la vérification des failles
- Afficher les journaux CV