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 conformidade ou política organizacional para controlar a emissão e a assinatura de credenciais. Você já deve ter configurado chaves e ACs autogerenciadas com a autoridade do plano de controle do GKE.
Você já deve estar familiarizado com 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. Para mais detalhes, consulte Sobre a autoridade do plano de controle do GKE.
Por padrão,o Google Cloud aplica várias medidas de segurança ao plano de controle gerenciado. Esta página descreve 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 a duração 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
- Cluster de JSON Web Tokens (JWTs)
Certificados X.509
O Kubernetes usa certificados X.509 para autenticação de certificados do cliente. Para emitir certificados, o plano de controle do Kubernetes envia uma CertificateSigningRequest aprovada para uma autoridade certificadora (CA) no serviço de CA. Em seguida, a AC 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 de 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 do certificado.
É possível usar os registros de certificado do servidor da API Kubernetes para rastrear o ciclo de vida do certificado correlacionando os registros dos seguintes serviços:
- Registros de emissão de identidade do GKE: use a consulta
protoPayload.metadata.credentialId
para encontrar registros de emissão de identidade específicos 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 os registros aos eventos da 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 aos registros com os registros do Cloud KMS.
- Registros de assinatura do Cloud KMS: use o valor
tbs_certificate_digest
do registro do serviço de AC para confirmar que a chave do Cloud KMS esperada assinou o certificado.
Tokens JSON Web (JWTs)
JWTs assinados (JSON Web Tokens) são usados como tokens de portador para entidades no cluster, como contas de serviço do Kubernetes, ao autenticar solicitações para a API do Kubernetes. Quando um pod é criado que usa 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 ACs, 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 de 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 que
foi usado na chamada da API Kubernetes.
É possível usar o ID do JWT dos 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 dos registros do servidor da API Kubernetes para encontrar entradas de emissão de JWT específicas. Cada entrada
também contém o campo
toBeSignedDigest
, cujo valor pode corresponder a 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 que a chave do Cloud KMS esperada assinou o JWT.
Preços
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
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 ACs ou chaves autogerenciadas.
Ative as seguintes APIs do serviço de registro de auditoria do Cloud:
- No Cloud KMS, ative os registros de auditoria de acesso a dados do tipo Leitura de dados.
- Para o serviço de CA, 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
). -
Acessar os 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 se aplicam:
- Use o GKE versão 1.31.1-gke.1846000 ou mais recente.
- Os registros de emissão de identidade são registrados 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 é possível encaminhar os registros de auditoria de eventos do sistema para outros destinos para períodos de retenção mais longos.
Verificar certificados
É possível usar os registros de emissão de identidade de autoridade do plano de controle do GKE para confirmar se um certificado foi emitido ou usado. Você pode usar qualquer um dos seguintes registros ou uma combinação deles para confirmar informações sobre a emissão e o uso de certificados:
Registros de certificados |
|
---|---|
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 autoridades de plano de controle do GKE gerenciadas pelo usuário ou ACs. |
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 AC. |
Verificar o uso do certificado com os registros da API Kubernetes
Para encontrar entradas de registro de chamadas de API autenticadas usando certificados, siga estas etapas:
No console do Google 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 pode ser usado para correlacionar registros do
GKE, do serviço de AC 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 do Google 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 os registros da API Kubernetes.
Clique em Executar consulta.
Verificar a emissão de certificados com os registros do serviço de CA
Para encontrar os registros do serviço de AC que correspondem aos eventos de emissão de certificados do GKE, siga estas etapas:
No console do Google 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 os registros da API Kubernetes. O prefixoX509SHA256=
precisa ser omitido do 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.
É possível usar o DIGEST_VALUE
para
corresponder aos registros de assinatura do Cloud KMS para o certificado.
Verificar a emissão de certificados com os 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 AC, siga estas etapas:
No console do Google 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 de resumo da seção Verificar a emissão de certificados com 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 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 de 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.
O início do rastreamento do evento de emissão de token normalmente começa com o monitoramento do registro da API Kubernetes para a 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 a emissão e o 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 tokens como um registro de auditoria de evento do sistema. Esses registros são ativados por padrão em qualquer cluster que use chaves ou autoridades de plano de controle gerenciadas pelo usuário do GKE. |
Registro de auditoria do Cloud KMS |
Registra uma entrada sempre que um token é assinado e emitido. |
Verificar o uso do token com os registros do servidor da API Kubernetes
Para encontrar entradas de registro de eventos de uso de token, siga estas etapas:
No console do Google 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 os registros do GKE
Para encontrar entradas de registro para eventos de emissão de tokens, siga estas etapas:
No console do Google 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 os registros do servidor da API Kubernetes.
Clique em Executar consulta.
Essa consulta retorna registros que contêm um campo
toBeSignedDigest
.
Use o valor toBeSignedDigest
para encontrar eventos de assinatura do Cloud KMS.
Verificar a emissão de tokens com os registros de assinatura do Cloud KMS
Para encontrar entradas de registro de resumos assinados, siga estas etapas:
No console do Google 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 os 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 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 de campo aos registros.
- Saiba mais sobre os limites de uso do Logging.