Verificar as conexões do Google com o plano de controle do GKE


.

Nesta página, descrevemos como verificar as conexões feitas por funcionários do Google ao plano de controle do cluster do Google Kubernetes Engine (GKE) correlacionando os registros do GKE com os registros da Transparência no acesso.

Os registros da Transparência no acesso registram as ações realizadas pela equipe do Google ao acessar seu conteúdo. Este guia é destinado a administradores de segurança que querem mais verificação do conteúdo dos registros da transparência no acesso e das aprovações associadas do Access Approval, correlacionando com outras fontes de registro do GKE. Essa verificação é totalmente opcional e não é necessária para proteger seu plano de controle.

Verifique se você está familiarizado com os seguintes conceitos:

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 Google 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 o acesso do Google às instâncias do plano de controle do cluster

Durante sessões de solução de problemas ou por outros motivos comerciais justificados, funcionários do Google, como engenheiros de confiabilidade de sites e funcionários do Cloud Customer Care, podem precisar de acesso administrativo às instâncias do Compute Engine que hospedam seu plano de controle. Dependendo do seu pacote de suporte e configuração do Customer Care, a Transparência no acesso fornece registros de auditoria detalhados para esse acesso administrativo. Com a aprovação de acesso, é possível exigir aprovação explícita antes que qualquer funcionário do Google acesse seus recursos. Para saber mais sobre o acesso administrativo e as ferramentas que você pode usar para autorizar o acesso e registrar mudanças, consulte Acesso administrativo para funcionários do Google.

Registros de acesso ao plano de controle

Quando você ativa a autoridade do plano de controle do GKE, o GKE gera registros de acesso ao plano de controle que podem ser usados para fazer uma referência cruzada com os registros de auditoria gerados pela transparência no acesso e pela aprovação de acesso. O GKE adiciona registros de acesso ao plano de controle ao bucket _Default no Logging para registrar conexões de rede recebidas e eventos SSH específicos nas instâncias do plano de controle. É necessário ativar a autoridade do plano de controle do GKE no projeto para gerar registros de acesso ao plano de controle dos clusters.

O GKE gera os seguintes registros de acesso para o plano de controle:

O volume de registros de conexão do plano de controle depende de fatores como o número de nós no cluster, o número de instâncias do plano de controle (clusters regionais têm mais instâncias do plano de controle do que clusters zonais) e a frequência com que suas cargas de trabalho chamam o servidor da API Kubernetes. O volume de registros do SSH é pequeno e depende do número de reinicializações de nós.

Para verificar as conexões com seu plano de controle, encontre os registros de acesso do plano de controle do cluster e os combine com os registros de auditoria da Transparência no acesso e do Access Approval. Isso permite confirmar que todas as conexões SSH com as instâncias do plano de controle foram resultado de acesso administrativo autorizado por funcionários do Google. Quando você ativa a autoridade do plano de controle do GKE para seu cluster, todo o acesso SSH de funcionários do Google ao seu plano de controle é não interativo, o que significa que cada conexão SSH executa um único comando autorizado por você.

Preços

As seguintes considerações de preço se aplicam:

Antes de começar

Antes de começar, veja se você realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a CLI do Google Cloud para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a gcloud CLI anteriormente, instale a versão mais recente executando gcloud components update.

Requisitos

Os registros de acesso ao plano de controle exigem o GKE versão 1.31.1-gke.1846000 ou posterior.

Papéis e permissões necessárias

Para receber as permissões necessárias para ativar a geração de registros e acessar e processar registros, peça ao administrador para conceder a você os seguintes papéis do IAM:

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.

Ativar os registros de acesso do plano de controle do cluster do GKE

É possível ativar a geração de registros de acesso do plano de controle para clusters do modo Autopilot e do modo Standard ativando o componente de geração de registros correspondente. Para mais informações sobre os tipos de registros do plano de controle, consulte Visualizar registros do GKE.

