Esta página mostra-lhe como executar cargas de trabalho privilegiadas a partir de parceiros do Google Kubernetes Engine (GKE) Autopilot. Aprende a configurar um volume de trabalho de sincronização que instala uma lista de autorizações no cluster e mantém a lista de autorizações atualizada.
Esta página destina-se aos seguintes tipos de funções:
- Engenheiros de segurança que querem garantir que as cargas de trabalho de terceiros precisam de uma lista de autorizações para serem executadas nos seus clusters e provêm de fontes aprovadas pelo GKE.
- Engenheiros de plataformas que querem ativar cargas de trabalho de terceiros em clusters para desbloquear equipas de aplicações.
Para saber mais sobre as funções comuns e as tarefas de exemplo que referimos na nossa documentação, consulte o artigo Funções e tarefas comuns de utilizadores do GKE.
Antes de ler esta página, certifique-se de que conhece o seguinte:
- Recursos personalizados do Kubernetes
- Restrições de segurança do GKE Autopilot
- Parceiros do GKE Autopilot
Acerca das cargas de trabalho de parceiros privilegiados no piloto automático
O GKE permite que um subconjunto de parceiros aprovados execute cargas de trabalho privilegiadas em clusters do Autopilot. Estas cargas de trabalho privilegiadas podem ignorar algumas das restrições de segurança que o Autopilot aplica. Por exemplo, um parceiro pode ter de executar uma carga de trabalho que use capacidades específicas do Linux ou requer um contentor privilegiado.
Os parceiros criam e mantêm listas de autorizações para as respetivas cargas de trabalho privilegiadas. Cada lista de autorizações é um ficheiro que corresponde a uma carga de trabalho de parceiro privilegiado específica. Os parceiros enviam estes ficheiros de lista de autorizações para o GKE para aprovação. Após a aprovação, o GKE aloja o ficheiro da lista de autorizações num repositório gerido pela Google.
Para executar uma carga de trabalho de parceiro, instala o ficheiro da lista de autorizações correspondente no seu cluster. O GKE fornece um recurso personalizado do Kubernetes denominado AllowlistSynchronizer
que instala listas de autorizações e as mantém atualizadas.
Depois de instalar com êxito uma lista de autorizações, pode implementar a carga de trabalho de parceiro privilegiado correspondente.
Erros e pedidos de funcionalidades para cargas de trabalho privilegiadas e listas de autorizações
Os parceiros são responsáveis pela criação, desenvolvimento e manutenção das respetivas cargas de trabalho privilegiadas e listas de autorizações. Se encontrar um erro ou tiver um pedido de funcionalidade para uma carga de trabalho privilegiada ou uma lista de autorizações, contacte o parceiro correspondente.
Acerca do comando AllowlistSynchronizer
O AllowlistSynchronizer
é um controlador que é executado no plano de controlo do GKE. Implementa um novo AllowlistSynchronizer
como um manifesto YAML,
semelhante à forma como implementa qualquer outra carga de trabalho do Kubernetes. No manifesto, especifica o caminho para o ficheiro da lista de autorizações que quer instalar, que recebe do parceiro externo. O sincronizador encontra o ficheiro da lista de autorizações do parceiro num repositório gerido pela Google e instala a lista de autorizações no seu cluster.
A cada 10 minutos, o sincronizador verifica se existem atualizações ao ficheiro da lista de autorizações. Se existir uma atualização, o sincronizador instala a lista de autorizações atualizada no seu cluster.
Para impedir a permissão de cargas de trabalho específicas, atualize os sincronizadores da lista de autorizações existentes para remover os caminhos dos ficheiros da lista de autorizações correspondentes e, em seguida, elimine o objeto WorkloadAllowlist
do cluster. Se eliminar um objeto WorkloadAllowlist
instalado sem remover o caminho do sincronizador da lista de autorizações, o sincronizador reinstala a lista de autorizações. Os parceiros não podem eliminar ficheiros de lista de autorizações do repositório gerido pela Google.
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.
Requisitos
- O recurso personalizado
AllowlistSynchronizer
requer a versão 1.32.2-gke.1652000 ou posterior do GKE. - Tem de saber que carga de trabalho de parceiro quer executar no seu cluster. Consulte a documentação do parceiro para obter instruções sobre como instalar a carga de trabalho privilegiada.
Crie um novo AllowlistSynchronizer
Para executar uma carga de trabalho privilegiada a partir de um parceiro, adicione o caminho para o ficheiro de lista de autorizações correspondente a um recurso personalizado AllowlistSynchronizer
. Em seguida, implementa o AllowlistSynchronizer no cluster.
- Num editor de texto, crie um novo ficheiro YAML.
Adicione o seguinte conteúdo ao ficheiro YAML:
apiVersion: auto.gke.io/v1 kind: AllowlistSynchronizer metadata: name: ALLOWLIST_SYNCHRONIZER_NAME spec: allowlistPaths: - ALLOWLIST1_PATH - ALLOWLIST2_PATH
Substitua o seguinte:
ALLOWLIST_SYNCHRONIZER_NAME
: o nome do novo sincronizador. Escolha um nome descritivo que identifique a carga de trabalho ou a equipa que a lista de autorizações suporta.ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...
: um ou mais caminhos para ficheiros de lista de autorizações de parceiros a instalar. Consulte a documentação da carga de trabalho do parceiro escolhido para este caminho. Pode especificar diretórios inteiros ou ficheiros individuais.
Implemente o ficheiro YAML no cluster:
kubectl apply -f PATH_TO_YAML_FILE
Substitua
PATH_TO_YAML_FILE
pelo caminho para o ficheiro YAML que criou no passo anterior.O controlador
AllowlistSynchronizer
instala ficheiros de lista de autorizações a partir dos caminhos especificados no seu cluster.Aguarde até que o sincronizador comunique um estado
Ready
:kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \ --timeout=60s
Também pode integrar a implementação da carga de trabalho de parceiros no pipeline de integração contínua e implementação contínua (CI/CD). Configure o seu fluxo de trabalho para aguardar até que a lista de autorizações seja instalada com êxito antes de implementar a carga de trabalho correspondente.
Atualize um AllowlistSynchronizer existente
Pode atualizar um AllowlistSynchronizer existente para adicionar ou remover ficheiros de listas de autorizações. Pode atualizar sincronizadores existentes em situações como as seguintes:
- O parceiro adiciona um novo ficheiro de lista de autorizações com um nome diferente.
- Quer adicionar uma nova lista de autorizações de carga de trabalho a um sincronizador existente que agrupa listas de autorizações relacionadas.
- Quiser remover uma lista de autorizações de um sincronizador porque já não quer usar a carga de trabalho correspondente.
Para atualizar um objeto AllowlistSynchronizer
existente, faça o seguinte:
Liste os sincronizadores existentes no cluster:
kubectl get allowlistsynchronizer
Abra a especificação do sincronizador que quer atualizar num editor de texto.
Atualize o campo
spec.allowlistPaths
para adicionar, modificar ou remover caminhos de ficheiros da lista de autorizações.Guarde e feche o editor de texto.
Aplique a configuração atualizada ao cluster:
kubectl apply -f PATH_TO_YAML_FILE
Substitua
PATH_TO_YAML_FILE
pelo caminho para o ficheiro YAML que atualizou no passo anterior.
Quando implementa uma configuração do sincronizador atualizada, o campo
managedAllowlistStatus.generation
no estado do objeto
AllowlistSynchronizer
aumenta em um. O AllowlistSynchronizer
controlador aplica então as suas alterações.
Monitorize o estado da sincronização da lista de autorizações
Depois de instalar um AllowlistSynchronizer
ou atualizar um sincronizador existente,
pode monitorizar o estado da sincronização. O estado ajuda a acompanhar a instalação, a remoção ou as modificações de ficheiros de lista de autorizações, bem como quaisquer erros que possam ocorrer.
Para monitorizar o estado geral da sincronização, execute o seguinte comando:
kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml
O resultado é semelhante ao 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/allowlist1.yaml"
generation: 1
phase: Installed
lastSuccessfulSync: "2024-10-10T10:00:00Z"
- filePath: "gs://path/to/allowlist2.yaml"
phase: Failed
lastError: "Initial install failed: invalid contents"
lastSuccessfulSync: "2024-10-08T10:00:00Z"
Para ver uma descrição destes campos, consulte o estado AllowlistSynchronizer
.
Verifique se existe uma lista de autorizações no seu cluster
Para verificar se existe uma lista de autorizações no seu cluster, execute o seguinte comando:
kubectl get workloadallowlist
O resultado é uma lista das listas de autorizações instaladas no cluster. Verifique se o resultado inclui a lista de autorizações que quer usar.
Implemente a carga de trabalho privilegiada
Depois de uma lista de autorizações ser instalada com êxito, pode implementar a carga de trabalho correspondente no cluster. O parceiro que fornece a carga de trabalho também deve fornecer-lhe instruções de instalação para a carga de trabalho. Para ver uma lista dos parceiros do Autopilot e links para a respetiva documentação, consulte o artigo Parceiros do Autopilot.
Use repositórios privados de imagens espelhadas
Pode espelhar as imagens de contentores de cargas de trabalho de parceiros em repositórios privados que lhe pertencem. Para executar estas imagens espelhadas numa carga de trabalho, tem de cumprir todos os seguintes requisitos:
- O resumo SHA-256 da imagem espelhada tem de corresponder ao resumo da imagem da carga de trabalho do parceiro disponível publicamente.
- O resumo da imagem SHA-256 que especificar tem de existir no objeto
WorkloadAllowlist
fornecido pelo parceiro e sincronizado com o seu cluster.
Se a carga de trabalho do parceiro suportar imagens espelhadas, a especificação da lista de autorizações
para essa carga de trabalho contém uma lista de resumos de imagens no campo
containers.imageDigests
na especificação da lista de autorizações para essa carga de trabalho. Normalmente, este campo tem um resumo separado para cada versão disponível da imagem do contentor. Para ver esta lista de resumos de imagens, faça o seguinte:
- Verifique se a lista de autorizações existe no seu cluster.
Obtenha a especificação da lista de autorizações instalada:
kubectl get workloadallowlist ALLOWLIST_NAME -o yaml
Substitua
ALLOWLIST_NAME
pelo nome da lista de autorizações instalada. Por exemplo,company-name-solution-v1.0.0
.Para cargas de trabalho que suportam esta funcionalidade, o resultado é semelhante ao seguinte. O campo
imageDigests
tem uma lista de resumos permitidos.# lines omitted for clarity - containerName: pause-container1 imageDigests: - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23
Se o resultado não incluir um campo
imageDigests
ou se o resumo do lançamento que quer usar não estiver na lista, contacte diretamente o parceiro e peça-lhe para atualizar a respetiva lista de autorizações. Depois de o parceiro adicionar resumos de imagens à respetiva lista de autorizações e enviar as alterações para o GKE, o sincronizador da lista de autorizações no seu cluster instala automaticamente a lista de autorizações atualizada.Adicione um dos resumos de imagens suportados ao manifesto da carga de trabalho.
Por exemplo, considere a seguinte imagem numa especificação de pod publicamente disponível de um parceiro:
...
containers:
- name: pause-container1
image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
Pode usar uma imagem espelhada se o resumo corresponder ao resumo disponível publicamente, como no exemplo seguinte:
...
containers:
- name: pause-container1
image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
Tem de incluir o resumo SHA-256 no campo da imagem, semelhante ao exemplo anterior. Se os resumos não corresponderem, a imagem espelhada não é executada. Para preservar os resumos de imagens quando cria uma imagem espelhada de imagens de parceiros, considere usar uma ferramenta como o crane, o ORAS ou o skopeo.
Elimine uma carga de trabalho privilegiada
Para deixar de permitir que uma carga de trabalho privilegiada seja executada nos seus clusters, remova o caminho para a lista de autorizações correspondente do AllowlistSynchronizer. O sincronizador desinstala a lista de autorizações.
Se eliminar um objeto WorkloadAllowlist
do cluster em vez de atualizar o sincronizador, o sincronizador reinstala a lista de autorizações. Certifique-se de que remove o caminho do AllowlistSynchronizer
.
Para desinstalar uma lista de autorizações, faça o seguinte:
- No manifesto YAML do
AllowlistSynchronizer
que gere a lista de autorizações, remova o caminho para a lista de autorizações que quer desinstalar. Para ver instruções, consulte a secção Atualize uma secção AllowlistSynchronizer existente. Para verificar se a lista de autorizações foi desinstalada, obtenha uma lista de objetos
WorkloadAllowlist
no seu cluster:kubectl get workloadallowlist
No resultado, certifique-se de que a lista de autorizações que queria remover não é apresentada.
Elimine a carga de trabalho do cluster. Para ver instruções, consulte a documentação do fornecedor da carga de trabalho.
Impeça a instalação de listas de autorizações nos seus clusters
Para impedir a instalação de listas de autorização de cargas de trabalho privilegiadas em clusters específicos, use uma ValidatingAdmissionPolicy. A validação das políticas de admissão garante que os recursos do Kubernetes cumprem critérios específicos antes de poderem ser executados no cluster. Por exemplo, pode validar se uma etiqueta tem um valor específico.
Para impedir a instalação de listas de autorizações num cluster, faça o seguinte:
Guarde o seguinte manifesto ValidatingAdmissionPolicy como
disallow-allowlists.yaml
:apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingAdmissionPolicy metadata: name: "disallow-allowlists" spec: failurePolicy: Fail matchConstraints: resourceRules: - apiGroups: ["auto.gke.io"] apiVersions: ["*"] operations: ["*"] resources: ["allowlistsynchronizers"] validations: - expression: "false" message: 'AllowlistSynchronizer creation is not allowed'
Guarde o seguinte manifesto ValidatingAdmissionPolicyBinding como
disallow-allowlists-binding.yaml
:apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingAdmissionPolicyBinding metadata: name: "disallow-allowlists-binding" spec: policyName: "disallow-allowlists" validationActions: [Deny]
Implemente a ValidatingAdmissionPolicy no seu cluster:
kubectl apply -f disallow-allowlists.yaml kubectl apply -f disallow-allowlists-binding.yaml
Esta política impede a criação de novos AllowlistSynchronizers no cluster.
Resolver problemas
Se a sincronização ou a implementação da carga de trabalho falharem, consulte o artigo Resolva problemas de implementação de cargas de trabalho privilegiadas do Autopilot.
O que se segue?
- Parceiros do GKE Autopilot
- Execute cargas de trabalho privilegiadas de código aberto no GKE Autopilot
- Capacidades de segurança do GKE Autopilot
- Definição de recurso personalizado do AllowlistSynchronizer