Nesta página, descrevemos como verificar as conexões feitas pela equipe 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ções 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 o plano de controle.
Verifique se você está familiarizado com os seguintes conceitos:
- Transparência no acesso
- Registros de transparência no acesso
- Aprovação de acesso
- Conexões SSH no Compute Engine
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, Google Cloud aplica várias medidas de segurança ao plano de controle gerenciado. Esta página descreve 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 as sessões de solução de problemas ou por outros motivos comerciais justificados, a equipe do Google, como engenheiros de confiabilidade de sites e funcionários do Cloud Customer Care, pode precisar de acesso administrativo às instâncias do Compute Engine que hospedam o plano de controle. Dependendo do pacote de suporte e da configuração do atendimento ao cliente, a Transparência no acesso fornece registros de auditoria detalhados para esse acesso administrativo. O Access Approval permite exigir 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 ao plano de controle
Quando você ativa a GKE control plane authority, o GKE gera registros de acesso ao plano de controle que podem ser usados opcionalmente para comparar 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
_Default bucket 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 as cargas de trabalho chamam o servidor da API Kubernetes. O volume de registros SSH é pequeno e depende do número de reinicializações de nós.
Para verificar as conexões com o plano de controle, encontre os registros de acesso ao plano de controle do cluster e combine esses registros com os registros de auditoria da Transparência no acesso e da Aprovação de acesso. Isso permite confirmar que todas as conexões SSH com as instâncias do plano de controle foram resultado de acesso administrativo autorizado pela equipe do Google. Quando você ativa a autoridade do plano de controle do GKE para o cluster, todo o acesso SSH da equipe do Google ao plano de controle é não interativo, o que significa que cada conexão SSH executa um único comando autorizado por você. Para conferir detalhes no nível do comando para acesso administrativo, inscreva-se na Aprovação de acesso aumentada e na Transparência no acesso aumentada. Para mais informações sobre qualificação e inscrição, entre em contato com a equipe de Google Cloud conta.
Preços
As seguintes considerações de preço se aplicam:
- Os registros de acesso ao plano de controle estão sujeitos a preços do Logging.
- A Transparência no acesso está incluída em assinaturas específicas do atendimento ao cliente. Para mais detalhes, consulte Preços da Transparência no acesso.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando o comando
gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
Ativar a API Cloud Logging.
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter a permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel Proprietário (roles/owner). Caso contrário, você pode receber essa permissão pelo papel Administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.Ative a Transparência no acesso para sua organização. Para instruções, consulte Ativar a Transparência no acesso.
Opcionalmente, ative a Aprovação de acesso para seu projeto e selecione o serviço GKE. Para instruções, consulte Analisar e aprovar solicitações de acesso usando a chave de assinatura gerenciada pelo Google.
Verifique se o ambiente está qualificado para usar os recursos de autoridade do plano de controle do GKE. Para ativar esses recursos, entre em contato com a equipe de Google Cloud vendas.
Requisitos
Os registros de acesso ao plano de controle exigem a versão 1.31.1-gke.1846000 ou mais recente do GKE.
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:
-
Ativar o registro de conexão do plano de controle no cluster:
Administrador de clusters do Kubernetes Engine (
roles/container.clusterAdmin) no seu projeto -
Acessar registros e usar a Análise de registros e o Observability Analytics:
Leitor de registros (
roles/logging.viewer) no seu projeto -
Ativar a Transparência no acesso para a organização:
Administrador de transparência no acesso (
roles/axt.admin) na sua organização
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 com papéis personalizados ou outros papéis predefinidos.
Ativar registros de acesso ao plano de controle do cluster do GKE
É possível ativar a geração de registros de acesso ao 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 Visualizar registros do GKE.
Os nomes de componentes de registro compatíveis para registros de acesso ao 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 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 ao plano de controle ativados. Para ativar apenas um tipo de registro de acesso ao 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
projects.locations.clusters.create
método, defina os valores correspondentes no
LoggingConfig objeto
do Cluster recurso.
Ativar registros de acesso ao plano de controle em um cluster atual
Para atualizar a configuração de registro de um cluster atual para ativar os registros de acesso ao plano de controle, faça o seguinte:
- Encontre os componentes de registro atuais que o cluster usa.
- Identifique os valores correspondentes a serem especificados na flag
--loggingna CLI gcloud para manter esses componentes de geração de registros ativados. - Atualize a configuração de registro do cluster para ativar os registros de acesso ao plano de controle junto com a configuração de registro atual.
Os valores especificados para a sinalização --logging no comando gcloud container clusters update são diferentes dos valores exibidos ao descrever o cluster.
Verifique a configuração de registro 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_MANAGERIdentifique os valores da CLI gcloud para a flag
--loggingque correspondem à configuração do componente de geração de registros da 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.Atualize a configuração de registro com registros de acesso ao plano de controle:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --logging=SYSTEM,EXISTING_LOGS,KCP_ACCESS_LOGSSubstitua:
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 geração de registros, extraídos da tabela Registros disponíveis.KCP_ACCESS_LOGS: uma lista separada por vírgulas dos tipos de registro de acesso ao plano de controle a serem ativados para o cluster, da seguinte maneira:- Para registros SSH do plano de controle, especifique
KCP_SSHD. - Para registros de conexão do plano de controle, especifique
KCP_CONNECTION.
- Para registros SSH do plano de controle, especifique
Para especificar componentes de registro ao atualizar um cluster usando a
API GKE, no
projects.locations.clusters.update
método, defina os valores de componente de registro atuais e novos no
LoggingConfig objeto
do
ClusterUpdate recurso.
Exemplo de atualização de cluster para ativar registros de acesso ao plano de controle
Considere um cluster que mostra a seguinte configuração de registro após executar o comando gcloud container clusters describe:
SYSTEM_COMPONENTS,WORKLOADS,APISERVER,SCHEDULER,CONTROLLER_MANAGER
O comando de atualização de cluster a seguir ativa os dois tipos de registros de acesso ao plano de controle, mantendo a configuração de registro atual para esse cluster de exemplo:
gcloud container clusters update example-cluster \
--location=us-central1 \
--logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER,KCP_SSHD,KCP_CONNECTION
Comparar registros de acesso ao plano de controle com os registros da Transparência no acesso
Para verificar o acesso ao plano de controle de um cluster, receba os registros de conexão do plano de controle, os registros SSH do plano de controle e os registros da Transparência no acesso para esse cluster:
No Google Cloud console, abra a página Análise de registros.
Para receber todos os registros de um cluster específico, incluindo os registros de acesso ao plano de controle e os registros da 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
A principal verificação é se você vê todos os tipos de registro para conexões 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 que os humanos realizam nas instâncias do plano de controle. Portanto, o volume de registros precisa ser pequeno.
Opcionalmente, você pode realizar as seguintes verificações adicionais do conteúdo do registro:
- Para cada registro SSH do plano de controle, verifique se um registro de Transparência no acesso existe em uma janela de 15 minutos antes do carimbo de data/hora do registro SSH. Essa janela de tempo considera o fechamento final da sessão SSH que ocorre vários minutos após a conexão inicial ser registrada pela Transparência no acesso.
- Para cada registro de conexão do plano de controle, verifique se um registro de Transparência no acesso existe em uma janela de 5 minutos antes do carimbo de data/hora do registro de conexão do plano de controle.
Se você usar a Aprovação de acesso para o cluster, verifique se cada registro de Transparência no acesso tem um campo
accessApprovalscorrespondente. Compare este campo com as solicitações de Aprovação de acesso para o cluster.Para receber solicitações de Aprovação de acesso para seu projeto, consulte Visualizar o histórico de solicitações de Aprovação de acesso. A Aprovação de acesso pode estar sujeita a exclusões.
Opcionalmente, valide a assinatura da Aprovação de acesso assinada associada ao registro de 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 e portas IP de origem e destino
- Direção e protocolo de 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 numérico do projeto dos clusters.LOCATION: o Google Cloud local do seu 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 é sempreINGRESS.protocol: o protocolo IP, comoTCP.
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 registro SSH do plano de controle a seguir é para uma sessão 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 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 numérico do projeto do cluster.LOCATION: o Google Cloud local do seu cluster.CLUSTER_NAME: o nome do cluster.
message: detalhes sobre a conexão SSH.
Desativar registros de acesso ao plano de controle
Para conferir os tipos de registro específicos que o 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_CONNECTIONPara desativar os registros de acesso ao 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 sinalização --logging, especifique os componentes de registro da saída do comando anterior. Este comando de exemplo desativa os registros de acesso ao plano de controle, mas mantém outros registros de componentes do plano de controle ativados.
Para desativar componentes de registro usando a API GKE, defina os
valores correspondentes no LoggingConfig objeto do recurso ClusterUpdate no
método
projects.locations.clusters.update.
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 o registro e o monitoramento do GKE.
- Saiba como configurar o acesso no nível do campo aos registros.
- Saiba mais sobre os limites de uso de registro.
- Saiba mais sobre o Acesso administrativo aumentado.