Atualize uma política de autorização binária

Este documento descreve como excluir imagens em políticas de autorização binária.

Neste documento, atualiza a política para isentar as imagens de contentores no Artifact Registry da aplicação da autorização binária e define a regra predefinida para impedir a implementação de todos os outros contentores.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Binary Authorization APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  7. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry, Binary Authorization APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  13. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  14. Se não estiver a usar o Cloud Shell, instale o kubectl.
  15. Crie um cluster com a autorização binária ativada

    Crie um cluster do GKE com a autorização binária ativada. Este é o cluster onde quer que as imagens de contentores implementadas sejam executadas.

    Google Cloud consola

    1. Aceda à página Clusters do GKE na Google Cloud consola.

      Aceda ao GKE

      A consola apresenta uma lista de clusters do GKE no seu Google Cloud projeto.

    2. Clique em Criar cluster.

    3. Introduza test-cluster no campo Nome.

      Campo de nome no modelo de cluster padrão

    4. Selecione Zonal nas opções de Tipo de localização.

    5. Selecione us-central1-a na lista pendente Zona.

    6. Clique no link Segurança para revelar o painel Segurança.

    7. No painel Segurança, selecione Ativar autorização binária.

      Ative a opção de autorização binária

    8. Selecione Apenas aplicar.

    9. Clique em Criar.

    gcloud

    Execute gcloud container clusters create com o sinalizador --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE ativado.

    gcloud container clusters create \
        --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
        --zone us-central1-a \
        test-cluster
    

    Veja a política predefinida

    Por predefinição, a sua política de autorização binária está configurada para permitir a implementação de todas as imagens de contentores.

    Google Cloud consola

    Para ver a política predefinida, faça o seguinte:

    1. Aceda à página Autorização binária na Google Cloud consola.

      Aceda à Autorização binária

      A consola apresenta detalhes sobre a política.

    2. Clique em Editar política.

    3. Em Regra predefinida do projeto, a opção Permitir todas as imagens está selecionada.

    gcloud

    Para ver a política predefinida, exporte o ficheiro YAML da política da seguinte forma:

    gcloud container binauthz policy export
    

    Por predefinição, o ficheiro tem o seguinte conteúdo:

    globalPolicyEvaluationMode: ENABLE
    defaultAdmissionRule:
      evaluationMode: ALWAYS_ALLOW
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    name: projects/<var>PROJECT_ID</var>/policy
    

    API REST

    Para ver a política predefinida, obtenha-a no formato JSON da seguinte forma:

    curl \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "x-goog-user-project: ${PROJECT_ID}" \
        "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
    

    A API REST devolve o seguinte:

    {
      "name": "projects/PROJECT_ID/policy",
      "globalPolicyEvaluationMode": "ENABLE",
      "defaultAdmissionRule": {
        "evaluationMode": "ALWAYS_ALLOW",
        "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
      }
    }
    

    Permita apenas imagens isentas

    Esta secção descreve como modificar a política para isentar imagens e não permitir a implementação de todas as outras imagens.

    Google Cloud consola

    Para modificar a política, faça o seguinte:

    1. Volte à página Autorização binária na Google Cloud consola.

      Aceda à Autorização binária

    2. Clique em Editar política.

    3. Selecione Não permitir todas as imagens.

    4. Em Imagens isentas de regras de implementação, expanda Caminhos de imagens.

    5. Clique em Adicionar caminhos de imagens.

      Artifact Registry

      Em Novo caminho da imagem, cole o seguinte caminho de um repositório do Artifact Registry:

      us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      
    6. Clique em Concluído para guardar o caminho da imagem.

    7. Clique em Guardar política.

    gcloud

    Para modificar a política de modo a permitir imagens de exemplo do Artifact Registry, faça o seguinte:

    1. Exporte o ficheiro YAML da política:

      gcloud container binauthz policy export  > /tmp/policy.yaml
      
    2. Num editor de texto, altere evaluationMode de ALWAYS_ALLOW para ALWAYS_DENY e adicione imagens isentas a admissionWhitelistPatterns.

      Para isentar as seguintes imagens de exemplo do Artifact Registry, modifique o ficheiro YAML da política da seguinte forma:

      admissionWhitelistPatterns:
      - namePattern: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      globalPolicyEvaluationMode: ENABLE
      defaultAdmissionRule:
        evaluationMode: ALWAYS_DENY
        enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      name: projects/<var>PROJECT_ID</var>/policy
      
    3. Importe novamente o ficheiro YAML da política para a Autorização binária:

      gcloud container binauthz policy import /tmp/policy.yaml
      

    API REST

    Para modificar a política, faça o seguinte:

    1. Crie um ficheiro de texto com a política atualizada no formato JSON:

      cat > /tmp/policy.json << EOM
      {
        "name": "projects/${PROJECT_ID}/policy",
        "admissionWhitelistPatterns": [
          {
            "namePattern": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
          }
        ],
        "globalPolicyEvaluationMode": "ENABLE",
        "defaultAdmissionRule": {
          "evaluationMode": "ALWAYS_DENY",
          "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
        }
      }
      EOM
      
    2. Envie a política atualizada para a API REST:

      curl -X PUT \
          -H "Content-Type: application/json" \
          -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
          -H "x-goog-user-project: ${PROJECT_ID}" \
          --data-binary @/tmp/policy.json  \
          "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
      

    Teste a política

    Para testar a política implementando a imagem que adicionou à lista de autorizações de Exempt image, faça o seguinte:

    1. Implemente uma imagem isenta no cluster.

      Google Cloud consola

      Implemente uma imagem isenta:

      1. Aceda à página Clusters do GKE na Google Cloud consola.

        Aceda ao GKE

      2. Clique em Implementar.

        A consola pede-lhe que introduza detalhes sobre a implementação.

      3. Selecione Imagem de contentor existente.

      4. Introduza o caminho da imagem do contentor.

        Artifact Registry

        Para implementar uma imagem do Artifact Registry, introduza o seguinte:

        us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        
      5. Clique em Continuar.

      6. Introduza hello-server no campo Nome da aplicação.

      7. Clique em Implementar.

      kubectl

      Artifact Registry

      Implemente a imagem a partir do Artifact Registry:

      kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
      
    2. Verifique se a imagem foi autorizada a ser implementada:

      Google Cloud consola

      Para verificar se a imagem foi implementada, faça o seguinte:

      1. Aceda à página do GKE.

      Aceda ao GKE

      1. Aceda à página Cargas de trabalho.

      A carga de trabalho hello-server aparece com um ícone verde, o que indica que está em execução.

      kubectl

      Para verificar se a implementação da imagem foi permitida, introduza o seguinte comando:

      kubectl get pods
      

      Vê a imagem em execução.

    3. Elimine o pod.

      Google Cloud consola

      Na página Cargas de trabalho do GKE:

      1. Selecione a carga de trabalho hello-server.

      2. Clique em Eliminar.

      3. Quando lhe for pedido que elimine recursos, clique em Eliminar.

      kubectl

      kubectl delete pod hello-server
      

    Limpar

    Para evitar incorrer em cobranças na sua Google Cloud conta pelos recursos usados nesta página, siga estes passos.

    Elimine o cluster que criou no GKE:

    Consola

    Para eliminar o cluster, faça o seguinte:

    1. Aceda à página Clusters do GKE na Google Cloud consola.

      Aceda ao GKE

    2. Selecione o cluster test-cluster e clique em Eliminar.

    gcloud

    Para eliminar o cluster, introduza o seguinte comando:

    gcloud container clusters delete \
        --zone=us-central1-a \
        test-cluster
    

    O que se segue?