Vérifier l'émission et l'utilisation d'une identité


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 nécessaire 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 de conformité ou de règles organisationnelles spécifiques pour contrôler l'émission et la signature d'identifiants. Vous devez déjà avoir configuré des clés et des autorités de certification autogérées avec l'autorité du plan de contrôle GKE.

Vous devez déjà connaître les concepts suivants:

Cette page décrit une partie d'un ensemble de fonctionnalités facultatives du plan de contrôle dans GKE qui 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 la section À propos de l'autorité du plan de contrôle GKE.

Par défaut, Google 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 quand 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 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) de 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écapitulatif du certificat.

Les journaux du serveur d'API Kubernetes contiennent des informations sur la signature du certificat pour tout appel d'API Kubernetes authentifié avec un certificat. L'entrée d'ID d'identifiants dans le journal se présente sous la forme suivante:

"authentication.k8s.io/credential-id": "X509SHA256=CERTIFICATE_HASH"

La valeur CERTIFICATE_HASH correspond au hachage SHA256 du certificat, que vous pouvez utiliser pour suivre son cycle de vie.

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 rechercher 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 champ protoPayload.metadata.certificateFingerprint du journal d'émission d'identité GKE pour mettre en corrélation les journaux d'émission d'identité avec les journaux de service CA.
  • Journaux du service CA: 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 d'API GKE et Kubernetes.
    • tbs_certificate_digest: hachage du contenu du certificat envoyé pour être signé par une clé Cloud KMS. Utilisez cet ID pour faire correspondre les journaux aux 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 jetons Web JSON (JWT) 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 envoyées à l'API Kubernetes. Lorsqu'un pod est créé qui 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 autorités de certification, ce jeton JWT est signé et validé ultérieurement à 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 du jeton pour tout appel d'API Kubernetes authentifié avec un JWT. L'entrée de signature de jeton dans le journal se présente sous la forme suivante:

"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 de jetons 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 Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. Configurez le plan de contrôle de votre cluster GKE avec des autorités de certification ou des clés autogérées.

  2. Activez les API du service Cloud Audit Logging suivantes:

Rôles requis

Pour obtenir les autorisations nécessaires pour accéder aux journaux d'émission d'identités, 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 la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises via 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 ont une période de conservation définie de 400 jours. La durée de conservation n'est pas configurable, mais vous pouvez acheminer vos journaux d'audit des événements système vers d'autres destinations pour une durée de conservation plus longue.

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

Enregistre toutes les opérations d'émission de certificats en tant que 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 autorités de certification gérées par l'utilisateur de l'autorité du plan de contrôle GKE.

Journal d'audit du service CA

Ajoute une entrée chaque fois qu'un certificat est émis.

Journal d'audit Cloud KMS

Enregistre une entrée chaque fois qu'un récapitulatif 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 rechercher des entrées de journal pour les appels d'API authentifiés à l'aide de certificats, procédez comme suit:

  1. Dans la console Google Cloud , accédez à la page Explorateur de journaux:

    Accéder à l'explorateur de journaux

  2. 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="
    
  3. 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 consultant manuellement les journaux.

Pour mettre en corrélation 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 mettre en corrélation les journaux de GKE, du service d'autorité de certification et de Cloud KMS. CREDENTIAL_ID se présente sous la forme "X509SHA256=CERTIFICATE_HASH".

Vérifier l'émission de certificats avec les journaux GKE

Pour rechercher des entrées de journal GKE pour les événements d'émission de certificats, procédez comme suit:

  1. Dans la console Google Cloud , accédez à la page Explorateur de journaux:

    Accéder à l'explorateur de journaux

  2. 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 :

  3. Cliquez sur Exécuter la requête.

Vérifier l'émission de certificats avec les journaux du service CA

Pour rechercher les journaux du service CA correspondant aux événements d'émission de certificats GKE, procédez comme suit:

  1. Dans la console Google Cloud , accédez à la page Explorateur de journaux:

    Accéder à l'explorateur de journaux

  2. 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 CERTIFICATE_HASH de la section Vérifier l'utilisation du certificat avec les journaux de l'API Kubernetes. Veillez à omettre le préfixe X509SHA256= du hachage.

  3. 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 rechercher des événements de signature Cloud KMS pour les événements d'émission de certificats du service d'autorité de certification, procédez comme suit:

  1. Dans la console Google Cloud , accédez à la page Explorateur de journaux:

    Accéder à l'explorateur de journaux

  2. 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écapitulatif de la section Valider l'émission de certificats avec les journaux du service d'autorité de certification.

  3. 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 journal des 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.

L'initiation de la traçabilité de l'événement d'émission de jetons 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 qui utilisent des clés ou des autorités de certification gérées par l'utilisateur du plan de contrôle GKE.

Journal d'audit Cloud KMS

Enregistre une entrée chaque fois qu'un jeton est signé et émis.

Vérifier l'utilisation des jetons à l'aide des journaux du serveur d'API Kubernetes

Pour rechercher des entrées de journal pour les événements d'utilisation des jetons, procédez comme suit:

  1. Dans la console Google Cloud , accédez à la page Explorateur de journaux:

    Accéder à l'explorateur de journaux

  2. 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="
    
  3. Cliquez sur Exécuter la requête.

    Cette requête renvoie tous les journaux du serveur d'API Kubernetes associés à un jeton 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 mettre en corrélation 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 de jeton que vous pouvez utiliser pour mettre en corrélation les journaux de GKE et de Cloud KMS.

Vérifier l'émission de jetons avec les journaux GKE

Pour rechercher des entrées de journal pour les événements d'émission de jetons, procédez comme suit:

  1. Dans la console Google Cloud , accédez à la page Explorateur de journaux:

    Accéder à l'explorateur de journaux

  2. 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 :

  3. Cliquez sur Exécuter la requête.

    Cette requête renvoie les journaux contenant un champ toBeSignedDigest.

Vous pouvez utiliser la valeur toBeSignedDigest pour rechercher des événements de signature Cloud KMS.

Vérifier l'émission de jetons avec les journaux de signature Cloud KMS

Pour rechercher des entrées de journal pour les récapitulatifs signés, procédez comme suit:

  1. Dans la console Google Cloud , accédez à la page Explorateur de journaux:

    Accéder à l'explorateur de journaux

  2. 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 champ toBeSignedDigest, dans la section Valider l'émission de jetons avec les journaux GKE.

  3. 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 journal des deux sont donc identiques.

Étape suivante