Verificar la emisión y el uso de la identidad

.

En esta página se explica cómo usar los registros para comprobar la emisión y el uso de identidades de Kubernetes, en forma de certificados y tokens de cuenta de servicio, por parte del plano de control del clúster de Google Kubernetes Engine (GKE). Esta verificación es totalmente opcional y no es necesaria para proteger tu plano de control.

Esta guía está dirigida a administradores de seguridad y propietarios de plataformas que tengan requisitos de cumplimiento o de políticas específicos de la organización para controlar la emisión y la firma de credenciales. Ya deberías haber configurado claves y autoridades de certificación autogestionadas con la autoridad del plano de control de GKE.

Ya deberías conocer los siguientes conceptos:

En esta página se describe una parte de un conjunto de funciones opcionales del plano de control de GKE que te permiten realizar tareas como verificar el estado de seguridad del plano de control o configurar el cifrado y la firma de credenciales en el plano de control mediante claves que tú gestionas. Para obtener más información, consulta el artículo Acerca de la autoridad del plano de control de GKE.

De forma predeterminada, Google Cloud aplica varias medidas de seguridad al plano de control gestionado. En esta página se describen las funciones opcionales que le ofrecen más visibilidad o control sobre el plano de control de GKE.

Acerca de los registros de emisión de documentos de identificación

Los registros de emisión de identidades de GKE son registros de auditoría del plano de control que registran cuándo emite el plano de control las credenciales y cuándo se utilizan esas credenciales en el clúster. Puedes usar estos registros para monitorizar el ciclo de vida de una credencial, incluidos la emisión y el uso, correlacionando los registros de emisión de identidades con los registros de Cloud KMS, Certificate Authority Service y la API de Kubernetes. Los registros de emisión de identidades de GKE se habilitan cuando se usa la autoridad del plano de control de GKE. Estos registros monitorizan la emisión y el uso de los siguientes tipos de credenciales:

  • Certificados X.509
  • JSON Web Tokens (JWTs) de clústeres

Certificados X.509

Kubernetes usa certificados X.509 para la autenticación de certificados de cliente. Para emitir certificados, el plano de control de Kubernetes envía una CertificateSigningRequest aprobada a una autoridad de certificación (CA) en el Servicio de Autoridades de Certificación. A continuación, la AC emite un certificado con la clave correspondiente de Cloud KMS para firmar el resumen del certificado.

Los registros del servidor de la API de Kubernetes contienen detalles de la firma del certificado de cualquier llamada a la API de Kubernetes que se haya autenticado con un certificado. La entrada de ID de credencial del registro tiene el siguiente formato:

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

El valor CERTIFICATE_HASH es el hash SHA256 del certificado, que puedes usar para monitorizar el ciclo de vida del certificado.

Puede usar los registros de certificados del servidor de la API de Kubernetes para monitorizar el ciclo de vida del certificado correlacionando los registros de los siguientes servicios:

  • Registros de emisión de identidades de GKE: usa la consulta protoPayload.metadata.credentialId para buscar registros de emisión de identidades de GKE específicos en función del ID de credencial de los registros del servidor de la API de Kubernetes. A continuación, usa el campo protoPayload.metadata.certificateFingerprint del registro de emisión de identidades de GKE para correlacionar los registros de emisión de identidades con los registros del servicio de AC.
  • Registros del servicio de CA: busca la entrada del registro de emisión de certificados, que contiene los siguientes IDs:
    • cert_fingerprint.sha256_hash: el hash SHA256 del certificado firmado. Usa este ID para asociar los registros con los eventos de la API de GKE y Kubernetes.
    • tbs_certificate_digest: un hash del contenido del certificado que se ha enviado para que lo firme una clave de Cloud KMS. Usa este ID para asociar los registros con los registros de Cloud KMS.
  • Registros de firma de Cloud KMS: usa el valor tbs_certificate_digest del registro del servicio de AC para confirmar que la clave de Cloud KMS esperada ha firmado el certificado.

JSON Web Tokens (JWTs)

Los JWTs (JSON Web Tokens) firmados se usan como tokens de portador para las entidades del clúster, como las cuentas de servicio de Kubernetes, al autenticar solicitudes a la API de Kubernetes. Cuando se crea un pod que usa una cuenta de servicio específica, Kubernetes crea un JWT y lo monta en el pod. Cuando usas la autoridad del plano de control de GKE para ejecutar tus propias claves y CAs, este JWT se firma y se verifica más adelante con la clave de firma de la cuenta de servicio en Cloud KMS.

Los registros del servidor de la API de Kubernetes contienen detalles de la firma del token de cualquier llamada a la API de Kubernetes que se haya autenticado con un JWT. La entrada de firma del token del registro tiene el siguiente formato:

"authentication.kubernetes.io/credential-id":"JTI=JWT_ID"

