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
- 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
- Instale
kubectl
. Na Google Cloud consola, aceda à página GKE Clusters do Kubernetes:
Clique em Criar.
Em Criar um cluster do Autopilot, faça o seguinte:
No campo Nome, introduza
test-cluster
.No menu Região, selecione
us-central1
.Expanda a secção Definições avançadas.
Clique no link Segurança para revelar o painel Segurança.
No painel Segurança, selecione a caixa de verificação Ativar autorização binária.
Selecione Apenas aplicar.
Clique em Seguinte e, de seguida, em Seguinte:rever e criar.
Para começar a criar o cluster, 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.
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
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
como o caminho da imagem do contentor.Clique em Continuar.
Introduza
hello-server
no campo Nome da aplicação.Clique em Implementar.
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.
Implemente a imagem:
kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
Volte à página Workloads do GKE na Google Cloud consola.
Selecione a carga de trabalho
hello-server
.Clique em Eliminar.
Volte à página Autorização binária na Google Cloud consola.
Clique em Editar política.
Selecione Não permitir todas as imagens.
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
.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
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", "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"
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
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
como o caminho da imagem do contentor.Clique em Continuar.
Introduza
hello-server
no campo Nome da aplicação.Clique em Implementar.
- POD_NAME: o nome do agrupamento.
- IMAGE_NAME: o nome da imagem.
- ATTESTOR_NAME: o nome do atestador.
Aceda à página Clusters do GKE na Google Cloud consola.
Selecione o cluster
test-cluster
e clique em Eliminar.- Use o
built-by-cloud-build
atestador para implementar apenas imagens criadas pelo Cloud Build (pré-visualização). - Para ver um tutorial completo sobre como exigir atestações, consulte:
- Leia os nossos recursos sobre DevOps e explore o programa de investigação DevOps Research and Assessment (DORA).
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.
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:
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:
kubectl
Para testar a política, faça o seguinte:
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.
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:
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:
gcloud
Para modificar a política, faça o seguinte:
API REST
Para modificar a política, faça o seguinte:
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:
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.
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:
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, faça o seguinte:
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster