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


.

Esta página descreve como verificar as conexões feitas pelo pessoal do Google ao seu plano de controle de cluster do Google Kubernetes Engine (GKE) correlacionando os registros do GKE com os registros de Transparência de acesso.

Os registros de 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 verificar o conteúdo dos registros de transparência no acesso e as aprovações de acesso associadas correlacionando-as 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. Para mais detalhes, consulte Sobre a autoridade do plano de controle do GKE.

Por padrã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 o acesso do Google a instâncias do plano de controle do cluster

Durante sessões de solução de problemas ou por outros motivos comerciais justificados, os funcionários do Google, como engenheiros de confiabilidade do site e funcionários do atendimento ao cliente do Cloud, podem precisar de acesso administrativo às instâncias do Compute Engine que hospedam seu plano de controle. Dependendo do pacote de suporte do atendimento ao cliente e da configuração, a Transparência no acesso fornece registros de auditoria detalhados para esse acesso administrativo. A Aprovação de acesso permite que você exija uma aprovação explícita antes que qualquer equipe do Google possa acessar seus recursos. Para saber mais sobre o acesso administrativo e as ferramentas que podem ser usadas para autorizar o acesso e registrar mudanças, consulte Acesso administrativo para funcionários do Google.

Registros de acesso do plano de controle

Quando você ativa a autoridade do plano de controle do GKE, o GKE gera registros de acesso do plano de controle que podem ser usados para fazer a referência cruzada dos registros de auditoria gerados pela Transparência no acesso e pela Aprovação de acesso. O GKE adiciona logs de acesso do 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 seu projeto para gerar registros de acesso do plano de controle para seus 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 (os clusters regionais têm mais instâncias do plano de controle do que os clusters zonais) e a frequência com que os workloads chamam o servidor da API Kubernetes. O volume de registros SSH é pequeno e depende do número de reinicializações de nó.

Para verificar as conexões com o plano de controle, encontre os registros de acesso do plano de controle do cluster e corresponda esses registros aos registros de auditoria da transparência no acesso e do acesso aprovado. Isso permite confirmar que todas as conexões SSH às suas instâncias do plano de controle foram resultado de acesso administrativo autorizado pelo pessoal do Google. Quando você ativa a autoridade do plano de controle do GKE para seu cluster, todo o acesso SSH do pessoal do Google ao plano de controle é não interativo, o que significa que cada conexão SSH executa um único comando que você autoriza.

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 do plano de controle exigem o GKE versão 1.31.1-gke.1846000 ou mais recente.

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 padrão ativando o componente de registro correspondente. Para mais informações sobre os tipos de registro do plano de controle, consulte Acessar os registros do GKE.

Os nomes dos componentes de registro com suporte para registros de acesso do plano de controle são os seguintes:

  • Registros 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 do modo Autopilot com os dois tipos de registros de acesso do 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 registro 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 do plano de controle em um cluster

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

  1. Encontre os componentes de registro que o cluster usa.
  2. Identifique os valores correspondentes a serem especificados na flag --logging na CLI gcloud para manter esses componentes de registro ativados.
  3. Atualize a configuração de geração de registros do cluster para ativar os registros de acesso do plano de controle 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 mostrados ao descrever o cluster.

  1. Verifique a configuração de geração de registros 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 corresponde à configuração do componente de registro da saída da etapa anterior. Para conferir uma lista dos valores da CLI gcloud que correspondem a componentes de registro 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 que o cluster já usa. Especifique os valores da CLI gcloud que correspondem a esses componentes de registro, retirados da tabela Registros disponíveis.
    • KCP_ACCESS_LOGS: uma lista separada por vírgulas dos tipos de registro de acesso do plano de controle a serem ativados no cluster, conforme mostrado a seguir:

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

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

Exemplo de atualização de cluster para ativar os registros de acesso do 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 e mantém 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

Fazer a referência cruzada dos registros de acesso do plano de controle com os registros de transparência no acesso

Para verificar o acesso ao plano de controle de um cluster, acesse os registros de conexão, os registros SSH e os registros de transparência de acesso do plano de controle para esse cluster:

  1. No console do Google Cloud, abra a página Análise de registros.

    Acessar o Explorador de registros

  2. Para conferir todos os registros de um cluster específico, incluindo os de acesso ao 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 vai mostrar todos os seguintes tipos de registros do cluster:

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

Realizar verificações de verificação

Sua verificação de verificação principal é se você vê todos os tipos de registro para qualquer conexão SSH ao executar a consulta de registro da 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 realizadas por humanos nas instâncias do plano de controle. Portanto, o volume de registros precisa 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 um registro de transparência de acesso existe em uma janela de 15 minutos antes do carimbo de data/hora do registro SSH. Esse período de tempo explica o fechamento da sessão SSH final que ocorre vários minutos depois que a conexão inicial foi registrada pela Transparência no acesso.
  2. Para cada registro de conexão do plano de controle, verifique se um registro de transparência de acesso existe 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 de aprovação de acesso do cluster.

    Para receber solicitações de aprovação de acesso para seu projeto, consulte Acessar o histórico de solicitações de aprovação de acesso. O Access Approval pode estar sujeito a exclusões.

  4. Como alternativa, valide a assinatura da aprovação de acesso assinada associada ao registro de transparência no acesso.

Detalhes do registro de acesso do plano de controle

Esta seção fornece detalhes e exemplos dos registros de acesso do plano de controle que o GKE gera quando a equipe do Google se conecta às suas 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 de entrada em uma instância do plano de controle. Esses registros incluem detalhes específicos, como estes:

  • Portas e endereços IP de origem e destino
  • Direção e protocolo da conexão

O exemplo a seguir é de um 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 campos a seguir 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 do projeto numérico do seu 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 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.
  • 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 seguinte registro SSH do plano de controle é para uma sessão SSH 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 campos a seguir 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 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 do plano de controle

  1. Para conferir os tipos de registro específicos usados pelo cluster, 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 em 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 registro da saída do comando anterior. Este comando de exemplo desativa os registros de acesso do plano de controle, mas mantém os outros registros de componentes do plano de controle ativados.

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

A seguir