O Google Kubernetes Engine (GKE) usa metadados de instâncias para configurar máquinas virtuais (VMs) de nós, mas alguns destes metadados são potencialmente confidenciais e devem ser protegidos contra cargas de trabalho em execução no cluster.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize-a. Se instalou anteriormente a CLI gcloud, execute
gcloud components update
para obter a versão mais recente.
Configure a conta de serviço do nó
As credenciais da conta de serviço de cada nó continuam a ser expostas aos cargas de trabalho. Por predefinição, os seus nós usam a conta de serviço predefinida do Compute Engine. Deve configurar uma conta de serviço com privilégios mínimos para os seus nós usarem em vez da conta de serviço predefinida do Compute Engine. Em seguida, anexe esta conta de serviço aos seus nós para que um atacante não possa contornar as proteções de metadados do GKE usando a API Compute Engine para aceder diretamente às instâncias de VM subjacentes.
Para mais informações, consulte o artigo Use contas de serviço de nós com o menor número possível de privilégios.
Para criar uma conta de serviço de nó com privilégios mínimos, siga os seguintes passos:
Crie uma nova conta de serviço de gestão de identidade e de acesso (IAM) e guarde o endereço de email numa variável de ambiente:
gcloud iam service-accounts create NODE_SA_NAME \ --display-name="DISPLAY_NAME" export NODE_SA_EMAIL=$(gcloud iam service-accounts list --format='value(email)' \ --filter='displayName:DISPLAY_NAME')
Substitua o seguinte:
NODE_SA_NAME
: o nome da sua nova conta de serviço do nó.DISPLAY_NAME
: o nome a apresentar da nova conta de serviço.
O endereço de email da conta de serviço do nó tem o formato
NODE_SA_NAME@PROJECT_ID.iam.gserviceaccount.com
.Configure a sua conta de serviço com as funções e as autorizações mínimas para executar os nós do GKE:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$NODE_SA_EMAIL \ --role=roles/monitoring.metricWriter gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$NODE_SA_EMAIL \ --role=roles/monitoring.viewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$NODE_SA_EMAIL \ --role=roles/logging.logWriter
Substitua
PROJECT_ID
pelo ID do seu Google Cloud projeto.Além disso, se o seu cluster extrair imagens privadas do Artifact Registry, adicione a função
roles/artifactregistry.reader
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$NODE_SA_EMAIL \ --role=roles/artifactregistry.reader
Ocultação de metadados
A ocultação de metadados do GKE impede que os pods do utilizador acedam a kube-env
, que contém credenciais do kubelet, e ao token de identidade da instância da VM.
As firewalls de ocultação de metadados encaminham o tráfego dos pods de utilizadores (pods que não estão a ser executados em
HostNetwork
) para o servidor de metadados do cluster, permitindo apenas consultas seguras. A firewall impede que os pods de utilizador usem credenciais do kubelet para ataques de escalada de privilégios ou que usem a identidade da VM para ataques de escalada de instâncias.
A Workload Identity Federation para o GKE substitui a necessidade de usar a ocultação de metadados e expande as proteções que a ocultação de metadados oferece. Deve usar a Workload Identity Federation para o GKE em vez da ocultação de metadados em todas as situações. Para saber mais, consulte o artigo Acerca da federação de identidades da carga de trabalho para o GKE.
Para ativar a ocultação de metadados, use a opção descontinuada --workload-metadata=SECURE
no comando
gcloud beta container clusters create
ou no comando
gcloud beta container node-pools create
.
Limitações
A ocultação de metadados tem limitações, como as seguintes:
- A ocultação de metadados apenas protege o acesso a
kube-env
e ao token de identidade da instância do nó. - A ocultação de metadados não restringe o acesso à conta de serviço do nó.
- A ocultação de metadados não restringe o acesso a outros metadados de instâncias relacionados.
- A ocultação de metadados não restringe o acesso a outras APIs de metadados antigas.
- A ocultação de metadados não restringe o tráfego de pods em execução na rede do anfitrião (
hostNetwork: true
na especificação do pod).
Desativação e transição das APIs de metadados antigos
Os pontos finais do servidor de metadados do Compute Engine v0.1
e v1beta1
foram descontinuados
e encerrados a 30 de setembro de 2020.
Para o cronograma de encerramento, consulte o artigo v0.1
e v1beta1
descontinuação dos pontos finais do servidor de metadados.