El valor JWT_ID es una cadena que identifica el JWT que se ha usado en la llamada a la API de Kubernetes.

Puede usar el ID de JWT de los registros del servidor de la API de Kubernetes para monitorizar el ciclo de vida de un JWT correlacionando los siguientes registros:

  • Registros de emisión de identidades de GKE: usa el ID de JWT de los registros del servidor de la API de Kubernetes para encontrar entradas de emisión de JWT específicas. Cada entrada también contiene el campo toBeSignedDigest, cuyo valor puede coincidir con los registros de Cloud KMS.
  • Registros de firma de Cloud KMS: usa el valor del campo toBeSignedDigest de los registros de emisión de identidades de GKE para confirmar que la clave de Cloud KMS esperada ha firmado el JWT.

Precios

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Antes de empezar

  1. Configura el plano de control de tu clúster de GKE con CAs o claves autogestionadas.

  2. Habilita las siguientes APIs de servicio de registros de auditoría de Cloud:

Roles obligatorios

Para obtener los permisos que necesitas para acceder a los registros de emisión de identidades, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto:

  • Realizar todas las acciones en Logging: Administrador de Logging (roles/logging.admin).
  • Para ver los registros, haz lo siguiente: Visualizador de registros privados (roles/logging.privateLogViewer).

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Requisitos y limitaciones

Se aplican los siguientes requisitos y limitaciones:

  • Debes usar la versión 1.31.1-gke.1846000 de GKE o una posterior.
  • Los registros de emisión de identidades se registran como registros de auditoría de Cloud y tienen un periodo de conservación de 400 días. El periodo de conservación no se puede configurar, pero puedes enviar los registros de auditoría de eventos del sistema a otros destinos para que se conserven durante más tiempo.

Verificar certificados

Puede usar los registros de emisión de identidades de la autoridad del plano de control de GKE para confirmar que se ha emitido o utilizado un certificado correctamente. Puede usar cualquiera de los siguientes registros o una combinación de ellos para confirmar información sobre la emisión y el uso de certificados:

Registros de certificados

Registro de la API de Kubernetes para el uso de certificados

Registra los detalles de la firma del certificado cada vez que se usa con la API de Kubernetes.

Registro de GKE de las operaciones de emisión de certificados

Registra todas las operaciones de emisión de certificados como un registro de auditoría de eventos del sistema. Estos registros están habilitados de forma predeterminada en cualquier clúster que utilice claves o CAs gestionadas por el usuario de la autoridad del plano de control de GKE.

Registro de auditoría del servicio de CA

Registra una entrada cada vez que se emite un certificado.

Registro de auditoría de Cloud KMS

Registra una entrada cada vez que se firma un resumen en respuesta a una solicitud de firma del servicio de AC.

Verificar el uso de certificados con los registros de la API de Kubernetes

Para encontrar entradas de registro de llamadas a la API que se autenticaron mediante certificados, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Explorador de registros:

    Ve al Explorador de registros.

  2. Pega la siguiente expresión en el campo del editor de consultas:

    log_id("cloudaudit.googleapis.com/activity")
    resource.type="k8s_cluster"
    labels."authentication.kubernetes.io/credential-id":"X509SHA256="
    
  3. Haz clic en Realizar una consulta.

    Esta consulta devuelve todos los registros del servidor de la API de Kubernetes que tienen un certificado X.509 asociado. Busca entradas de registro específicas para investigar mediante tus herramientas de seguridad o consultando los registros manualmente.

Para correlacionar estos registros con otros tipos de registros, busca el siguiente campo:

"authentication.k8s.io/credential-id":"CREDENTIAL_ID"

El valor CREDENTIAL_ID es el identificador que puedes usar para correlacionar los registros de GKE, Servicio de Autoridades de Certificación y Cloud KMS. El CREDENTIAL_ID tiene el formato "X509SHA256=CERTIFICATE_HASH".

Verificar la emisión de certificados con los registros de GKE

Para encontrar las entradas de registro de GKE de los eventos de emisión de certificados, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Explorador de registros:

    Ir a Explorador de registros

  2. Pega la siguiente expresión en el campo del editor de consultas:

    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event"
    resource.type="gke_cluster"
    protoPayload.serviceName="container.googleapis.com"
    protoPayload.metadata.credentialId="CREDENTIAL_ID"
    

    Haz los cambios siguientes:

  3. Haz clic en Realizar una consulta.

Verificar la emisión de certificados con los registros del servicio de CA

Para encontrar los registros del servicio de CA que coincidan con los eventos de emisión de certificados de GKE, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Explorador de registros:

    Ir a Explorador de registros

  2. Pega la siguiente expresión en el campo del editor de consultas:

    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"
    

    Sustituye CERTIFICATE_HASH por el CERTIFICATE_HASH de la sección Verificar el uso del certificado con los registros de la API de Kubernetes. Asegúrate de omitir el prefijo X509SHA256= del hash.

  3. Haz clic en Realizar una consulta.

    Esta consulta devuelve un registro que contiene un campo tbs_certificate_digest: DIGEST_VALUE en la sección de respuesta de la descripción del certificado.

