Aplicar políticas de segurança do Autopilot em clusters padrão

Os clusters do Google Kubernetes Engine (GKE) Autopilot aplicam várias políticas de segurança projetadas para evitar muitos caminhos de ataque comuns. Este documento mostra aos administradores da plataforma como aplicar algumas ou todas essas políticas do Autopilot em clusters Standard. Não é possível desativar a aplicação da política de cluster em clusters do Autopilot, porque eles são projetados para uma postura de segurança do GKE de nível mais alto.

Nos clusters Standard, é possível ativar e desativar políticas específicas a qualquer momento. Os administradores da organização podem controlar se políticas específicas do Autopilot podem ser desativadas aplicando uma restrição personalizada na organização, pasta ou projeto. É possível usar essas políticas predefinidas para aplicar as práticas recomendadas de segurança sem precisar escrever funções e vinculações complexas de RBAC. Muitas das políticas no nível do cluster podem ajudar a melhorar a segurança do cluster, mesmo que você não tenha interesse em usar o modo Autopilot para o cluster ou as cargas de trabalho. Para mais informações sobre as políticas de cluster do Autopilot disponíveis, consulte a seção Políticas compatíveis.

Considerações para aplicar políticas de cluster do Autopilot

Embora os clusters do Autopilot sempre apliquem essas políticas, os clusters do Standard geralmente têm cargas de trabalho e pools de nós que podem violar as políticas aplicadas. Antes de aplicar ou desativar uma política no seu cluster, leia as considerações a seguir:

  • As mudanças se aplicam apenas a novas cargas de trabalho: quando você ativa uma política que se aplica a cargas de trabalho, as mudanças são aplicadas apenas aos pods criados ou modificados depois que você ativa essa política. Os pods atuais que violam a política podem continuar sendo executados. Antes de ativar uma política, revise as cargas de trabalho atuais no cluster para verificar se elas obedecem à restrição da política.
  • As políticas de pool de nós se aplicam a todos os nós: quando você ativa uma política que se aplica aos pools de nós no cluster Standard, as restrições são aplicadas a pools de nós novos e atuais. Se um pool de nós violar a política, a operação de atualização do cluster vai falhar. Por exemplo, se você tentar ativar a política no-standard-node-pools em um cluster que tenha um pool de nós gerenciado pelo usuário, a operação vai falhar. Antes de ativar uma política de pool de nós, revise os pools de nós atuais no cluster.
  • Ativar todas as políticas ativa o modo Autopilot: se você ativar todas as políticas do Autopilot disponíveis (incluindo a política que impede pools de nós gerenciados pelo usuário), todas as cargas de trabalho no cluster poderão ser executadas apenas no modo Autopilot. Isso significa que todas as suas cargas de trabalho precisam obedecer às restrições de segurança do Autopilot e a todas as políticas do cluster. Essa abordagem permite executar todo o cluster Standard no modo Autopilot, com a opção de desativar políticas específicas quando necessário.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ative a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e 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 políticas específicas do Autopilot no cluster

Use a CLI gcloud ou a API GKE para ativar políticas específicas ao criar ou atualizar um cluster padrão. Para adicionar políticas específicas do cluster do Autopilot à lista de políticas que o GKE aplica no cluster, use a flag --autopilot-cluster-policies com o comando gcloud container clusters create ou o comando gcloud container clusters update.

O exemplo a seguir mostra como ativar políticas em um cluster atual:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --autopilot-cluster-policies=AUTOPILOT_POLICIES

Substitua:

  • CLUSTER_NAME: o nome do cluster padrão.
  • CONTROL_PLANE_LOCATION: a região ou zona do plano de controle do cluster, como us-central1 ou us-central1-a.
  • AUTOPILOT_POLICIES: uma lista separada por vírgulas de políticas de cluster do Autopilot para começar a aplicar no cluster, como no-system-mutation,no-system-impersonation. É necessário especificar uma ou mais políticas compatíveis. As políticas especificadas são adicionadas à lista de políticas que o GKE já aplica no cluster. Para desativar a aplicação de uma política, consulte a seção Desativar políticas específicas do Autopilot no cluster.

Se o comando falhar com uma mensagem de erro que começa com Bad value [invalid policy]:, verifique se todos os nomes de política especificados estão na lista de políticas compatíveis.

Verificar a aplicação da política

