Valide a emissão e a utilização de identidades

.

Esta página mostra como usar os registos para verificar a emissão e a utilização de identidades do Kubernetes, sob a forma de certificados e tokens de contas de serviço, pelo plano de controlo do cluster do Google Kubernetes Engine (GKE). Esta validação é totalmente opcional e não é necessária para proteger o seu plano de controlo.

Este guia destina-se a administradores de segurança e proprietários de plataformas que têm requisitos organizacionais específicos de conformidade ou políticas para o controlo da emissão e assinatura de credenciais. Já deve ter configurado chaves autogeridas e ACs com a autoridade do plano de controlo do GKE.

Já deve estar familiarizado com os seguintes conceitos:

Esta página descreve uma parte de um conjunto de funcionalidades opcionais do plano de controlo no GKE que lhe permitem realizar tarefas como validar a sua postura de segurança do plano de controlo ou configurar a encriptação e a assinatura de credenciais no plano de controlo através de chaves que gere. Para mais detalhes, consulte o artigo Acerca da autoridade do plano de controlo do GKE.

Por predefinição, Trusted Cloud aplica várias medidas de segurança ao plano de controlo gerido. Esta página descreve as capacidades opcionais que lhe dão mais visibilidade ou controlo sobre o plano de controlo do GKE.

Acerca dos registos de emissão de identidade

Os registos de emissão de identidades do GKE são registos de auditoria do plano de controlo que registam quando o plano de controlo emite credenciais e quando essas credenciais são usadas no cluster. Pode usar estes registos para acompanhar o ciclo de vida de uma credencial, incluindo a emissão e a utilização, correlacionando os registos de emissão de identidade com os registos do Cloud KMS, do serviço de autoridade de certificação e da API Kubernetes. Os registos de emissão de identidade do GKE são ativados quando usa a autoridade do plano de controlo do GKE. Estes registos monitorizam a emissão e a utilização dos seguintes tipos de credenciais:

  • Certificados X.509
  • Agrupe símbolos da Web JSON (JWTs)

Certificados X.509

O Kubernetes usa certificados X.509 para a autenticação de certificados de cliente. Para emitir certificados, o plano de controlo do Kubernetes envia um CertificateSigningRequest aprovado a uma autoridade de certificação (AC) no serviço de AC. Em seguida, a CA emite um certificado através da chave correspondente no Cloud KMS para assinar o resumo do certificado.

Os registos do servidor da API Kubernetes contêm detalhes da assinatura do certificado para qualquer chamada da API Kubernetes que tenha sido autenticada com um certificado. A entrada do ID das credenciais no registo tem o seguinte formato:

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

O valor CERTIFICATE_HASH é o hash SHA256 do certificado, que pode usar para rastrear o ciclo de vida do certificado.

Pode usar os registos de certificados do servidor da API Kubernetes para acompanhar o ciclo de vida do certificado correlacionando os registos dos seguintes serviços:

  • Registos de emissão de identidade do GKE: use a consulta protoPayload.metadata.credentialId para encontrar registos de emissão de identidade do GKE específicos com base no ID da credencial dos registos do servidor da API Kubernetes. Em seguida, use o campo protoPayload.metadata.certificateFingerprint do registo de emissão de identidade do GKE para correlacionar os registos de emissão de identidade com os registos do serviço de AC.
  • Registos do serviço de AC: encontre a entrada do registo de emissão de certificados, que contém os seguintes IDs:
    • cert_fingerprint.sha256_hash: o hash SHA256 do certificado assinado. Use este ID para fazer a correspondência dos registos com eventos da API GKE e Kubernetes.
    • tbs_certificate_digest: um hash do conteúdo do certificado que foi enviado para ser assinado por uma chave do Cloud KMS. Use este ID para fazer a correspondência dos registos com os registos do Cloud KMS.
  • Registos de assinatura do Cloud KMS: use o valor tbs_certificate_digest do registo do serviço de AC para confirmar que a chave do Cloud KMS esperada assinou o certificado.

Símbolos da Web JSON (JWTs)

Os JWTs (símbolos da Web JSON) assinados são usados como tokens de portador para entidades no cluster, como contas de serviço do Kubernetes, ao autenticar pedidos à API Kubernetes. Quando é criado um pod que usa uma conta de serviço específica, o Kubernetes cria um JWT e monta-o no pod. Quando usa a autoridade do plano de controlo do GKE para executar as suas próprias chaves e ACs, este JWT é assinado e validado posteriormente através da chave de assinatura da conta de serviço no Cloud KMS.

Os registos do servidor da API Kubernetes contêm detalhes da assinatura do token para qualquer chamada da API Kubernetes que tenha sido autenticada com um JWT. A entrada da assinatura do token no registo 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.

Pode usar o ID do JWT dos registos do servidor da API Kubernetes para acompanhar o ciclo de vida de um JWT correlacionando os seguintes registos:

  • Registos de emissão de identidade do GKE: use o ID JWT dos registos 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 aos registos do Cloud KMS.
  • Registos de assinatura do Cloud KMS: use o valor do campo toBeSignedDigest dos registos de emissão de identidade do GKE para confirmar que a chave do Cloud KMS esperada assinou o JWT.

Preços

Neste documento, usa os seguintes componentes faturáveis do Trusted Cloud by S3NS:

Antes de começar

  1. Configure o painel de controlo do cluster do GKE com ACs ou chaves autogeridas.

  2. Ative as seguintes APIs do serviço Cloud Audit Logging:

Funções necessárias

Para receber as autorizações de que precisa para aceder aos registos de emissão de identidades, peça ao seu administrador para lhe conceder as seguintes funções da IAM no seu projeto:

  • Realizar todas as ações em Registo: Administrador de registos (roles/logging.admin).
  • Ver registos: Visualizador de registos privados (roles/logging.privateLogViewer).

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Requisitos e limitações

Aplicam-se os seguintes requisitos e limitações:

Valide certificados

Pode usar os registos de emissão de identidade da autoridade do plano de controlo do GKE para confirmar que um certificado foi emitido ou usado com êxito. Pode usar qualquer um dos seguintes registos ou uma combinação de registos para confirmar as informações sobre a emissão e a utilização de certificados:

Registos de certificados

Registo da API Kubernetes para utilização de certificados

Regista os detalhes da assinatura do certificado sempre que o certificado é usado na API Kubernetes.

Registo do GKE para operações de emissão de certificados

Regista todas as operações de emissão de certificados como um registo de auditoria de Evento do sistema. Estes registos estão ativados por predefinição em qualquer cluster que use chaves ou ACs geridas pelo utilizador da autoridade do plano de controlo do GKE.

Registo de auditoria do serviço de AC

Regista uma entrada sempre que é emitido um certificado.

Registo de auditoria do Cloud KMS

Regista uma entrada sempre que um resumo é assinado, em resposta a um pedido de assinatura do serviço de AC.

Valide a utilização de certificados com os registos da API Kubernetes

Para encontrar entradas de registo de chamadas API que foram autenticadas através de certificados, conclua os seguintes passos:

  1. Na Trusted Cloud consola, aceda à página Explorador de registos:

    Aceda ao Explorador de registos

  2. 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="
    
  3. Clique em Executar consulta.

    Esta consulta devolve todos os registos do servidor da API Kubernetes que têm um certificado X.509 associado. Encontre entradas de registo específicas para investigar através das suas ferramentas de segurança ou verificando os registos manualmente.

Para correlacionar estes registos com outros tipos de registos, procure o seguinte campo:

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

O valor CREDENTIAL_ID é o identificador que pode usar para correlacionar registos do GKE, do serviço de AC e do Cloud KMS. O elemento CREDENTIAL_ID tem o formato "X509SHA256=CERTIFICATE_HASH".

Valide a emissão de certificados com registos do GKE

Para encontrar entradas de registo do GKE para eventos de emissão de certificados, conclua os seguintes passos:

  1. Na Trusted Cloud consola, aceda à página Explorador de registos:

    Aceda ao Explorador de registos

  2. 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 o seguinte:

  3. Clique em Executar consulta.

Valide a emissão de certificados com os registos do serviço de AC