Puedes usar DIGEST_VALUE para buscar los registros de firma de Cloud KMS del certificado.

Verificar la emisión de certificados con los registros de firma de Cloud KMS

Para encontrar eventos de firma de Cloud KMS de los eventos de emisión de certificados del servicio de AC, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Explorador de registros:

    Ir a Explorador de registros

  2. Pega la siguiente expresión en el campo del editor de consultas:

    protoPayload.request.digest.sha256="DIGEST_VALUE"
    protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"
    protoPayload.methodName="AsymmetricSign"
    protoPayload.serviceName="cloudkms.googleapis.com"
    

    Sustituye DIGEST_VALUE por el valor del resumen de la sección Verificar la emisión de certificados con los registros del Servicio de Autoridades de Certificación.

  3. Haz clic en Realizar una consulta.

    Esta consulta devuelve los registros de los eventos de emisión de certificados. Los registros de Cloud KMS no distinguen entre certificados y JWTs, por lo que las entradas de registro de ambos son idénticas.

Verificar tokens

Puedes usar los registros de emisión de identidades de la autoridad del plano de control de GKE y los registros de firma de Cloud KMS para confirmar que se ha emitido correctamente un JSON Web Token (JWT).

Para iniciar el seguimiento del evento de emisión de tokens, normalmente se empieza por monitorizar el registro de la API de Kubernetes para ver la actividad de la cuenta de servicio. Una vez que hayas identificado un registro de actividad que necesite una investigación más a fondo, puedes usar los siguientes registros para confirmar información sobre la emisión y el uso de credenciales:

Registros de JWT

Registro de la API de Kubernetes para el uso de JWT

Registra los detalles de la firma JWT cada vez que se usa un JWT en la API de Kubernetes.

Registro de GKE de las operaciones de emisión de JWT

Registra todas las operaciones de emisión de tokens como un registro de auditoría de eventos del sistema. Estos registros están habilitados de forma predeterminada en cualquier clúster que utilice claves o CAs gestionadas por el usuario de la autoridad del plano de control de GKE.

Registro de auditoría de Cloud KMS

Registra una entrada cada vez que se firma y se emite un token.

Verificar el uso del token con los registros del servidor de la API de Kubernetes

Para encontrar las entradas de registro de los eventos de uso de tokens, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Explorador de registros:

    Ir a Explorador de registros

  2. Pega la siguiente expresión en el campo del editor de consultas:

    log_id("cloudaudit.googleapis.com/activity")
    resource.type="k8s_cluster"
    labels."authentication.kubernetes.io/credential-id":"JTI="
    
  3. Haz clic en Realizar una consulta.

    Esta consulta devuelve todos los registros del servidor de la API de Kubernetes que tienen un JWT asociado. Busca entradas de registro específicas para investigar mediante tus herramientas de seguridad o comprobando los registros manualmente.

Para correlacionar estos registros con otros tipos de registros, busca el siguiente campo:

"authentication.k8s.io/credential-id": "JTI=JWT_ID"

El JWT_ID es el identificador de token que puedes usar para relacionar los registros de GKE y Cloud KMS.

Verificar la emisión de tokens con los registros de GKE

Para encontrar las entradas de registro de los eventos de emisión de tokens, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Explorador de registros:

    Ir a Explorador de registros

  2. Pega la siguiente expresión en el campo del editor de consultas:

    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"
    

    Haz los cambios siguientes:

  3. Haz clic en Realizar una consulta.

    Esta consulta devuelve registros que contienen un campo toBeSignedDigest.

Puedes usar el valor toBeSignedDigest para buscar eventos de firma de Cloud KMS.

Verificar la emisión de tokens con los registros de firma de Cloud KMS

Para encontrar las entradas de registro de los resúmenes firmados, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Explorador de registros:

    Ve al Explorador de registros.

  2. Pega la siguiente expresión en el campo del editor de consultas:

    protoPayload.request.digest.sha256="DIGEST_VALUE"
    protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"
    protoPayload.methodName="AsymmetricSign"
    protoPayload.serviceName="cloudkms.googleapis.com"
    

    Sustituye DIGEST_VALUE por el valor del campo toBeSignedDigest de la sección Verificar la emisión de tokens con los registros de GKE.

  3. Haz clic en Realizar una consulta.

    Esta consulta devuelve los registros de los eventos de emisión de certificados. Los registros de Cloud KMS no distinguen entre certificados y JWTs, por lo que las entradas de registro de ambos son idénticas.

Siguientes pasos