Depois de ativar uma política específica, verifique se a aplicação funciona tentando criar um recurso que a viole. Por exemplo, se você ativar a política no-system-mutation, tente criar um pod no namespace kube-system. O GKE bloqueia a operação de criação do pod e mostra uma mensagem de erro semelhante a esta:

Error from server (Forbidden): pods is forbidden: User cannot create resource "pods" in API group "" in the namespace "kube-system": GKE Warden authz [denied by managed-namespaces-limitation]: the namespace "kube-system" is managed and the request's verb "create" is denied

Desativar políticas específicas do Autopilot no cluster

É possível desativar qualquer uma das políticas do cluster do Autopilot a qualquer momento. Desativar uma política é útil em situações em que os requisitos de segurança mudaram ou quando um fluxo de trabalho existente foi interrompido ao ativar essa política. Para remover uma política da lista de políticas que o GKE aplica no cluster, use a flag --remove-autopilot-cluster-policies com o comando gcloud container clusters update:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --remove-autopilot-cluster-policies=AUTOPILOT_POLICIES

É necessário especificar pelo menos um valor para a flag --remove-autopilot-cluster-policies. Se você especificar essa flag sem um valor, a operação vai falhar.

Se o comando falhar com uma mensagem de erro que começa com Bad value [invalid policy]:, verifique se todos os nomes de política especificados estão na lista de políticas compatíveis.

Aplicar políticas de cluster do Autopilot em organizações

Os administradores da organização podem aplicar o uso dessas políticas de cluster em uma organização, um projeto ou uma pasta usando restrições personalizadas de política da organização. Essa medida adicional pode ajudar a evitar a remoção não autorizada ou não intencional de políticas de cluster necessárias. Use o campo ClusterPolicyConfig na sua restrição personalizada, como no exemplo a seguir:

name: organizations/ORGANIZATION_ID/customConstraints/custom.autopilotClusterPolicies
resourceTypes:
-   container.googleapis.com/Cluster
methodTypes:
-   CREATE
-   UPDATE
condition: "resource.ClusterPolicyConfig.no_system_mutation == true && resource.ClusterPolicyConfig.no_system_impersonation == true"
actionType: ALLOW
displayName: Autopilot policies in Standard clusters.
description: For all new and existing Standard clusters, enable the no_system_mutation and no_system_impersonation Autopilot cluster policies. For more information, see https://docs.cloud.google.com/kubernetes-engine/security/autopilot-cluster-policies-standard.

Políticas compatíveis

Cada uma das políticas do Autopilot disponíveis nos clusters padrão implementa uma ou mais práticas recomendadas de segurança no nível do cluster. Políticas como no-system-mutation, no-system-impersonation e no-unsafe-webhooks ajudam a melhorar a segurança de qualquer cluster do GKE, mesmo que você não tenha interesse em usar o modo Autopilot.

A tabela a seguir descreve as políticas do Autopilot que podem ser ativadas em clusters Standard e ajuda você a se preparar para a aplicação de políticas:

Nome da política Descrição O que fazer antes da ativação
no-system-mutation Impedir a criação ou modificação de recursos em namespaces do sistema do GKE (como kube-system). Mova seus pods dos namespaces do sistema para seus próprios namespaces.
no-system-impersonation Bloqueia tentativas de se passar por usuários do sistema e impede a criação de CertificateSigningRequests usando principais do sistema. Procure CertificateSigningRequests não autorizados que foram gerados para identidades do sistema. Se você encontrar algum CertificateSigningRequest aprovado e não autorizado, faça a rotação das credenciais do cluster para invalidar os certificados.
no-unsafe-webhooks Impede que webhooks e políticas de admissão interceptem recursos críticos do sistema, como objetos Node, PersistentVolumes ou CertificateSigningRequests. Use o serviço do recomendador para identificar webhooks que interceptam recursos do sistema. Se você encontrar algum webhook, modifique a configuração dele. Para mais informações, consulte Garantir a estabilidade do plano de controle ao usar webhooks.
no-standard-node-pools Impeça que pools de nós gerenciados pelo usuário, incluindo os criados manualmente e automaticamente, existam no cluster. Somente pools de nós do Autopilot podem existir no cluster. Exclua todos os pools de nós não Autopilot, incluindo o pool de nós padrão criado com o cluster.

A seguir