Como proteger metadados de cluster

O Google Kubernetes Engine (GKE) usa metadados de instância para configurar máquinas virtuais (VMs) de nó, mas alguns desses metadados são potencialmente confidenciais e precisam ser protegidos de cargas de trabalho em execução no cluster.

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 CLI do Google Cloud para essa tarefa, instale e inicialize a gcloud CLI. 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.

Configurar conta de serviço de nó

As credenciais da conta de serviço de cada nó continuam sendo expostas às cargas de trabalho. Por padrão, os nós usam a conta de serviço padrão do Compute Engine. Configure uma conta de serviço com privilégios mínimos para os nós usarem em vez da conta de serviço padrão do Compute Engine. Em seguida, anexe essa conta de serviço aos nós, para que um invasor não possa contornar as proteções de metadados do GKE usando a API Compute Engine para acessar as instâncias de VM subjacentes diretamente.

Para mais informações, consulte Usar as contas de serviço do nó com privilégio mínimo.

Para criar uma conta de serviço de nó com privilégios mínimos, execute as seguintes etapas:

  1. Crie uma nova conta de serviço do Identity and Access Management (IAM) e salve o endereço de e-mail em uma 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:

    • NODE_SA_NAME: o nome da nova conta de serviço do nó.
    • DISPLAY_NAME: o nome de exibição da nova conta de serviço.

    O endereço de e-mail da conta de serviço do nó tem o formato NODE_SA_NAME@PROJECT_ID.iam.gserviceaccount.com.

  2. Configure a conta de serviço com os papéis e as permissõ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 projeto Google Cloud .

    Além disso, se o cluster extrai imagens particulares do Artifact Registry, adicione o papel 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 de usuário acessem kube-env, que contém credenciais do kubelet, e o token de identidade da instância da VM.

Os firewalls de ocultação de metadados transitam de pods de usuários (não executados em HostNetwork) para o servidor de metadados do cluster, permitindo apenas consultas seguras. O firewall impede que pods de usuário utilizem credenciais do Kubelet para ataques de escalonamento de privilégios ou utilizem a identidade de VM para ataques de escalonamento de instância.

A federação de identidade da carga de trabalho do GKE substitui a necessidade de usar a ocultação de metadados e amplia as proteções oferecidas por ela. Use a federação de identidade da carga de trabalho do GKE em vez da ocultação de metadados em todas as situações. Para saber mais, consulte Sobre a federação de identidade da carga de trabalho para o GKE.

Para ativar a ocultação de metadados, use a opção --workload-metadata=SECURE descontinuada no comando gcloud beta container clusters create ou gcloud beta container node-pools create.

Limitações

O ocultamento de metadados tem limitações, como:

  • A ocultação de metadados protege apenas o acesso a kube-env e o 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ância relacionados.
  • A ocultação de metadados não restringe o acesso a outras APIs de metadados legadas.
  • A ocultação de metadados não restringe o tráfego dos pods em execução na rede do host (hostNetwork: true na especificação do pod).

Desativação e transição de APIs de metadados legados

O uso dos endpoints v0.1 e v1beta1 do servidor de metadados do Compute Engine foi suspenso e encerrado em 30 de setembro de 2020.

Para a programação de desativação, consulte Suspensão de uso dos endpoints dos servidores de metadados v0.1 e v1beta1.

A seguir