Os nomes dos componentes de geração de registros compatíveis para registros de acesso ao plano de controle são os seguintes:

  • Registros de SSH do plano de controle: KCP_SSHD
  • Registros de conexão do plano de controle: KCP_CONNECTION

Ativar os registros de acesso ao plano de controle em um novo cluster

O exemplo a seguir cria um cluster no modo Autopilot com os dois tipos de registros de acesso ao plano de controle ativados. Para ativar apenas um tipo de registro de acesso do plano de controle, omita o nome do componente correspondente do comando.

gcloud container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --logging=SYSTEM,KCP_SSHD,KCP_CONNECTION

Substitua:

  • CLUSTER_NAME: o nome do novo cluster.
  • LOCATION: o local em que o cluster será criado.

Para especificar componentes de geração de registros ao criar um cluster usando a API GKE, no método projects.locations.clusters.create, defina os valores correspondentes no objeto LoggingConfig do recurso Cluster.

Ativar os registros de acesso ao plano de controle em um cluster atual

Para atualizar a configuração de geração de registros de um cluster atual e ativar os registros de acesso do plano de controle, faça o seguinte:

  1. Encontre os componentes de geração de registros que seu cluster usa.
  2. Identifique os valores correspondentes para especificar na flag --logging na CLI gcloud e manter esses componentes de geração de registros ativados.
  3. Atualize a configuração de geração de registros do cluster para ativar os registros de acesso ao plano de controle junto com a configuração de geração de registros atual.

Os valores especificados para a flag --logging no comando gcloud container clusters update são diferentes dos valores que aparecem quando você descreve o cluster.

  1. Verifique a configuração de geração de registros atual do cluster:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --flatten=loggingConfig \
        --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
    

    O resultado será assim:

    SYSTEM_COMPONENTS,WORKLOADS,APISERVER,SCHEDULER,CONTROLLER_MANAGER
    
  2. Identifique os valores da CLI gcloud para a flag --logging que correspondem à configuração do componente de geração de registros na saída da etapa anterior. Para uma lista dos valores da CLI gcloud que correspondem a componentes de geração de registros específicos, consulte a tabela Registros disponíveis.

  3. Atualize a configuração de geração de registros com os registros de acesso do plano de controle:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --logging=SYSTEM,EXISTING_LOGS,KCP_ACCESS_LOGS
    

    Substitua:

    • EXISTING_LOGS: uma lista separada por vírgulas de componentes de registro em log que seu cluster já usa. Especifique os valores da CLI gcloud que correspondem a esses componentes de geração de registros, extraídos da tabela Registros disponíveis.
    • KCP_ACCESS_LOGS: uma lista separada por vírgulas dos tipos de registros de acesso do plano de controle a serem ativados para o cluster, da seguinte forma:

      • Para registros de SSH do plano de controle, especifique KCP_SSHD.
      • Para registros de conexão do plano de controle, especifique KCP_CONNECTION.

Para especificar componentes de geração de registros ao atualizar um cluster usando a API GKE, no método projects.locations.clusters.update, defina os valores de componente de geração de registros atuais e novos no objeto LoggingConfig do recurso ClusterUpdate.

Exemplo de atualização de cluster para ativar os registros de acesso ao plano de controle

Considere um cluster em que o comando gcloud container clusters describe tem a seguinte configuração de geração de registros:

SYSTEM_COMPONENTS,WORKLOADS,APISERVER,SCHEDULER,CONTROLLER_MANAGER

O comando de atualização de cluster a seguir ativa os dois tipos de registros de acesso do plano de controle mantendo a configuração de registro atual para este cluster de exemplo:

gcloud container clusters update example-cluster \
    --location=us-central1 \
    --logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER,KCP_SSHD,KCP_CONNECTION

Faça uma comparação cruzada entre os registros de acesso do plano de controle e os registros da transparência no acesso