Para encontrar registos do serviço de AC que correspondam aos eventos de emissão de certificados do GKE, conclua os seguintes passos:

  1. Na Trusted Cloud consola, aceda à página Explorador de registos:

    Aceda ao Explorador de registos

  2. 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 por CERTIFICATE_HASH da secção Verifique a utilização de certificados com registos da API Kubernetes. Certifique-se de que omite o prefixo X509SHA256= do hash.

  3. Clique em Executar consulta.

    Esta consulta devolve um registo que contém um campo tbs_certificate_digest: DIGEST_VALUE na secção de resposta da descrição do certificado.

Pode usar o DIGEST_VALUE para fazer corresponder os registos de assinatura do Cloud KMS para o certificado.

Valide a emissão de certificados com os registos 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, conclua os seguintes passos:

  1. Na Trusted Cloud consola, aceda à página Explorador de registos:

    Aceda ao Explorador de registos

  2. 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 secção Verifique a emissão de certificados com os registos do serviço de AC.

  3. Clique em Executar consulta.

    Esta consulta devolve os registos de eventos de emissão de certificados. Os registos do Cloud KMS não distinguem entre certificados e JWTs, pelo que as entradas de registo para ambos são idênticas.

Valide tokens

Pode usar os registos de emissão de identidade da autoridade do plano de controlo do GKE e os registos de assinatura do Cloud KMS para confirmar que um símbolo da Web JSON (JWT) foi emitido com êxito.

Normalmente, o início da análise detalhada do evento de emissão de tokens começa com a monitorização do registo da API Kubernetes para a atividade da conta de serviço. Depois de identificar um registo de atividade que requer uma investigação mais detalhada, pode usar os seguintes registos para confirmar as informações sobre a emissão e a utilização de credenciais:

Registos JWT

Registo da API Kubernetes para utilização de JWT

Regista os detalhes da assinatura JWT sempre que um JWT é usado na API Kubernetes.

Registo do GKE para operações de emissão de JWT

Regista todas as operações de emissão de tokens como um registo de auditoria de eventos do sistema. Estes registos estão ativados por predefinição em qualquer cluster que use chaves ou ACs geridas pelo utilizador da autoridade do plano de controlo do GKE.

Registo de auditoria do Cloud KMS

Regista uma entrada sempre que um token é assinado e emitido.

Valide a utilização de tokens com os registos do servidor da API Kubernetes

Para encontrar entradas de registo de eventos de utilização de tokens, conclua os seguintes passos:

  1. Na Trusted Cloud consola, aceda à página Explorador de registos:

    Aceda ao Explorador de registos

  2. 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="
    
  3. Clique em Executar consulta.

    Esta consulta devolve todos os registos do servidor da API Kubernetes que têm um JWT associado. Encontre entradas de registo específicas para investigar através das suas ferramentas de segurança ou verificando os registos manualmente.

Para correlacionar estes registos com outros tipos de registos, procure o seguinte campo:

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

O JWT_ID é o identificador do token que pode usar para correlacionar registos do GKE e do Cloud KMS.

Valide a emissão de tokens com os registos do GKE

Para encontrar entradas de registo de eventos de emissão de tokens, conclua os seguintes passos:

  1. Na Trusted Cloud consola, aceda à página Explorador de registos:

    Aceda ao Explorador de registos

  2. 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 o seguinte:

  3. Clique em Executar consulta.

    Esta consulta devolve registos que contêm um campo toBeSignedDigest.

Pode usar o valor toBeSignedDigest para encontrar eventos de assinatura do Cloud KMS.

Valide a emissão de tokens com os registos de assinatura do Cloud KMS

Para encontrar entradas de registo de resumos assinados, conclua os seguintes passos:

  1. Na Trusted Cloud consola, aceda à página Explorador de registos:

    Aceda ao Explorador de registos

  2. 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 campo toBeSignedDigest da secção Verifique a emissão de tokens com os registos do GKE.

  3. Clique em Executar consulta.

    Esta consulta devolve os registos de eventos de emissão de certificados. Os registos do Cloud KMS não distinguem entre certificados e JWTs, pelo que as entradas de registo para ambos são idênticas.

O que se segue?