Proteção dos metadados do cluster

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:

  1. 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.

  2. 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.

O que se segue?