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

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 champ protoPayload.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.

Les nouveaux utilisateurs de Trusted 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 clés ou des CA autogérées.

  2. Activez les API Cloud Audit Logging Service suivantes :

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 :

  1. Dans la console Trusted 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 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 :

  1. Dans la console Trusted 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 CA Service

Pour trouver les journaux CA Service qui correspondent aux événements d'émission de certificats GKE, procédez comme suit :

  1. Dans la console Trusted 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 le CERTIFICATE_HASH de la section Vérifier l'utilisation du certificat avec les journaux de l'API Kubernetes. Assurez-vous d'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 trouver les événements de signature Cloud KMS pour les événements d'émission de certificats CA Service, procédez comme suit :

  1. Dans la console Trusted 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ésumé de la section Vérifier l'émission de certificats avec les journaux Certificate Authority Service.

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

  1. Dans la console Trusted 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 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 :

  1. Dans la console Trusted 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 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 :

  1. Dans la console Trusted 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 de 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 journaux pour les deux sont donc identiques.

Étapes suivantes