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:
- Registros de servicio de la CA
- Registros de Cloud KMS
- Registro de auditoría de Kubernetes
- Certificados X.509
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 campoprotoPayload.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.
Antes de empezar
Configura el plano de control de tu clúster de GKE con CAs o claves autogestionadas.
Habilita las siguientes APIs de servicio de registros de auditoría de Cloud:
- En Cloud KMS, activa los registros de auditoría de acceso a datos de tipo Lectura de datos.
- En el servicio de CA, activa los registros de auditoría de acceso a datos de los tipos Lectura de administrador y Escritura de datos.
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:
En la Google Cloud consola, ve a la página Explorador de registros:
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="
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:
En la Google Cloud consola, ve a la página Explorador de registros:
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:
PROJECT_ID
: tu ID de proyecto.CREDENTIAL_ID
: elCREDENTIAL_ID
de la sección Verificar el uso del certificado con los registros de la API de Kubernetes.
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:
En la Google Cloud consola, ve a la página Explorador de registros:
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 elCERTIFICATE_HASH
de la sección Verificar el uso del certificado con los registros de la API de Kubernetes. Asegúrate de omitir el prefijoX509SHA256=
del hash.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:
En la Google Cloud consola, ve a la página Explorador de registros:
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.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:
En la Google Cloud consola, ve a la página Explorador de registros:
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="
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:
En la Google Cloud consola, ve a la página Explorador de registros:
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:
PROJECT_ID
: tu ID de proyecto.JWT_ID
: el ID de JWT de la sección Verificar el uso del token con los registros del servidor de la API de Kubernetes.
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:
En la Google Cloud consola, ve a la página Explorador de registros:
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 campotoBeSignedDigest
de la sección Verificar la emisión de tokens con los registros de GKE.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
- Consulta información sobre la seguridad del plano de control.
- Consulta información sobre el acceso de administrador para empleados de Google.
- Consulta cómo configurar el registro y la monitorización de GKE.
- Consulta cómo configurar el acceso a los registros a nivel de campo.
- Consulta información sobre los límites de uso de los registros.