Para verificar o acesso ao plano de controle de um cluster, extraia os registros de conexão e SSH do plano de controle e os registros da Transparência no acesso desse cluster:

  1. No console Google Cloud , abra a página Explorador de registros.

    Acessar o Explorador de registros

  2. Para receber todos os registros de um cluster específico, incluindo os registros de acesso do plano de controle e de transparência no acesso, execute a seguinte consulta:

    (logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-connection"
    resource.labels.cluster_name="CLUSTER_NAME"
    jsonPayload.connection.dest_port="22")
    OR
    (logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-sshd"
    resource.labels.cluster_name="CLUSTER_NAME")
    OR
    (logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Faccess_transparency"
    json_payload.accesses.methodName="GoogleInternal.SSH.Master"
    json_payload.accesses.resourceName="//container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME")
    

A saída precisa mostrar todos os seguintes tipos de registros do cluster:

  • Registro de transparência no acesso
  • Registro de conexão do plano de controle
  • Registros de SSH para cada sessão de SSH

Realizar verificações de validação

A principal verificação é se você vê todos os tipos de registros de qualquer conexão SSH ao executar a consulta do Cloud Logging na seção anterior. Cada registro de Transparência no acesso precisa ter um registro de conexão do plano de controle correspondente e um ou mais registros SSH. Esses registros são para ações que os humanos realizam nas instâncias do plano de controle. Portanto, o volume de registros deve ser pequeno.

Você também pode realizar as seguintes verificações adicionais do conteúdo do registro:

  1. Para cada registro SSH do plano de controle, verifique se há um registro do Transparência no acesso em um período de 15 minutos antes do carimbo de data/hora do registro SSH. Essa janela de tempo considera o encerramento final da sessão SSH, que acontece vários minutos depois que a conexão inicial é registrada pela transparência no acesso.
  2. Para cada registro de conexão do plano de controle, verifique se há um registro de transparência no acesso em um período de cinco minutos antes do carimbo de data/hora do registro de conexão do plano de controle.
  3. Se você usa a aprovação de acesso no cluster, verifique se cada registro de transparência no acesso tem um campo accessApprovals correspondente. Faça uma referência cruzada desse campo com as solicitações do Access Approval do seu cluster.

    Para receber solicitações do Access Approval para seu projeto, consulte Como visualizar o histórico de solicitações do Access Approval. O Access Approval pode estar sujeito a exclusões.

  4. Se quiser, valide a assinatura da aprovação de acesso assinada associada ao registro da Transparência no acesso.

Detalhes do registro de acesso ao plano de controle

Esta seção fornece detalhes e exemplos dos registros de acesso ao plano de controle que o GKE gera quando a equipe do Google se conecta às instâncias do plano de controle.

Registros de conexão do plano de controle

O GKE adiciona um registro de conexão do plano de controle para cada nova conexão de rede recebida a uma instância do plano de controle. Esses registros incluem detalhes específicos, como:

  • Endereços IP e portas de origem e destino
  • Direção e protocolo da conexão

Confira a seguir um exemplo de registro de conexão do plano de controle:

{
  insertId: "z1eq8wonio335a5h",
  jsonPayload: {
    instance: {
      vm_name: "gke-dee49f0d6fa34ce3a2ac-f513-d195-vm",
      zone: "us-central1-c"
    },
    cluster: {
      cluster_id: "CLUSTER_ID",
      cluster_urn: "//container.googleapis.com/projects/PROJECT_NUMBER/locations/us-central1-c/clusters/CLUSTER_NAME"
    },
    connection: {
      state: "NEW",
      src_ip: "192.0.2.100",
      src_port: 32774,
      dest_ip: "203.0.113.12",
      dest_port: 22,
      direction: "INGRESS"
      protocol: "TCP"
    },
  }
  logName: "projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-connection",
  receiveTimestamp: "2024-04-11T04:08:01.883070399Z",
  resource: {
    labels: {
      cluster_name: "CLUSTER_NAME",
      location: "us-central1-c",
      project_id: "PROJECT_ID"
    }
    type: "gke_cluster",
  }
  severity: "NOTICE",
  timestamp: "2024-04-11T04:07:59.019330Z"
}

