- Configurar o GKE para executar apenas cargas de trabalho privilegiadas específicas no modo Autopilot.
- Instalar listas de permissões para cargas de trabalho privilegiadas.
Este documento é destinado aos seguintes tipos de papéis:
- 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 que 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 estar familiarizado com 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 a postura de segurança. É possível modificar essas restrições para executar cargas de trabalho privilegiadas específicas instalando listas de permissões que correspondam a essas cargas de trabalho. Por padrão, o Autopilot permite instalar listas de permissões de parceiros do Autopilot e projetos de código aberto específicos. Os clientes qualificados do GKE também podem criar listas de permissões para cargas de trabalho privilegiadas de propriedade do cliente que eles fazem 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 a lista de permissões e a mantém 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 uma solicitação de recurso para uma carga de trabalho privilegiada ou 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 Google Cloud CLI para essa tarefa,
instale e, em seguida,
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.
- Verifique se é possível configurar clusters para instalar listas de permissões 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ões.
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 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 mais recente.
- 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 o GKE versão 1.35 ou mais recente.
Configurar caminhos de lista de permissões para um cluster
Esta seção mostra 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 listas 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. Também é possível especificar fontes de lista de permissões aprovadas para uma organização, pasta, ou projeto inteiro usando uma política da organização.
Identifique os caminhos para os arquivos de lista de permissões a serem adicionados ao cluster. É possível especificar vários caminhos ao criar ou atualizar o cluster. Também é possível desativar a instalação da lista de permissões de qualquer origem 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 de lista de permissões aprovadas para um cluster, use a flag
--autopilot-privileged-admissionao criar ou atualizar um cluster do Autopilot ou Standard, como no comando a seguir: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 arquivos ou diretórios de lista de permissões. 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 atual sem especificar a flag --autopilot-privileged-admission, a configuração de caminho atual desse cluster não será alterada. Não é necessário especificar essa flag sempre que você atualizar um cluster.
Depois que a operação de criação ou atualização do cluster for concluída, será possível instalar listas de permissões dos caminhos especificados criando AllowlistSynchronizers.
Criar um novo AllowlistSynchronizer
Para executar uma carga de trabalho privilegiada, adicione o caminho ao 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 arquivos ou diretórios de lista de permissões que você quer instalar, como no exemplo a seguir para listas de permissões aprovadas pelo GKE:allowlistPaths: - Gke-Org/accelerators/* - Wiz/wiz-sensor/v1/wiz-sensor-v1.yamlOu no exemplo a seguir para listas de permissões de propriedade do cliente:
allowlistPaths: - my-agent/log-collector/* - my-agent/privileged-logging-agent.yamlA configuração do cluster precisa oferecer suporte aos caminhos especificados, conforme descrito na seção Configurar caminhos de lista de permissões para um cluster. Além disso, cada AllowlistSynchronizer precisa conter exclusivamente listas de permissões aprovadas pelo GKE ou exclusivamente listas de permissões de propriedade do cliente.
Se você instalar listas de permissões de um bucket do Cloud Storage de propriedade do cliente, adicione os campos
spec.projectNumberespec.bucketNameao AllowlistSynchronizer. Para mais detalhes, consulte a AllowlistSynchronizer CustomResourceDefinition.Implante o arquivo YAML no cluster:
kubectl apply -f PATH_TO_YAML_FILESubstitua
PATH_TO_YAML_FILEpelo caminho do arquivo YAML criado na etapa anterior.O controlador AllowlistSynchronizer instala arquivos de lista de permissões 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 contínua e implantação contínua (CI/CD). Configure o fluxo de trabalho para aguardar até que a lista de permissões seja instalada com sucesso antes de implantar a carga de trabalho correspondente.
Atualizar um AllowlistSynchronizer atual
É possível atualizar um AllowlistSynchronizer atual para adicionar ou remover arquivos de lista de permissões. Você pode atualizar os sincronizadores atuais em situações como as seguintes:
- 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 atual 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 atual, 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 arquivos de 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 do arquivo YAML atualizado na etapa anterior.
Ao implantar 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ões
Depois de instalar um AllowlistSynchronizer ou atualizar um sincronizador atual, é possível monitorar o status da sincronização. O status ajuda a acompanhar a instalação, remoção ou modificações de arquivos de lista de permissões, bem como quaisquer erros que possam ocorrer.
Para monitorar o status geral da sincronização, execute o seguinte comando:
kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml
O resultado será assim:
...
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 de permissões example-allowlist-2.yaml foi instalada com sucesso. Para uma descrição desses campos, consulte
Status do AllowlistSynchronizer.
Verificar se uma lista de permissões existe 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ões instaladas no cluster. Verifique se a saída inclui a lista de permissões que você quer usar.
Implantar a carga de trabalho privilegiada
Depois que uma lista de permissões for instalada com sucesso, será possível 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 a carga de trabalho. Para 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, é necessário 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 da imagem SHA-256 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 para o 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.
Receba 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 à seguinte. 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 de permissões atualizada.Adicione um dos resumos de imagens compatíveis ao manifesto da carga de trabalho.
Por exemplo, considere a imagem a seguir 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 corresponderem, a imagem espelhada não será executada. Para preservar resumos de imagens ao espelhar imagens de parceiros, considere usar uma ferramenta como crane, ORAS, ou skopeo.
Excluir uma carga de trabalho privilegiada
Para impedir que uma carga de trabalho privilegiada seja executada nos 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, o sincronizador vai reinstalar a lista de permissões. Verifique se você removeu 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 de permissões que você quer desinstalar. Para instruções, consulte a seção Atualizar um 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 impedir a instalação de listas de permissões de cargas de trabalho privilegiadas em clusters específicos, especifique uma string vazia ("") na
--autopilot-privileged-admission flag ao criar ou atualizar um cluster.
Para desativar caminhos de lista de permissões específicos para um cluster, omita os caminhos para essas listas de permissões 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 de lista de permissões. Omita os caminhos que você quer desativar.Para desativar todas as listas de permissões 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 AllowlistSynchronizer CustomResourceDefinition