Executar cargas de trabalho privilegiadas de parceiros do Autopilot do GKE


Nesta página, mostramos como executar cargas de trabalho privilegiadas de parceiros do Autopilot do Google Kubernetes Engine (GKE). Você vai aprender a configurar uma carga de trabalho de sincronização que instala uma lista de permissões no cluster e mantém a lista atualizada.

Esta página é destinada aos seguintes tipos de função:

  • 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.

Para saber mais sobre os papéis comuns e os exemplos de tarefas mencionados na nossa documentação, consulte Funções e tarefas de usuário comuns do GKE Enterprise.

Antes de ler esta página, confira se você conhece os seguintes conceitos:

Sobre as cargas de trabalho de parceiros privilegiados no Autopilot

O GKE permite que um subconjunto de parceiros aprovados execute cargas de trabalho privilegiadas em clusters do Autopilot. Essas cargas de trabalho privilegiadas podem ignorar algumas das restrições de segurança aplicadas pelo Autopilot. Por exemplo, um parceiro pode precisar executar uma carga de trabalho que usa recursos específicos do Linux ou requer um contêiner privilegiado.

Os parceiros criam e mantêm listas de permissões para as cargas de trabalho privilegiadas. Cada lista de permissões é um arquivo que corresponde a uma carga de trabalho específica de parceiro privilegiado. Os parceiros enviam esses arquivos de lista de permissões para o GKE para aprovação. Após a aprovação, o GKE hospeda o arquivo de lista de permissões em um repositório gerenciado pelo Google.

Para executar uma carga de trabalho do parceiro, instale o arquivo de lista de permissões correspondente no cluster. O GKE fornece um recurso personalizado do Kubernetes chamado AllowlistSynchronizer, que instala e atualiza listas de permissões. Depois que uma lista de permissões for instalada, você poderá implantar a carga de trabalho de parceiro privilegiado correspondente.

Bugs e solicitações de recursos para cargas de trabalho privilegiadas e listas de permissões

Os parceiros são responsáveis por criar, desenvolver e manter as listas de permissões e cargas de trabalho privilegiadas. 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 parceiro correspondente.

Sobre o controlador AllowlistSynchronizer

O AllowlistSynchronizer é um controlador executado no plano de controle do GKE. Você implanta um novo AllowlistSynchronizer como um manifesto YAML, semelhante à implantação de qualquer outra carga de trabalho do Kubernetes. No manifesto, você especifica o caminho para o arquivo de lista de permissões que você quer instalar, que é recebido do parceiro externo. O sincronizador encontra o arquivo de lista de permissões do parceiro em um repositório gerenciado pelo Google e instala a lista de permissões no cluster.

A cada 10 minutos, o sincronizador verifica se há atualizações no arquivo de lista de permissões. Se houver uma atualização, o sincronizador vai instalar a lista de permissões atualizada no cluster.

Para parar de permitir cargas de trabalho específicas, atualize os AllowlistSynchronizers atuais para remover os caminhos de arquivo de lista de permissões correspondentes e exclua o objeto WorkloadAllowlist do cluster. Se você excluir um objeto WorkloadAllowlist instalado sem remover o caminho do sincronizador de lista de permissões, ele reinstalará a lista de permissões. Os parceiros não podem excluir arquivos da lista de permissões do repositório gerenciado pelo Google.

Antes de começar

Antes de começar, veja se você realizou as seguintes tarefas:

  • Ative 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, em seguida, inicialize a CLI gcloud. Se você instalou a gcloud CLI anteriormente, instale a versão mais recente executando gcloud components update.

Requisitos

  • O recurso personalizado AllowlistSynchronizer requer o GKE versão 1.32.1-gke.1729000 ou mais recente.
  • Você precisa saber qual carga de trabalho do parceiro quer executar no cluster. Consulte a documentação do parceiro para ver instruções sobre como instalar a carga de trabalho privilegiada.

Crie um novo AllowlistSynchronizer.

Para executar uma carga de trabalho privilegiada de um parceiro, adicione o caminho para o arquivo de lista de permissões correspondente a um recurso personalizado AllowlistSynchronizer. Em seguida, implante o AllowlistSynchronizer no cluster.

  1. Em um editor de texto, crie um novo arquivo YAML.
  2. 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_PATH
    

    Substitua:

    • 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 aceita.
    • ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: um ou mais caminhos para instalar arquivos de lista de permissões de parceiros. Consulte a documentação da carga de trabalho do parceiro escolhido para este caminho. É possível especificar diretórios inteiros ou arquivos individuais.
  3. Implante o arquivo YAML no cluster:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Substitua PATH_TO_YAML_FILE pelo caminho para o arquivo YAML criado na etapa anterior.

    O controlador AllowlistSynchronizer instala arquivos de lista de permissões dos caminhos especificados no cluster.

  4. 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 implantação de carga de trabalho do parceiro ao seu pipeline de integração e implantação contínuas (CI/CD). Configure seu fluxo de trabalho para aguardar a instalação da lista de permissões 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 sincronizadores existentes em situações como estas:

  • O parceiro 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:

  1. Liste os sincronizadores existentes no cluster:

    kubectl get allowlistsynchronizer
    
  2. Abra a especificação do sincronizador que você quer atualizar em um editor de texto.

  3. Atualize o campo spec.allowlistPaths para adicionar, modificar ou remover caminhos de arquivo da lista de permissões.

  4. Salve e feche o editor de texto.

  5. Aplique a configuração atualizada ao cluster:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Substitua PATH_TO_YAML_FILE pelo caminho para o arquivo YAML que você atualizou na etapa anterior.

Quando você implanta uma configuração atualizada do sincronizador, o campo managedAllowlistStatus.generation no status do objeto AllowlistSynchronizer aumenta em um. 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, é possível monitorar o status da sincronização. O status ajuda a acompanhar a instalação, a remoção ou as modificações de arquivos de lista de permissões, além de qualquer erro que possa 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/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 uma descrição desses campos, consulte Status 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ões instaladas no cluster. Confira 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, você poderá implantar a carga de trabalho correspondente no cluster. O parceiro que fornece a carga de trabalho também precisa fornecer instruções de instalação para você. Para conferir uma lista de parceiros do Autopilot e links para a documentação deles, consulte Parceiros do Autopilot.

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, ele reinstalará a lista de permissões. Remova o caminho do AllowlistSynchronizer.

Para desinstalar uma lista de permissões, faça o seguinte:

  1. 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 existente.
  2. Para verificar se a lista de permissões foi desinstalada, confira uma lista de objetos WorkloadAllowlist no cluster:

    kubectl get workloadallowlist
    

    Na saída, verifique se a lista de permissões que você queria remover não aparece.

  3. Exclua a carga de trabalho do cluster. Para instruções, consulte a documentação do provedor de carga de trabalho.

Impedir a instalação de listas de permissões nos clusters

Para evitar a instalação de listas de permissões de carga 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 atendam a critérios específicos antes de serem executados no cluster. Por exemplo, é possível validar se um rótulo tem um valor específico.

Para evitar a instalação de listas de permissões em um cluster, faça o seguinte:

  1. Salve 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'
    
  2. Salve 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]
    
  3. Implante o ValidatingAdmissionPolicy no cluster:

    kubectl apply -f disallow-allowlists.yaml
    kubectl apply -f disallow-allowlists-binding.yaml
    

Essa política impede a criação de novos AllowlistSynchronizers no cluster.

Resolver problemas

Se a sincronização ou a implantação da carga de trabalho falharem, consulte Resolver problemas de implantação de cargas de trabalho privilegiadas do Autopilot.

A seguir