Os seguintes campos na entrada de registro são relevantes para verificar as ações do Google:

  • cluster.cluster_urn: o identificador de recurso totalmente qualificado do cluster. Esse identificador tem o formato //container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME, com as seguintes variáveis:

    • PROJECT_NUMBER: o número numérico do projeto de clusters.
    • LOCATION: o Google Cloud local do cluster.
    • CLUSTER_NAME: o nome do cluster.
  • connection: detalhes sobre a tentativa de conexão. Esse campo tem as seguintes informações:

    • state: o estado da conexão. Para novas conexões, o valor é NEW.
    • src_ip: o endereço IP da origem da conexão.
    • src_port: o número da porta da origem da conexão.
    • dest_ip: o endereço IP interno da VM do plano de controle.
    • dest_port: o número da porta de destino.
    • direction: a direção da conexão. O valor é sempre INGRESS.
    • protocol: o protocolo IP, como TCP.

Registros SSH do plano de controle

O GKE adiciona registros de SSH do plano de controle para eventos relacionados a conexões SSH com instâncias do plano de controle. O GKE registra os seguintes eventos:

  • Chave SSH aceita para um usuário
  • O status da sessão mudou de 0 para 1, indicando que o usuário fez login com sucesso.
  • Sessão SSH aberta
  • Sessão SSH fechada
  • O status da sessão mudou de 1 para 0, indicando que o usuário fez logout.
  • Falha na sessão SSH

Por exemplo, o registro de SSH do plano de controle a seguir é para uma sessão de SSH que está sendo aberta:

{
  insertId: "8llczemdulwbbwpa",
  jsonPayload: {
    instance: {
      vm_name: "gke-06cb920c609941c0a5ce-6840-40e9-vm",
      zone: "us-central1-c"
    },
    cluster: {
      cluster_id: "891e6d12889747748c1ac16ffcc6cb7c0a96450b36864eb680917c119fd801d0",
      cluster_urn: "//container.googleapis.com/projects/PROJECT_NUMBER/locations/us-central1/clusters/CLUSTER_NAME",
    },
    message: "pam_unix(sshd:session): session opened for user REDACTED by (uid=0)",
  },
  logName: "projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-ssh",
  receiveTimestamp: "2024-04-09T13:21:55.231436462Z"
  resource: {
    type: "gke_cluster",
    labels: {
      cluster_name: "CLUSTER_NAME",
      location: "us-central1",
      project_id: "PROJECT_ID"
    }
  },
  severity: "NOTICE",
  timestamp: "2024-04-09T13:21:50.742246Z"
}

Os seguintes campos na entrada de registro são relevantes para verificar as ações do Google:

  • cluster.cluster_urn: o identificador de recurso totalmente qualificado do cluster. Esse identificador tem o formato //container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME, com as seguintes variáveis:

    • PROJECT_NUMBER: o número numérico do projeto do cluster.
    • LOCATION: o Google Cloud local do cluster.
    • CLUSTER_NAME: o nome do cluster.
  • message: detalhes sobre a conexão SSH.

Desativar os registros de acesso ao plano de controle

  1. Para conferir os tipos de registros específicos que seu cluster usa, execute o seguinte comando:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --flatten=loggingConfig \
        --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
    

    O resultado será assim:

    SYSTEM_COMPONENTS,WORKLOADS,API_SERVER,SCHEDULER,CONTROLLER_MANAGER,KCP_SSHD,KCP_CONNECTION
    
  2. Para desativar os registros de acesso do plano de controle de um cluster, execute o seguinte comando:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER
    

Na flag --logging, especifique os componentes de geração de registros da saída do comando anterior. Este comando de exemplo desativa os registros de acesso do plano de controle, mas mantém outros registros de componentes do plano de controle ativados.

Para desativar componentes de geração de registros usando a API GKE, defina os valores correspondentes no objeto LoggingConfig do recurso ClusterUpdate no método projects.locations.clusters.update.

A seguir