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
- 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.
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
- Se não estiver a usar o Cloud Shell,
instale o
kubectl
. Aceda à página Clusters do GKE na Google Cloud consola.
A consola apresenta uma lista de clusters do GKE no seu Google Cloud projeto.
Clique em Criar cluster.
Introduza
test-cluster
no campo Nome.Selecione Zonal nas opções de Tipo de localização.
Selecione
us-central1-a
na lista pendente Zona.Clique no link Segurança para revelar o painel Segurança.
No painel Segurança, selecione Ativar autorização binária.
Selecione Apenas aplicar.
Clique em Criar.
Aceda à página Autorização binária na Google Cloud consola.
A consola apresenta detalhes sobre a política.
Clique em Editar política.
Em Regra predefinida do projeto, a opção Permitir todas as imagens está selecionada.
Volte à página Autorização binária na Google Cloud consola.
Clique em Editar política.
Selecione Não permitir todas as imagens.
Em Imagens isentas de regras de implementação, expanda Caminhos de imagens.
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
Clique em Concluído para guardar o caminho da imagem.
Clique em Guardar política.
Exporte o ficheiro YAML da política:
gcloud container binauthz policy export > /tmp/policy.yaml
Num editor de texto, altere
evaluationMode
deALWAYS_ALLOW
paraALWAYS_DENY
e adicione imagens isentas aadmissionWhitelistPatterns
.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
Importe novamente o ficheiro YAML da política para a Autorização binária:
gcloud container binauthz policy import /tmp/policy.yaml
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
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"
Implemente uma imagem isenta no cluster.
Google Cloud consola
Implemente uma imagem isenta:
Aceda à página Clusters do GKE na Google Cloud consola.
Clique em Implementar.
A consola pede-lhe que introduza detalhes sobre a implementação.
Selecione Imagem de contentor existente.
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
Clique em Continuar.
Introduza
hello-server
no campo Nome da aplicação.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
Verifique se a imagem foi autorizada a ser implementada:
Google Cloud consola
Para verificar se a imagem foi implementada, faça o seguinte:
- Aceda à página do GKE.
- 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.
Elimine o pod.
Google Cloud consola
Na página Cargas de trabalho do GKE:
Selecione a carga de trabalho hello-server.
Clique em Eliminar.
Quando lhe for pedido que elimine recursos, clique em Eliminar.
kubectl
kubectl delete pod hello-server
Aceda à página Clusters do GKE na Google Cloud consola.
Selecione o cluster
test-cluster
e clique em Eliminar.- Para saber mais sobre a isenção de imagens, incluindo a utilização de carateres universais para isentar várias imagens, consulte o artigo Isente imagens.
- Para ver tutoriais completos que descrevem como configurar e aplicar uma política que exige atestações, consulte o seguinte:
- Leia os nossos recursos sobre DevOps e explore o programa de investigação DevOps Research and Assessment (DORA).
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
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:
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:
gcloud
Para modificar a política de modo a permitir imagens de exemplo do Artifact Registry, faça o seguinte:
API REST
Para modificar a política, faça o seguinte:
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:
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:
gcloud
Para eliminar o cluster, introduza o seguinte comando:
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster