.
Nesta página, mostramos como usar registros para verificar a emissão e o uso de identidades do Kubernetes, na forma de certificados e tokens de conta de serviço, pelo plano de controle do cluster do Google Kubernetes Engine (GKE). Essa verificação é totalmente opcional e não é necessária para proteger seu plano de controle.
Este guia é destinado a administradores de segurança e proprietários de plataformas que têm requisitos específicos de compliance ou política organizacional para controlar a emissão e a assinatura de credenciais. Você já precisa ter configurado chaves e CAs autogerenciados com a autoridade do plano de controle do GKE.
Você já precisa conhecer os seguintes conceitos:
- Registros do serviço de CA
- Registros do Cloud KMS
- Registro de auditoria do Kubernetes
- Certificados X.509
Esta página descreve uma parte de um conjunto de recursos opcionais do plano de controle no GKE que permite realizar tarefas como verificar a postura de segurança do plano de controle ou configurar a criptografia e a assinatura de credenciais no plano de controle usando chaves gerenciadas por você. Para mais detalhes, consulte Sobre a autoridade do plano de controle do GKE.
Por padrão,o Trusted Cloud aplica várias medidas de segurança ao plano de controle gerenciado. Nesta página, descrevemos os recursos opcionais que oferecem mais visibilidade ou controle sobre o plano de controle do GKE.
Sobre os registros de emissão de identidade
Os registros de emissão de identidade do GKE são registros de auditoria do plano de controle que registram quando o plano de controle emite credenciais e quando elas são usadas no cluster. É possível usar esses registros para acompanhar o ciclo de vida de uma credencial, incluindo emissão e uso, correlacionando os registros de emissão de identidade com os registros do Cloud KMS, do Certificate Authority Service e da API Kubernetes. Os registros de emissão de identidade do GKE são ativados ao usar a autoridade do plano de controle do GKE. Esses registros rastreiam a emissão e o uso dos seguintes tipos de credenciais:
- Certificados X.509
- JSON Web Tokens (JWTs) do cluster
Certificados X.509
O Kubernetes usa certificados X.509 para autenticação de certificado do cliente. Para emitir certificados, o plano de controle do Kubernetes envia um CertificateSigningRequest aprovado para uma autoridade certificadora (CA) no CA Service. Em seguida, a CA emite um certificado usando a chave correspondente no Cloud KMS para assinar o resumo do certificado.
Os registros do servidor da API Kubernetes contêm detalhes da assinatura do certificado para qualquer chamada da API Kubernetes autenticada com um certificado. A entrada de ID da credencial no registro tem o seguinte formato:
"authentication.k8s.io/credential-id": "X509SHA256=CERTIFICATE_HASH"
O valor CERTIFICATE_HASH
é o hash SHA256 do
certificado, que pode ser usado para rastrear o ciclo de vida dele.
É possível usar os registros de certificado do servidor da API Kubernetes para rastrear o ciclo de vida do certificado correlacionando registros dos seguintes serviços:
- Registros de emissão de identidade do GKE: use a consulta
protoPayload.metadata.credentialId
para encontrar registros específicos de emissão de identidade do GKE com base no ID da credencial dos registros do servidor da API Kubernetes. Em seguida, use o campoprotoPayload.metadata.certificateFingerprint
do registro de emissão de identidade do GKE para correlacionar os registros de emissão de identidade com os registros do serviço de CA. - Registros do CA Service: encontre a entrada de registro de emissão de certificado,
que contém os seguintes IDs:
cert_fingerprint.sha256_hash
: o hash SHA256 do certificado assinado. Use esse ID para corresponder registros a eventos de API do GKE e do Kubernetes.tbs_certificate_digest
: um hash do conteúdo do certificado que foi enviado para ser assinado por uma chave do Cloud KMS. Use esse ID para corresponder registros com registros do Cloud KMS.
- Registros de assinatura do Cloud KMS: use o valor
tbs_certificate_digest
do registro do serviço de CA para confirmar que a chave esperada do Cloud KMS assinou o certificado.
JSON Web Tokens (JWTs)
Os JWTs (JSON Web Tokens) assinados são usados como tokens de acesso para entidades no cluster, como contas de serviço do Kubernetes, ao autenticar solicitações para a API do Kubernetes. Quando um pod é criado usando uma conta de serviço específica, o Kubernetes cria um JWT e o monta no pod. Quando você usa a autoridade do plano de controle do GKE para executar suas próprias chaves e CAs, esse JWT é assinado e verificado posteriormente usando a chave de assinatura da conta de serviço no Cloud KMS.
Os registros do servidor da API Kubernetes contêm detalhes da assinatura do token para qualquer chamada da API Kubernetes autenticada com um JWT. A entrada de assinatura do token no registro tem o seguinte formato:
"authentication.kubernetes.io/credential-id":"JTI=JWT_ID"
O valor JWT_ID
é uma string que identifica o JWT usado na chamada da API Kubernetes.
É possível usar o ID do JWT nos registros do servidor da API Kubernetes para rastrear o ciclo de vida de um JWT correlacionando os seguintes registros:
- Registros de emissão de identidade do GKE: use o ID do JWT nos registros do servidor da API Kubernetes para encontrar entradas específicas de emissão de JWT. Cada entrada
também contém o campo
toBeSignedDigest
, cujo valor pode corresponder aos registros do Cloud KMS. - Registros de assinatura do Cloud KMS: use o valor do campo
toBeSignedDigest
dos registros de emissão de identidade do GKE para confirmar se a chave esperada do Cloud KMS assinou o JWT.
Preços
Neste documento, você vai usar os seguintes componentes faturáveis do Trusted Cloud by S3NS:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
Configure o plano de controle do cluster do GKE com CAs ou chaves autogerenciadas.
Ative as seguintes APIs do serviço Cloud Audit Logging:
- Para o Cloud KMS, ative os registros de auditoria de acesso a dados do tipo Leitura de dados.
- Para o CA Service, ative os registros de auditoria de acesso a dados dos tipos Leitura de administrador e Gravação de dados.
Funções exigidas
Para receber as permissões necessárias para acessar os registros de emissão de identidade, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
-
Realizar todas as ações no Logging:
Administrador do Logging (
roles/logging.admin
). -
Ver registros:
Visualizador de registros particulares (
roles/logging.privateLogViewer
).
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Requisitos e limitações
Os seguintes requisitos e limitações são aplicáveis:
- Use o GKE versão 1.31.1-gke.1846000 ou posterior.
- Os registros de emissão de identidade são gravados como registros de auditoria do Cloud e têm um período de armazenamento definido de 400 dias. O período de armazenamento não é configurável, mas você pode encaminhar os registros de auditoria de eventos do sistema para outros destinos e ter períodos de retenção mais longos.
Verificar certificados
É possível usar os registros de emissão de identidade da autoridade do plano de controle do GKE para confirmar se um certificado foi emitido ou usado. Você pode usar qualquer um dos registros a seguir ou uma combinação deles para confirmar informações sobre a emissão e o uso de certificados:
Registros de certificado |
|
---|---|
Registro da API Kubernetes para uso de certificado |
Registra os detalhes da assinatura do certificado sempre que ele é usado na API Kubernetes. |
Registro do GKE para operações de emissão de certificados |
Registra todas as operações de emissão de certificados como um registro de auditoria de evento do sistema. Esses registros são ativados por padrão em qualquer cluster que use chaves ou CAs gerenciados pelo usuário da autoridade do plano de controle do GKE. |
Registro de auditoria do serviço de CA |
Registra uma entrada sempre que um certificado é emitido. |
Registro de auditoria do Cloud KMS |
Registra uma entrada sempre que um resumo é assinado, em resposta a uma solicitação de assinatura do serviço de CA. |
Verificar o uso do certificado com registros da API Kubernetes
Para encontrar entradas de registro de chamadas de API autenticadas usando certificados, siga estas etapas:
No console Trusted Cloud , acesse a página Análise de registros.
Cole a seguinte expressão no campo do editor de consultas:
log_id("cloudaudit.googleapis.com/activity") resource.type="k8s_cluster" labels."authentication.kubernetes.io/credential-id":"X509SHA256="
Clique em Executar consulta.
Essa consulta retorna todos os registros do servidor da API Kubernetes que têm um certificado X.509 associado. Encontre entradas de registro específicas para investigar usando suas ferramentas de segurança ou verificando os registros manualmente.
Para correlacionar esses registros com outros tipos, encontre o seguinte campo:
"authentication.k8s.io/credential-id":"CREDENTIAL_ID"
O valor CREDENTIAL_ID
é o identificador que você pode usar para correlacionar registros do GKE, do serviço de CA e do Cloud KMS. O
CREDENTIAL_ID
tem o formato "X509SHA256=CERTIFICATE_HASH"
.
Verificar a emissão de certificados com os registros do GKE
Para encontrar entradas de registro do GKE para eventos de emissão de certificados, siga estas etapas:
No console Trusted Cloud , acesse a página Análise de registros.
Cole a seguinte expressão no campo do 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"
Substitua:
PROJECT_ID
: o ID do projeto.CREDENTIAL_ID
: oCREDENTIAL_ID
da seção Verificar o uso do certificado com registros da API Kubernetes.
Clique em Executar consulta.
Verificar a emissão de certificados com os registros do serviço de CA
Para encontrar registros do serviço de CA que correspondam aos eventos de emissão de certificados do GKE, conclua as etapas a seguir:
No console Trusted Cloud , acesse a página Análise de registros.
Cole a seguinte expressão no campo do 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"
Substitua
CERTIFICATE_HASH
peloCERTIFICATE_HASH
da seção Verificar o uso do certificado com registros da API Kubernetes. Não inclua o prefixoX509SHA256=
no hash.Clique em Executar consulta.
Essa consulta retorna um registro que contém um campo
tbs_certificate_digest: DIGEST_VALUE
na seção de resposta da descrição do certificado.
Você pode usar o DIGEST_VALUE
para corresponder aos registros de assinatura do Cloud KMS do certificado.
Verificar a emissão de certificados com registros de assinatura do Cloud KMS
Para encontrar eventos de assinatura do Cloud KMS para os eventos de emissão de certificados do serviço de CA, siga estas etapas:
No console Trusted Cloud , acesse a página Análise de registros.
Cole a seguinte expressão no campo do 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"
Substitua
DIGEST_VALUE
pelo valor do resumo na seção Verificar a emissão de certificados com os registros do serviço de CA.Clique em Executar consulta.
Essa consulta retorna os registros de eventos de emissão de certificados. Os registros do Cloud KMS não distinguem entre certificados e JWTs. Portanto, as entradas de registro para ambos são idênticas.
Verificar tokens
É possível usar os registros de emissão de identidade da autoridade do plano de controle do GKE e os registros de assinatura do Cloud KMS para confirmar se um JSON Web Token (JWT) foi emitido com sucesso.
O rastreamento do evento de emissão do token geralmente começa com o monitoramento do registro da API Kubernetes para atividade da conta de serviço. Depois de identificar um registro de atividades que precisa de mais investigação, use os registros a seguir para confirmar informações sobre emissão e uso de credenciais:
Registros JWT |
|
---|---|
Registro da API Kubernetes para uso de JWT |
Registra os detalhes da assinatura do JWT sempre que um JWT é usado na API Kubernetes. |
Registro do GKE para operações de emissão de JWT |
Registra todas as operações de emissão de token como um registro de auditoria de evento do sistema. Esses registros são ativados por padrão em qualquer cluster que usa chaves ou CAs gerenciados pelo usuário da autoridade do plano de controle do GKE. |
Registro de auditoria do Cloud KMS |
Registra uma entrada sempre que um token é assinado e emitido. |
Verificar o uso do token com registros do servidor da API Kubernetes
Para encontrar entradas de registro de eventos de uso de token, siga estas etapas:
No console Trusted Cloud , acesse a página Análise de registros.
Cole a seguinte expressão no campo do editor de consultas:
log_id("cloudaudit.googleapis.com/activity") resource.type="k8s_cluster" labels."authentication.kubernetes.io/credential-id":"JTI="
Clique em Executar consulta.
Essa consulta retorna todos os registros do servidor da API Kubernetes que têm um JWT associado. Encontre entradas de registro específicas para investigar usando suas ferramentas de segurança ou verificando os registros manualmente.
Para correlacionar esses registros com outros tipos, encontre o seguinte campo:
"authentication.k8s.io/credential-id": "JTI=JWT_ID"
O JWT_ID
é o identificador de token que pode ser usado para correlacionar registros do GKE e do Cloud KMS.
Verificar a emissão de tokens com registros do GKE
Para encontrar entradas de registro de eventos de emissão de token, siga estas etapas:
No console Trusted Cloud , acesse a página Análise de registros.
Cole a seguinte expressão no campo do 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"
Substitua:
PROJECT_ID
: o ID do projeto.JWT_ID
: o ID do JWT da seção Verificar o uso do token com registros do servidor da API Kubernetes.
Clique em Executar consulta.
Essa consulta retorna registros que contêm um campo
toBeSignedDigest
.
Você pode usar o valor toBeSignedDigest
para encontrar eventos de assinatura do Cloud KMS.
Verificar a emissão de tokens com registros de assinatura do Cloud KMS
Para encontrar entradas de registro de resumos assinados, siga estas etapas:
No console Trusted Cloud , acesse a página Análise de registros.
Cole a seguinte expressão no campo do 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"
Substitua
DIGEST_VALUE
pelo valor no campotoBeSignedDigest
da seção Verificar a emissão de tokens com registros do GKE.Clique em Executar consulta.
Essa consulta retorna os registros de eventos de emissão de certificados. Os registros do Cloud KMS não distinguem entre certificados e JWTs. Portanto, as entradas de registro para ambos são idênticas.
A seguir
- Saiba mais sobre a segurança do plano de controle.
- Saiba mais sobre o acesso administrativo para funcionários do Google.
- Saiba como configurar a geração de registros e o monitoramento do GKE.
- Saiba como configurar o acesso no nível do campo aos registros.
- Saiba mais sobre os limites de uso do Logging.