Configure uma política de autorização binária com o GKE

Este início rápido mostra como configurar e testar uma regra básica numa política de autorização binária.

Neste início rápido, vai ver e configurar a regra predefinida na política. A regra predefinida permite a implementação de todas as imagens. Teste esta situação implementando uma imagem de contentor num cluster do Google Kubernetes Engine (GKE). Em seguida, define a regra predefinida para não permitir a implementação de nenhuma imagem e tenta implementar uma imagem.

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. Instale kubectl.
  15. Crie um cluster com a aplicação da autorização binária ativada

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

    A autorização binária funciona com clusters do Autopilot ou Standard.

    Google Cloud consola

    Os passos seguintes configuram um cluster do Autopilot.

    1. Na Google Cloud consola, aceda à página GKE Clusters do Kubernetes:

      Aceda ao GKE

    2. Clique em Criar.

    3. Em Criar um cluster do Autopilot, faça o seguinte:

      1. No campo Nome, introduza test-cluster.

      2. No menu Região, selecione us-central1.

      3. Expanda a secção Definições avançadas.

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

      5. No painel Segurança, selecione a caixa de verificação Ativar autorização binária.

      6. Selecione Apenas aplicar.

      7. Clique em Seguinte e, de seguida, em Seguinte:rever e criar.

      8. Para começar a criar o cluster, 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
    

    A criação de um cluster pode demorar vários minutos.

    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/PROJECT_ID/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"
    

    O comando produz o seguinte resultado:

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

    Teste a política de aplicação

    Pode testar a política de aplicação tentando implementar uma imagem de contentor de amostra no cluster.

    Para este início rápido, vai usar a imagem do contentor de exemplo localizada no caminho us-docker.pkg.dev/google-samples/containers/gke/hello-app no Artifact Registry. Esta é uma imagem de contentor pública criada pela Google que contém uma aplicação de exemplo "Olá, mundo!".

    Google Cloud consola

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

    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 us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 como o caminho da imagem do contentor.

    5. Clique em Continuar.

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

    7. Clique em Implementar.

    kubectl

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

    1. Atualize o ficheiro kubeconfig local:

      gcloud container clusters get-credentials \
          --zone us-central1-a \
          test-cluster
      

      Isto fornece as credenciais e as informações do ponto final necessárias para aceder ao cluster no GKE.

    2. Implemente a imagem:

      kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
      

    Agora, verifique se a implementação foi permitida pela Binary Authorization.

    Google Cloud consola

    Para verificar se a imagem foi implementada, aceda à página Workloads do GKE na Google Cloud consola.

    Aceda ao GKE

    Uma carga de trabalho para a implementação aparece com um ícone verde que indica que a imagem foi implementada com êxito.

    kubectl

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

    kubectl get pods
    

    O comando imprime uma mensagem semelhante à seguinte, que indica que a implementação foi bem-sucedida:

    NAME                            READY     STATUS    RESTARTS   AGE
    hello-server-579859fb5b-h2k8s   1/1       Running   0          1m
    

    Certifique-se de que elimina a implementação para poder continuar para o passo seguinte:

    Google Cloud consola

    Para eliminar a implementação, faça o seguinte:

    1. Volte à página Workloads do GKE na Google Cloud consola.

      Aceda ao GKE

    2. Selecione a carga de trabalho hello-server.

    3. Clique em Eliminar.

    kubectl

    Para eliminar a implementação, faça o seguinte:

    kubectl delete deployment hello-server
    

    Configure a política de aplicação para não permitir todas as imagens

    Agora, modifique a política para bloquear a implementação de todas as imagens, em vez de a permitir.

    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. Clique em Guardar política.

    gcloud

    Para modificar a política, 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.

      O ficheiro YAML da política deve aparecer da seguinte forma:

      globalPolicyEvaluationMode: ENABLE
      defaultAdmissionRule:
        evaluationMode: ALWAYS_DENY
        enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      name: projects/PROJECT_ID/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",
        "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"
      

    Volte a testar a política

    Mais uma vez, teste a política implementando uma imagem de contentor de amostra no cluster. Desta vez, a autorização binária impede a implementação da imagem.

    Google Cloud consola

    Implemente a imagem:

    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 us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 como o caminho da imagem do contentor.

    5. Clique em Continuar.

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

    7. Clique em Implementar.

    kubectl

    Implemente a imagem:

    kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
    

    Já pode verificar se a política foi bloqueada:

    Google Cloud consola

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

    Volte à página Workloads do GKE na Google Cloud consola.

    Aceda ao GKE

    A carga de trabalho para a imagem do contentor é apresentada com um ícone vermelho que indica que a imagem não foi implementada.

    kubectl

    Para verificar se a imagem não foi implementada, execute o seguinte comando:

    kubectl get pods
    

    O comando imprime a seguinte mensagem, que indica que a imagem não foi implementada:

    No resources found.
    

    Pode obter mais detalhes sobre a implementação:

    kubectl get event --template \
    '{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}{{.message}}{{"\n"}}{{end}}'
    

    Vê uma resposta semelhante à seguinte:

    FailedCreate: Error creating: pods POD_NAME is forbidden: admission webhook "imagepolicywebhook.image-policy.k8s.io" denied the request: Image IMAGE_NAME denied by Binary Authorization default admission rule. Denied by always_deny admission rule
    

    Neste resultado:

    • POD_NAME: o nome do agrupamento.
    • IMAGE_NAME: o nome da imagem.
    • ATTESTOR_NAME: o nome do atestador.

    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, faça o seguinte:

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

    O que se segue?