Cette page explique comment utiliser les journaux pour vérifier l'émission et l'utilisation des identités Kubernetes, sous la forme de certificats et de jetons de compte de service, par le plan de contrôle du cluster Google Kubernetes Engine (GKE). Cette validation est entièrement facultative et n'est pas requise pour sécuriser votre plan de contrôle.
Ce guide s'adresse aux administrateurs de sécurité et aux propriétaires de plates-formes qui ont des exigences spécifiques en termes de conformité ou de règles organisationnelles pour contrôler l'émission et la signature des identifiants. Vous devez déjà avoir configuré des clés et des CA autogérés avec l'autorité du plan de contrôle GKE.
Vous devez déjà connaître les concepts suivants :
- Journaux du service d'autorité de certification
- Journaux Cloud KMS
- Journalisation d'audit Kubernetes
- Certificats X.509
Cette page décrit l'une des fonctionnalités facultatives du plan de contrôle dans GKE. Elle vous permet d'effectuer des tâches telles que la vérification de la stratégie de sécurité de votre plan de contrôle ou la configuration du chiffrement et de la signature des identifiants dans le plan de contrôle à l'aide de clés que vous gérez. Pour en savoir plus, consultez À propos de l'autorité du plan de contrôle GKE.
Par défaut, Trusted Cloud applique diverses mesures de sécurité au plan de contrôle géré. Cette page décrit les fonctionnalités facultatives qui vous offrent une meilleure visibilité ou un meilleur contrôle sur le plan de contrôle GKE.
À propos des journaux d'émission d'identité
Les journaux d'émission d'identité GKE sont des journaux d'audit du plan de contrôle qui enregistrent le moment où le plan de contrôle émet des identifiants et le moment où ces identifiants sont utilisés dans le cluster. Vous pouvez utiliser ces journaux pour suivre la durée de vie d'un identifiant, y compris son émission et son utilisation, en corrélant les journaux d'émission d'identité avec les journaux Cloud KMS, Certificate Authority Service et de l'API Kubernetes. Les journaux d'émission d'identité GKE sont activés lorsque vous utilisez l'autorité du plan de contrôle GKE. Ces journaux suivent l'émission et l'utilisation des types d'identifiants suivants :
- Certificats X.509
- Jetons Web JSON (JWT) du cluster
Certificats X.509
Kubernetes utilise des certificats X.509 pour l'authentification par certificat client. Pour émettre des certificats, le plan de contrôle Kubernetes envoie une CertificateSigningRequest approuvée à une autorité de certification (CA) dans CA Service. L'autorité de certification émet ensuite un certificat à l'aide de la clé correspondante dans Cloud KMS pour signer le résumé du certificat.
Les journaux du serveur d'API Kubernetes contiennent des informations sur la signature des certificats pour tout appel de l'API Kubernetes authentifié avec un certificat. L'entrée de l'ID d'identifiant dans le journal se présente comme suit :
"authentication.k8s.io/credential-id": "X509SHA256=CERTIFICATE_HASH"
La valeur CERTIFICATE_HASH
correspond au hachage SHA256 du certificat, que vous pouvez utiliser pour suivre le cycle de vie du certificat.
Vous pouvez utiliser les journaux de certificats du serveur d'API Kubernetes pour suivre le cycle de vie du certificat en corrélant les journaux des services suivants :
- Journaux d'émission d'identité GKE : utilisez la requête
protoPayload.metadata.credentialId
pour trouver des journaux d'émission d'identité GKE spécifiques en fonction de l'ID d'identifiant des journaux du serveur d'API Kubernetes. Utilisez ensuite le champprotoPayload.metadata.certificateFingerprint
du journal d'émission d'identité GKE pour corréler les journaux d'émission d'identité avec les journaux CA Service. - Journaux CA Service : recherchez l'entrée de journal d'émission de certificat, qui contient les ID suivants :
cert_fingerprint.sha256_hash
: hachage SHA-256 du certificat signé. Utilisez cet ID pour faire correspondre les journaux aux événements des API GKE et Kubernetes.tbs_certificate_digest
: hachage du contenu du certificat qui a été envoyé pour être signé par une clé Cloud KMS. Utilisez cet ID pour faire correspondre les journaux avec les journaux Cloud KMS.
- Journaux de signature Cloud KMS : utilisez la valeur
tbs_certificate_digest
du journal du service d'autorité de certification pour confirmer que la clé Cloud KMS attendue a signé le certificat.
Jetons Web JSON (JWT)
Les JWT (jetons Web JSON) signés sont utilisés comme jetons porteurs pour les entités du cluster, comme les comptes de service Kubernetes, lors de l'authentification des requêtes adressées à l'API Kubernetes. Lorsqu'un pod est créé et utilise un compte de service spécifique, Kubernetes crée un jeton JWT et le monte dans le pod. Lorsque vous utilisez l'autorité du plan de contrôle GKE pour exécuter vos propres clés et CA, ce jeton JWT est signé, puis validé à l'aide de la clé de signature du compte de service dans Cloud KMS.
Les journaux du serveur d'API Kubernetes contiennent des informations sur la signature des jetons pour tout appel d'API Kubernetes authentifié avec un JWT. L'entrée de signature du jeton dans le journal se présente comme suit :
"authentication.kubernetes.io/credential-id":"JTI=JWT_ID"
La valeur JWT_ID
est une chaîne qui identifie le jeton JWT utilisé dans l'appel d'API Kubernetes.
Vous pouvez utiliser l'ID JWT des journaux du serveur d'API Kubernetes pour suivre le cycle de vie d'un jeton JWT en corrélant les journaux suivants :
- Journaux d'émission d'identité GKE : utilisez l'ID JWT des journaux du serveur d'API Kubernetes pour trouver des entrées d'émission JWT spécifiques. Chaque entrée contient également le champ
toBeSignedDigest
, dont la valeur peut correspondre aux journaux Cloud KMS. - Journaux de signature Cloud KMS : utilisez la valeur du champ
toBeSignedDigest
des journaux d'émission d'identité GKE pour confirmer que la clé Cloud KMS attendue a signé le jeton JWT.
Tarifs
Dans ce document, vous utilisez les composants facturables suivants de Trusted Cloud by S3NS :
Pour obtenir une estimation des coûts en fonction de votre utilisation prévue, utilisez le simulateur de coût.
Avant de commencer
Configurez le plan de contrôle de votre cluster GKE avec des clés ou des CA autogérées.
Activez les API Cloud Audit Logging Service suivantes :
- Pour Cloud KMS, activez les journaux d'audit d'accès aux données de type Lecture de données.
- Pour le service d'autorité de certification, activez les journaux d'audit d'accès aux données de types Lecture administrateur et Écriture de données.
Rôles requis
Pour obtenir les autorisations nécessaires pour accéder aux journaux d'émission d'identité, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :
-
Effectuer toutes les actions dans Logging :
Administrateur Logging (
roles/logging.admin
). -
Afficher les journaux :
Lecteur des journaux privés (
roles/logging.privateLogViewer
).
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Conditions requises et limites
Les exigences et limites suivantes s'appliquent :
- Vous devez utiliser GKE version 1.31.1-gke.1846000 ou ultérieure.
- Les journaux d'émission d'identité sont enregistrés en tant que journaux Cloud Audit Logs et sont conservés pendant 400 jours. La durée de conservation n'est pas configurable, mais vous pouvez router vos journaux d'audit d'événements système vers d'autres destinations pour des durées de conservation plus longues.
Valider les certificats
Vous pouvez utiliser les journaux d'émission d'identité de l'autorité du plan de contrôle GKE pour confirmer qu'un certificat a bien été émis ou utilisé. Vous pouvez utiliser l'un des journaux suivants ou une combinaison de journaux pour confirmer les informations sur l'émission et l'utilisation des certificats :
Journaux de certificats |
|
---|---|
Journal de l'API Kubernetes pour l'utilisation des certificats |
Enregistre les détails de la signature du certificat chaque fois que le certificat est utilisé avec l'API Kubernetes. |
Journal GKE pour les opérations d'émission de certificats |
Consigne toutes les opérations d'émission de certificats dans un journal d'audit Événement système. Ces journaux sont activés par défaut sur tous les clusters qui utilisent des clés ou des CA gérées par l'utilisateur pour l'autorité du plan de contrôle GKE. |
Journal d'audit du service CA |
Consigne une entrée chaque fois qu'un certificat est émis. |
Journal d'audit Cloud KMS |
Enregistre une entrée chaque fois qu'un résumé est signé, en réponse à une demande de signature du service CA. |
Vérifier l'utilisation du certificat avec les journaux de l'API Kubernetes
Pour trouver les entrées de journaux des appels d'API authentifiés à l'aide de certificats, procédez comme suit :
Dans la console Trusted Cloud , accédez à la page Explorateur de journaux.
Collez l'expression suivante dans le champ de l'éditeur de requête :
log_id("cloudaudit.googleapis.com/activity") resource.type="k8s_cluster" labels."authentication.kubernetes.io/credential-id":"X509SHA256="
Cliquez sur Exécuter la requête.
Cette requête renvoie tous les journaux du serveur d'API Kubernetes associés à un certificat X.509. Recherchez des entrées de journal spécifiques à examiner à l'aide de vos outils de sécurité ou en vérifiant manuellement les journaux.
Pour corréler ces journaux avec d'autres types de journaux, recherchez le champ suivant :
"authentication.k8s.io/credential-id":"CREDENTIAL_ID"
La valeur CREDENTIAL_ID
est l'identifiant que vous pouvez utiliser pour corréler les journaux de GKE, du service d'autorité de certification et de Cloud KMS. Le CREDENTIAL_ID
se présente sous la forme "X509SHA256=CERTIFICATE_HASH"
.
Vérifier l'émission de certificats avec les journaux GKE
Pour trouver les entrées de journaux GKE concernant les événements d'émission de certificats, procédez comme suit :
Dans la console Trusted Cloud , accédez à la page Explorateur de journaux.
Collez l'expression suivante dans le champ de l'éditeur de requête :
logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event" resource.type="gke_cluster" protoPayload.serviceName="container.googleapis.com" protoPayload.metadata.credentialId="CREDENTIAL_ID"
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet.CREDENTIAL_ID
:CREDENTIAL_ID
de la section Vérifier l'utilisation du certificat avec les journaux de l'API Kubernetes.
Cliquez sur Exécuter la requête.
Vérifier l'émission de certificats avec les journaux CA Service
Pour trouver les journaux CA Service qui correspondent aux événements d'émission de certificats GKE, procédez comme suit :
Dans la console Trusted Cloud , accédez à la page Explorateur de journaux.
Collez l'expression suivante dans le champ de l'éditeur de requête :
resource.type="audited_resource" protoPayload.serviceName="privateca.googleapis.com" protoPayload.methodName="google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificate" protoPayload.response.certificate_description.cert_fingerprint.sha256_hash="CERTIFICATE_HASH"
Remplacez
CERTIFICATE_HASH
par leCERTIFICATE_HASH
de la section Vérifier l'utilisation du certificat avec les journaux de l'API Kubernetes. Assurez-vous d'omettre le préfixeX509SHA256=
du hachage.Cliquez sur Exécuter la requête.
Cette requête renvoie un journal contenant un champ
tbs_certificate_digest: DIGEST_VALUE
dans la section de réponse de la description du certificat.
Vous pouvez utiliser DIGEST_VALUE
pour faire correspondre les journaux de signature Cloud KMS au certificat.
Vérifier l'émission de certificats avec les journaux de signature Cloud KMS
Pour trouver les événements de signature Cloud KMS pour les événements d'émission de certificats CA Service, procédez comme suit :
Dans la console Trusted Cloud , accédez à la page Explorateur de journaux.
Collez l'expression suivante dans le champ de l'éditeur de requête :
protoPayload.request.digest.sha256="DIGEST_VALUE" protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog" protoPayload.methodName="AsymmetricSign" protoPayload.serviceName="cloudkms.googleapis.com"
Remplacez
DIGEST_VALUE
par la valeur du résumé de la section Vérifier l'émission de certificats avec les journaux Certificate Authority Service.Cliquez sur Exécuter la requête.
Cette requête renvoie les journaux des événements d'émission de certificats. Les journaux Cloud KMS ne font pas la distinction entre les certificats et les JWT. Les entrées de journaux pour les deux sont donc identiques.
Valider les jetons
Vous pouvez utiliser les journaux d'émission d'identité de l'autorité du plan de contrôle GKE et les journaux de signature Cloud KMS pour confirmer qu'un jeton Web JSON (JWT) a bien été émis.
Le traçage de l'événement d'émission de jeton commence généralement par la surveillance du journal de l'API Kubernetes pour l'activité du compte de service. Une fois que vous avez identifié un journal d'activité nécessitant un examen plus approfondi, vous pouvez utiliser les journaux suivants pour confirmer les informations sur l'émission et l'utilisation des identifiants :
Journaux JWT |
|
---|---|
Journal de l'API Kubernetes pour l'utilisation de JWT |
Enregistre les détails de la signature JWT chaque fois qu'un JWT est utilisé avec l'API Kubernetes. |
Journal GKE pour les opérations d'émission de JWT |
Enregistre toutes les opérations d'émission de jetons en tant que journal d'audit des événements système. Ces journaux sont activés par défaut sur tous les clusters utilisant des clés ou des CA gérées par l'utilisateur pour l'autorité du plan de contrôle GKE. |
Journal d'audit Cloud KMS |
Consigne une entrée chaque fois qu'un jeton est signé et émis. |
Vérifier l'utilisation des jetons avec les journaux du serveur d'API Kubernetes
Pour trouver les entrées de journal des événements d'utilisation de jetons, procédez comme suit :
Dans la console Trusted Cloud , accédez à la page Explorateur de journaux.
Collez l'expression suivante dans le champ de l'éditeur de requête :
log_id("cloudaudit.googleapis.com/activity") resource.type="k8s_cluster" labels."authentication.kubernetes.io/credential-id":"JTI="
Cliquez sur Exécuter la requête.
Cette requête renvoie tous les journaux du serveur d'API Kubernetes associés à un JWT. Recherchez des entrées de journal spécifiques à examiner à l'aide de vos outils de sécurité ou en vérifiant manuellement les journaux.
Pour corréler ces journaux avec d'autres types de journaux, recherchez le champ suivant :
"authentication.k8s.io/credential-id": "JTI=JWT_ID"
JWT_ID
est l'identifiant du jeton que vous pouvez utiliser pour corréler les journaux de GKE et Cloud KMS.
Valider l'émission de jetons avec les journaux GKE
Pour trouver les entrées de journal des événements d'émission de jetons, procédez comme suit :
Dans la console Trusted Cloud , accédez à la page Explorateur de journaux.
Collez l'expression suivante dans le champ de l'éditeur de requête :
resource.type="gke_cluster" logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event" protoPayload.methodName="google.cloud.gkeauth.v1.Auth.SignServiceAccountJWT" protoPayload.metadata.credentialId="JTI=JWT_ID"
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet.JWT_ID
: ID JWT de la section Vérifier l'utilisation du jeton avec les journaux du serveur d'API Kubernetes.
Cliquez sur Exécuter la requête.
Cette requête renvoie les journaux contenant un champ
toBeSignedDigest
.
Vous pouvez utiliser la valeur toBeSignedDigest
pour trouver les événements de signature Cloud KMS.
Vérifier l'émission de jetons avec les journaux de signature Cloud KMS
Pour trouver les entrées de journal des résumés signés, procédez comme suit :
Dans la console Trusted Cloud , accédez à la page Explorateur de journaux.
Collez l'expression suivante dans le champ de l'éditeur de requête :
protoPayload.request.digest.sha256="DIGEST_VALUE" protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog" protoPayload.methodName="AsymmetricSign" protoPayload.serviceName="cloudkms.googleapis.com"
Remplacez
DIGEST_VALUE
par la valeur du champtoBeSignedDigest
de la section Valider l'émission de jetons avec les journaux GKE.Cliquez sur Exécuter la requête.
Cette requête renvoie les journaux des événements d'émission de certificats. Les journaux Cloud KMS ne font pas la distinction entre les certificats et les JWT. Les entrées de journaux pour les deux sont donc identiques.
Étapes suivantes
- En savoir plus sur la sécurité du plan de contrôle
- En savoir plus sur l'accès administrateur pour les employés Google
- Découvrez comment configurer la journalisation et la surveillance pour GKE.
- Découvrez comment configurer l'accès aux journaux au niveau des champs.
- En savoir plus sur les limites d'utilisation pour Logging