Usar implantação forçada (GKE, Distributed Cloud)

Esta página fornece instruções sobre como usar o originais com a autorização binária.

Antes de começar

Este guia pressupõe que você tenha configurado a autorização binária.

Visão geral

Use o acesso de emergência para implantar uma imagem de contêiner que a autorização binária bloqueia.

A Breakglass oferece uma saída de emergência que permite modificar a aplicação da política de autorização binária para permitir que as imagens sejam implantadas, mesmo as que não seriam permitidas.

Esse recurso é implementado de acordo com recomendações na especificação do controlador de admissão do Kubernetes.

Quando você usa a implantação forçada para implantar uma imagem, um evento de implantação forçada é registrado automaticamente nos Registros de auditoria do Cloud, independentemente da implantação atender ou violar a política. Nos registros de auditoria do Cloud, é possível auditar manualmente ou acionar automaticamente um alerta ou outro evento downstream.

Para ativar o acesso de emergência, adicione um campo label à especificação do pod com uma sinalização de política break-glass.

Demonstrar um evento de acesso rápido

Esta seção mostra como usar a implantação forçada para implantar imagens, incluindo aquelas que violam a política de autorização binária.

Atualizar a política de autorização binária para rejeitar todas as solicitações de implantação

Para atualizar a política e proibir a implantação de todas as imagens, siga estas etapas:

Console do Google Cloud

  1. Acesse a página "Autorização binária" no Console do Google Cloud.

    Acesse Autorização binária

  2. Clique em Editar política.

  3. Na página Editar política, em Regra padrão do projeto, anote o modo de avaliação original e clique em Não permitir todas as imagens.

  4. Clique em Salvar política.

gcloud

  1. Para salvar a política atual no projeto atual, execute este comando:

    gcloud container binauthz policy export > SAVE_POLICY_YAML
    

    Substitua SAVE_POLICY_YAML pelo caminho do arquivo de exportação, por exemplo, /tmp/save_policy.yaml.

  2. Crie um arquivo de política:

    cat > TEST_POLICY_YAML << EOM
    admissionWhitelistPatterns:
    defaultAdmissionRule:
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      evaluationMode: ALWAYS_DENY
    globalPolicyEvaluationMode: DISABLE
    EOM
    

    Substitua TEST_POLICY_YAML por um caminho de arquivo, por exemplo, /tmp/policy.yaml.

  3. Importe a política:

    gcloud container binauthz policy import TEST_POLICY_YAML
    

    Substitua TEST_POLICY_YAML por um caminho de arquivo, por exemplo, /tmp/policy.yaml.

Por padrão, a implantação de todas as imagens é bloqueada.

Tentar implantar uma imagem

Nesta seção, você tentará implantar uma imagem. A regra padrão da política é configurada para impedir a implantação de todas as imagens. Portanto, a solicitação de implantação falha.

  1. Crie um arquivo de configuração no formato YAML. Este arquivo contém as informações básicas necessárias para criar o pod:

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: breakglass-pod
    spec:
      containers:
      - name: container-name
        image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. Crie o pod usando kubectl:

    kubectl create -f /tmp/create_pod.yaml
    

    Você verá um erro indicando que a imagem foi bloqueada pela política. O erro é semelhante a este:

    Error from server (Forbidden): error when creating "/tmp/create_pod.yaml": pods "breakglass-pod" is forbidden: image policy webhook backend denied one or more images: Image gcr.io/google-samples/hello-app denied by Binary Authorization default
    admission rule. Denied by always_deny admission rule`.

Ativar o acesso rápido e implantar novamente

Nesta seção, você ativará o acesso de emergência. Embora o acesso de emergência seja específico da autorização binária, é necessário atualizar o campo label na especificação do pod para ativá-lo.

Para ativar o acesso de emergência, execute os seguintes comandos:

  1. Crie um arquivo de configuração no formato YAML.

    O seguinte comando cria o arquivo que contém o rótulo break-glass e outras informações necessárias para criar o pod:

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
      labels:
        image-policy.k8s.io/break-glass: "true"
    spec:
      containers:
      - name: container-name
        image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. Crie o pod usando kubectl:

    kubectl create -f /tmp/create_pod.yaml
    

    Observe a saída: pod/pod-name created

Encontrar a entrada de registro da implantação forçada nos registros de auditoria do Cloud

Veja os eventos de implantação forçada nos Registros de auditoria do Cloud.

PodSpecs mais antigos que especificam annotations: alpha.image-policy.k8s.io/break-glass também acionam a implantação forçada e produzem entradas de registro. O uso dessa anotação não é mais recomendado, mas ainda é possível manter a compatibilidade com versões anteriores.

Limpar

Para excluir o pod e desativar o acesso de emergência, faça o seguinte:

  1. Exclua o pod:

      kubectl delete -f /tmp/create_pod.yaml
      

    Verifique se você recebeu uma saída como pod <var>pod-name</var> deleted.

  2. Remova o bloco label da especificação do pod.

  3. Redefina sua política:

    Console do Google Cloud

    1. Acesse a página "Autorização binária" no Console do Google Cloud.

      Acesse Autorização binária

    2. Clique em Editar política.

    3. Na página Editar política, em Regra padrão do projeto, redefina o modo de avaliação para a configuração anterior.

    4. Clique em Salvar política.

    gcloud

    1. Reimporte sua política original.

        gcloud container binauthz policy import SAVE_POLICY_YAML
      

      Substitua SAVE_POLICY_YAML pelo caminho para o arquivo criado anteriormente neste guia.

    Sua política será redefinida.

A seguir