Verifica el uso y la emisión de identidades


En esta página, se muestra cómo usar los registros para verificar la emisión y el uso de identidades de Kubernetes, en forma de certificados y tokens de cuentas de servicio, por parte del plano de control del clúster de Google Kubernetes Engine (GKE). Esta verificación es completamente 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 tienen requisitos de cumplimiento o políticas de la organización específicos para controlar la emisión y firma de credenciales. Ya deberías haber configurado claves y AC autoadministradas 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 en GKE que te permiten realizar tareas como verificar la postura de seguridad del plano de control o configurar la encriptación y la firma de credenciales en el plano de control con las claves que administras. Para obtener más información, consulta Acerca de la autoridad del plano de control de GKE.

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

Acerca de los registros de emisión de identidad

Los registros de emisión de identidad de GKE son registros de auditoría del plano de control que registran cuándo el plano de control emite credenciales y cuándo se usan en el clúster. Puedes usar estos registros para hacer un seguimiento de la vida útil de una credencial, incluido el uso y la emisión, correlacionando los registros de emisión de identidad 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 hacen un seguimiento de la emisión y el uso de los siguientes tipos de credenciales:

  • Certificados X.509
  • Tokens web JSON (JWT) del clúster

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 certificadora (AC) en el servicio de AC. Luego, la AC emite un certificado con la clave correspondiente en 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 del ID de credencial en el 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 rastrear el ciclo de vida del certificado.

Puedes usar los registros de certificados del servidor de la API de Kubernetes para hacer un seguimiento del ciclo de vida del certificado correlacionando los registros de los siguientes servicios:

  • Registros de emisión de identidad de GKE: Usa la consulta protoPayload.metadata.credentialId para encontrar registros específicos de emisión de identidad de GKE según el ID de credencial de los registros del servidor de la API de Kubernetes. Luego, usa el campo protoPayload.metadata.certificateFingerprint del registro de emisión de identidad de GKE para correlacionar los registros de emisión de identidad con los registros del servicio de AC.
  • Registros del servicio de AC: Busca la entrada de registro de emisión de certificados, que contiene los siguientes IDs:
    • cert_fingerprint.sha256_hash: Es el hash SHA256 del certificado firmado. Usa este ID para hacer coincidir los registros con los eventos de la API de GKE y Kubernetes.
    • tbs_certificate_digest: Es un hash del contenido del certificado que se envió para que lo firme una clave de Cloud KMS. Usa este ID para hacer coincidir 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 firmó el certificado.

Tokens web JSON (JWT)

Los JWT firmados (tokens web JSON) se usan como tokens del portador para entidades en el clúster, como las cuentas de servicio de Kubernetes, cuando se autentican 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 activa en el Pod. Cuando usas la autoridad del plano de control de GKE para ejecutar tus propias claves y AC, este JWT se firma y, luego, se verifica 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 de tokens para cualquier llamada a la API de Kubernetes que se haya autenticado con un JWT. La entrada de firma del token en el 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 usó en la llamada a la API de Kubernetes.

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

  • Registros de emisión de identidad de GKE: Usa el ID de JWT de los registros del servidor de la API de Kubernetes para encontrar entradas específicas de emisión de JWT. 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 identidad de GKE para confirmar que la clave de Cloud KMS esperada firmó el JWT.

Precios

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Antes de comenzar

  1. Configura el plano de control de tu clúster de GKE con AC o claves administradas por ti.

  2. Habilita las siguientes APIs del servicio de Cloud Audit Logging:

Roles obligatorios

Para obtener los permisos que necesitas para acceder a los registros de emisión de identidades, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

  • Realizar todas las acciones en Logging: Administrador de Logging (roles/logging.admin)
  • Ver registros: Visualizador de registros privados (roles/logging.privateLogViewer).

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

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 período de retención establecido de 400 días. El período de retención no se puede configurar, pero puedes enviar tus registros de auditoría de eventos del sistema a otros destinos para obtener períodos de retención más largos.

Verifica los certificados

Puedes usar los registros de emisión de identidad de la autoridad del plano de control de GKE para confirmar que un certificado se emitió o usó correctamente. Puedes usar cualquiera de los siguientes registros, o una combinación de ellos, para confirmar la 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 el certificado en la API de Kubernetes.

Registro de GKE para operaciones de emisión de certificados

Registra todas las operaciones de emisión de certificados como un registro de auditoría de evento del sistema. Estos registros están habilitados de forma predeterminada en cualquier clúster que use claves o AC administradas 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.

Verifica el uso del certificado con los registros de la API de Kubernetes

Para encontrar entradas de registro de las llamadas a la API que se autenticaron con certificados, completa los siguientes pasos:

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

    Ir 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 Ejecutar consulta.

    Esta consulta muestra todos los registros del servidor de la API de Kubernetes que tienen un certificado X.509 asociado. Encuentra entradas de registro específicas para investigar con tus herramientas de seguridad o revisa los registros de forma manual.

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 registros de GKE, el servicio de AC y Cloud KMS. El CREDENTIAL_ID tiene el formato "X509SHA256=CERTIFICATE_HASH".

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

Para encontrar entradas de registro de GKE para eventos de emisión de certificados, completa los siguientes pasos:

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

    Ir al 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"
    

    Reemplaza lo siguiente:

  3. Haz clic en Ejecutar consulta.

Verifica la emisión de certificados con los registros del servicio de AC

Para encontrar registros del servicio de AC que coincidan con los eventos de emisión de certificados de GKE, completa los siguientes pasos:

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

    Ir al 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"
    

    Reemplaza CERTIFICATE_HASH por el CERTIFICATE_HASH de la sección Verifica 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 Ejecutar consulta.

    Esta consulta muestra 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 hacer coincidir los registros de firma de Cloud KMS del certificado.

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

Para encontrar eventos de firma de Cloud KMS para los eventos de emisión de certificados del servicio de AC, completa los siguientes pasos:

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

    Ir 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"
    

    Reemplaza DIGEST_VALUE por el valor del resumen de la sección Verifica la emisión de certificados con los registros de Certificate Authority Service.

  3. Haz clic en Ejecutar consulta.

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

Verifica los tokens

Puedes usar los registros de emisión de identidad de la autoridad del plano de control de GKE y los registros de firma de Cloud KMS para confirmar que se emitió correctamente un token web JSON (JWT).

Por lo general, iniciar el seguimiento del evento de emisión de tokens comienza con la supervisión del registro de la API de Kubernetes en busca de actividad de la cuenta de servicio. Después de identificar un registro de actividad que necesita una investigación más detallada, puedes usar los siguientes registros para confirmar la 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 de JWT cada vez que se usa un JWT en la API de Kubernetes.

Registro de GKE para 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 use claves o AC administradas 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 emite un token.

Verifica el uso de tokens con los registros del servidor de la API de Kubernetes

Para encontrar entradas de registro de los eventos de uso de tokens, completa los siguientes pasos:

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

    Ir 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":"JTI="
    
  3. Haz clic en Ejecutar consulta.

    Esta consulta muestra todos los registros del servidor de la API de Kubernetes que tienen un JWT asociado. Encuentra entradas de registro específicas para investigar con tus herramientas de seguridad o revisa los registros manualmente.

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

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

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

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

Para encontrar entradas de registro de los eventos de emisión de tokens, completa los siguientes pasos:

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

    Ir al 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"
    

    Reemplaza lo siguiente:

  3. Haz clic en Ejecutar consulta.

    Esta consulta muestra registros que contienen un campo toBeSignedDigest.

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

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

Para encontrar entradas de registro de los resúmenes firmados, completa los siguientes pasos:

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

    Ir 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"
    

    Reemplaza DIGEST_VALUE por el valor en el campo toBeSignedDigest, de la sección Verifica la emisión de tokens con los registros de GKE.

  3. Haz clic en Ejecutar consulta.

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

¿Qué sigue?