- Configure o GKE para executar apenas cargas de trabalho privilegiadas específicas no modo Autopilot.
- Instale listas de permissão para cargas de trabalho privilegiadas.
Este documento é destinado aos seguintes tipos de funções:
- Engenheiros de segurança que querem garantir que as cargas de trabalho de terceiros precisem de uma lista de permissões para serem executadas nos clusters e venham de fontes aprovadas pelo GKE.
- Engenheiros de plataforma que querem ativar cargas de trabalho de terceiros em clusters para desbloquear equipes de aplicativos.
Você já precisa conhecer os seguintes conceitos:
- Sobre a admissão de cargas de trabalho privilegiadas no modo Autopilot
- Recursos personalizados do Kubernetes
- Restrições de segurança do Autopilot do GKE
- Parceiros do Autopilot do GKE
Sobre cargas de trabalho privilegiadas no Autopilot
O modo Autopilot aplica um conjunto padrão de restrições às cargas de trabalho para melhorar sua postura de segurança. É possível modificar essas restrições para executar cargas de trabalho privilegiadas específicas instalando listas de permissão correspondentes a essas cargas. Por padrão, o Autopilot permite instalar listas de permissões de parceiros do Autopilot e projetos específicos de código aberto. Os clientes qualificados do GKE também podem criar listas de permissões para cargas de trabalho privilegiadas de propriedade do cliente que são enviadas por upload para buckets do Cloud Storage.
Cada lista de permissões é um arquivo que corresponde a uma carga de trabalho privilegiada específica. Para executar uma carga de trabalho privilegiada, faça o seguinte:
- Configure o cluster para permitir a instalação de listas de permissões de caminhos específicos. Por padrão, todas as listas de permissões de parceiros do Autopilot e projetos de código aberto aprovados são compatíveis.
- Crie um AllowlistSynchronizer no cluster que instala e mantém a lista de permissões atualizada.
Bugs e solicitações de recursos para cargas de trabalho privilegiadas e listas de permissões
O proprietário de uma carga de trabalho privilegiada é responsável por criar, desenvolver e manter as cargas de trabalho e as listas de permissões. Se você encontrar um bug ou tiver um pedido de recurso para uma carga de trabalho privilegiada ou uma lista de permissões, entre em contato com o proprietário correspondente.
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 gcloud CLI anteriormente, instale a versão
mais recente executando o comando
gcloud components update. Talvez as versões anteriores da gcloud CLI não sejam compatíveis com a execução dos comandos neste documento.
- Verifique se é possível configurar clusters para instalar listas de permissão da fonte selecionada. Os administradores da organização podem usar uma política da organização para controlar os caminhos que podem ser adicionados a um cluster. Para mais informações, consulte Restrição gerenciada do serviço de políticas da organização para listas de permissão.
Para cargas de trabalho privilegiadas de propriedade do cliente que estão disponíveis para clientes qualificados do GKE, verifique as duas condições a seguir:
- O administrador da sua organização adicionou o caminho do bucket da lista de permissões a uma política da organização. Para mais informações, consulte Restringir cargas de trabalho privilegiadas do GKE em organizações.
- A lista de permissões que você quer instalar está no bucket do Cloud Storage. Para mais informações, consulte Criar listas de permissões para cargas de trabalho privilegiadas do Autopilot.
Requisitos
- O recurso personalizado AllowlistSynchronizer requer o GKE versão 1.32.2-gke.1652000 ou posterior.
- Você precisa saber qual carga de trabalho privilegiada quer executar no cluster.
- Para modificar a configuração do caminho da lista de permissões de um cluster, ele precisa executar a versão 1.35 ou mais recente do GKE.
Configurar caminhos de lista de permissões para um cluster
Nesta seção, mostramos como configurar um cluster para oferecer suporte à instalação de listas de permissões de um conjunto de caminhos aprovados. Por padrão, o Autopilot oferece suporte à instalação de lista de permissões de parceiros do GKE e projetos de código aberto aprovados. É possível modificar essa configuração padrão para clusters individuais. Você também pode especificar fontes aprovadas na lista de permissões para uma organização, pasta ou projeto inteiro usando uma política da organização.
Identifique os caminhos para adicionar os arquivos à lista de permissões do cluster. É possível especificar vários caminhos ao criar ou atualizar o cluster. Você também pode desativar a instalação da lista de permissões de qualquer fonte especificando uma string vazia em vez de um caminho. Para mais informações sobre os caminhos que podem ser especificados, consulte Caminhos da lista de permissões.
Para controlar as fontes aprovadas na lista de permissões de um cluster, use a flag
--autopilot-privileged-admissionao criar ou atualizar um cluster do Autopilot ou Standard, como no seguinte comando:gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...Substitua:
CLUSTER_NAME: um nome para o novo cluster.LOCATION: o local do plano de controle do cluster, comous-central1.ALLOWLIST1_PATH,ALLOWLIST2_PATH,...: uma lista separada por vírgulas de caminhos para permitir arquivos ou diretórios. Por exemplo,gke://*,gs://my-agent/privileged-logging-agent.yaml. Também é possível desativar a instalação da lista de permissões de qualquer origem especificando uma string vazia ("").
Se você atualizar um cluster sem especificar a flag
--autopilot-privileged-admission, a configuração de caminho atual para
esse cluster não será alterada. Não é necessário especificar essa flag sempre que
você atualiza um cluster.
Depois que a operação de criação ou atualização do cluster for concluída, você poderá instalar listas de permissão dos caminhos especificados criando AllowlistSynchronizers.
Criar um novo AllowlistSynchronizer
Para executar uma carga de trabalho privilegiada, adicione o caminho do arquivo de lista de permissões correspondente a uma especificação AllowlistSynchronizer em um arquivo YAML. Em seguida, implante o AllowlistSynchronizer no cluster.
- Em um editor de texto, crie um arquivo YAML.
Adicione o seguinte conteúdo ao arquivo YAML:
apiVersion: auto.gke.io/v1 kind: AllowlistSynchronizer metadata: name: ALLOWLIST_SYNCHRONIZER_NAME spec: allowlistPaths: - ALLOWLIST1_PATH - ALLOWLIST2_PATHSubstitua:
ALLOWLIST_SYNCHRONIZER_NAME: o nome do novo sincronizador. Escolha um nome descritivo que identifique a carga de trabalho ou a equipe que a lista de permissões oferece suporte.ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: uma lista de caminhos para permitir arquivos ou diretórios que você quer instalar, como no exemplo a seguir:allowlistPaths: - gke://* - gs://my-agent/privileged-logging-agent.yamlA configuração do cluster precisa ser compatível com os caminhos especificados, conforme descrito na seção Configurar caminhos de lista de permissões para um cluster.
Implante o arquivo YAML no cluster:
kubectl apply -f PATH_TO_YAML_FILESubstitua
PATH_TO_YAML_FILEpelo caminho para o arquivo YAML criado na etapa anterior.O controlador AllowlistSynchronizer instala arquivos de permissão dos caminhos especificados no cluster.
Aguarde até que o sincronizador informe um status
Ready:kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \ --timeout=60s
Também é possível integrar a instalação da lista de permissões e a implantação de cargas de trabalho privilegiadas ao pipeline de integração e implantação contínuas (CI/CD). Configure seu fluxo de trabalho para aguardar até que a lista de permissões seja instalada antes de implantar a carga de trabalho correspondente.
Atualizar um AllowlistSynchronizer
É possível atualizar um AllowlistSynchronizer para adicionar ou remover arquivos de lista de permissões. Você pode atualizar os sincronizadores atuais em situações como estas:
- O proprietário da carga de trabalho adiciona um novo arquivo de lista de permissões com um nome diferente.
- Você quer adicionar uma nova lista de permissões de carga de trabalho a um sincronizador que agrupa listas de permissões relacionadas.
- Você quer remover uma lista de permissões de um sincronizador porque não quer mais usar a carga de trabalho correspondente.
Para atualizar um objeto AllowlistSynchronizer, faça o seguinte:
Liste os sincronizadores atuais no cluster:
kubectl get allowlistsynchronizerAbra a especificação do sincronizador que você quer atualizar em um editor de texto.
Atualize o campo
spec.allowlistPathspara adicionar, modificar ou remover caminhos de arquivo da lista de permissões.Salve e feche o editor de texto.
Aplique a configuração atualizada ao cluster:
kubectl apply -f PATH_TO_YAML_FILESubstitua
PATH_TO_YAML_FILEpelo caminho para o arquivo YAML que você atualizou na etapa anterior.
Quando você implanta uma configuração de sincronizador atualizada, o campo
managedAllowlistStatus.generation no status do objeto
AllowlistSynchronizer é incrementado em um. Em seguida, o controlador AllowlistSynchronizer
aplica as mudanças.
Monitorar o status da sincronização da lista de permissão
Depois de instalar um AllowlistSynchronizer ou atualizar um sincronizador, você pode monitorar o status da sincronização. O status ajuda você a acompanhar a instalação, remoção ou modificações dos arquivos da lista de permissões, bem como os erros que podem ocorrer.
Para monitorar o status geral da sincronização, execute o seguinte comando:
kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml
O resultado será o seguinte:
...
status:
conditions:
- type: Ready
status: "False"
reason: "SyncError"
message: "some allowlists failed to sync: example-allowlist-1.yaml"
lastTransitionTime: "2024-10-12T10:00:00Z"
observedGeneration: 2
managedAllowlistStatus:
- filePath: "gs://path/to/example-allowlist-2.yaml"
generation: 1
phase: Installed
lastSuccessfulSync: "2024-10-10T10:00:00Z"
- filePath: "gs://path/to/example-allowlist-1.yaml"
phase: Failed
lastError: "Initial install failed: invalid contents"
lastSuccessfulSync: "2024-10-08T10:00:00Z"
Neste exemplo de saída, a lista de permissões example-allowlist-1.yaml não foi sincronizada, e a lista example-allowlist-2.yaml foi instalada. Para uma descrição desses campos, consulte
Status do AllowlistSynchronizer.
Verifique se há uma lista de permissões no cluster
Para verificar se uma lista de permissões existe no cluster, execute o seguinte comando:
kubectl get workloadallowlist
A saída é uma lista das listas de permissão instaladas no cluster. Confira se a saída inclui a lista de permissão que você quer usar.
Implantar a carga de trabalho privilegiada
Depois que uma lista de permissões for instalada, você poderá implantar a carga de trabalho correspondente no cluster. O proprietário da carga de trabalho também precisa fornecer instruções de instalação. Para conferir uma lista de parceiros do Autopilot e links para a documentação deles, consulte Parceiros do Autopilot.
Usar repositórios de espelhamento de imagens particulares
É possível espelhar as imagens de contêiner de cargas de trabalho privilegiadas em repositórios particulares de sua propriedade. Para executar essas imagens espelhadas em uma carga de trabalho, você precisa atender a todos os requisitos a seguir:
- O resumo SHA-256 da imagem espelhada precisa corresponder ao resumo da imagem da carga de trabalho disponível publicamente.
- O resumo SHA-256 da imagem especificado precisa existir no objeto
WorkloadAllowlistsincronizado com o cluster.
Se a carga de trabalho oferecer suporte a imagens espelhadas, a especificação da lista de permissões para essa
carga de trabalho vai conter uma lista de resumos de imagens no campo containers.imageDigests
na especificação da lista de permissões para essa carga de trabalho. Normalmente, esse campo tem um resumo separado para cada versão disponível da imagem do contêiner. Para conferir essa lista de resumos de imagens, faça o seguinte:
- Verifique se a lista de permissões existe no cluster.
Confira a especificação da lista de permissões instalada:
kubectl get workloadallowlist ALLOWLIST_NAME -o yamlSubstitua
ALLOWLIST_NAMEpelo nome da lista de permissões instalada. Por exemplo,company-name-solution-v1.0.0.Para cargas de trabalho que oferecem suporte a esse recurso, a saída é semelhante a esta. O campo
imageDigeststem uma lista de resumos permitidos.# lines omitted for clarity - containerName: pause-container1 imageDigests: - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23Se a saída não incluir um campo
imageDigestsou se o resumo da versão que você quer usar não estiver na lista, entre em contato diretamente com o proprietário da carga de trabalho e peça para ele atualizar a lista de permissões. Depois que o proprietário da carga de trabalho adicionar resumos de imagens à lista de permissões, o sincronizador de lista de permissões no cluster vai instalar automaticamente a lista atualizada.Adicione um dos resumos de imagem compatíveis ao manifesto da carga de trabalho.
Por exemplo, considere a seguinte imagem em uma especificação de pod disponível publicamente de um parceiro:
...
containers:
- name: pause-container1
image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
É possível usar uma imagem espelhada se o resumo corresponder ao resumo disponível publicamente, como no exemplo a seguir:
...
containers:
- name: pause-container1
image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
É necessário incluir o resumo SHA-256 no campo da imagem, semelhante ao exemplo anterior. Se os resumos não forem iguais, a imagem espelhada não será veiculada. Para preservar os resumos de imagens ao espelhar imagens de parceiros, use uma ferramenta como crane, ORAS ou skopeo.
Excluir uma carga de trabalho privilegiada
Para impedir que uma carga de trabalho privilegiada seja executada nos seus clusters, remova o caminho para a lista de permissões correspondente do AllowlistSynchronizer. O sincronizador desinstala a lista de permissões.
Se você excluir um objeto WorkloadAllowlist do cluster em vez de
atualizar o sincronizador, ele vai reinstalar a lista de permissões. Remova o caminho do AllowlistSynchronizer.
Para desinstalar uma lista de permissões, faça o seguinte:
- No manifesto YAML do AllowlistSynchronizer que gerencia a lista de permissões, remova o caminho para a lista que você quer desinstalar. Para instruções, consulte a seção Atualizar uma seção AllowlistSynchronizer atual.
Para verificar se a lista de permissões foi desinstalada, receba uma lista de objetos
WorkloadAllowlistno cluster:kubectl get workloadallowlistNa saída, verifique se a lista de permissões que você queria remover não aparece.
Exclua a carga de trabalho do cluster. Para instruções, consulte a documentação do provedor de carga de trabalho.
Impedir a instalação da lista de permissões nos clusters
Para evitar a instalação de listas de permissões de carga de trabalho privilegiadas em clusters
específicos, especifique uma string vazia ("") na flag
--autopilot-privileged-admission ao criar ou atualizar um cluster.
Para desativar caminhos específicos da lista de permissões de um cluster, omita os caminhos dessas listas ao criar ou atualizar um cluster:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...Substitua
ALLOWLIST1_PATH,ALLOWLIST2_PATH,...por uma lista separada por vírgulas de caminhos para fontes na lista de permissões. Omita os caminhos que você quer desativar.Para desativar todas as listas de permissão em um cluster atual, especifique uma string vazia como o caminho aprovado:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --autopilot-allowlist-paths=""
Resolver problemas
Se a sincronização ou a implantação da carga de trabalho falhar, consulte Resolver problemas na implantação de cargas de trabalho privilegiadas do Autopilot.
A seguir
- Saiba mais sobre as cargas de trabalho disponíveis dos parceiros do Autopilot do GKE
- Executar cargas de trabalho privilegiadas de código aberto no Autopilot do GKE
- Saiba mais sobre os recursos de segurança padrão do Autopilot do GKE
- Leia a CustomResourceDefinition AllowlistSynchronizer.