Configurar uma política de autorização binária com o GKE
Neste guia de início rápido, mostramos como configurar e testar uma regra básica em uma política de autorização binária.
Neste guia de início rápido, você irá ver e configurar a regra padrão na política. A regra padrão permite que todas as imagens sejam implantadas. Para testar, implante uma imagem de contêiner em um cluster do Google Kubernetes Engine (GKE). Em seguida, defina a regra padrão para impedir que todas as imagens sejam implantadas e tente implantar uma imagem.
Antes de começar
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.
-
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.enablepermission. Learn how to grant roles.-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.
-
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.enablepermission. Learn how to grant roles.-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init - Instale
kubectl.
Funções exigidas
Para receber as permissões necessárias para configurar uma política de autorização binária com o GKE, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
-
Editor da política de autorização binária (
roles/binaryauthorization.policyEditor) -
Leitor do Compute (
roles/compute.viewer) -
Administrador do Kubernetes Engine (
roles/container.admin) -
Usuário da conta de serviço (
roles/iam.serviceAccountUser)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Criar um cluster com a aplicação da autorização binária ativada
Agora, crie um cluster do GKE com a autorização binária ativada. Este é o cluster em que você quer executar as imagens de contêiner implantadas.
A autorização binária funciona com clusters do Autopilot ou Standard.
Console do Google Cloud
As etapas a seguir configuram um cluster do Autopilot.
No console do Google Cloud , acesse a página Clusters do Kubernetes do GKE:
Clique em Criar.
Em Criar um cluster do Autopilot, faça isto:
No campo Nome, use
test-cluster.No menu Região, selecione
us-central1.Expanda a seção Configurações avançadas.
Clique no link Segurança para exibir o painel Segurança.
No painel Segurança, marque a caixa de seleção Ativar autorização binária.
Selecione Aplicar somente.
Clique em Próxima e depois em Próxima: analisar e criar.
Para começar a criar o cluster, clique em Criar.
gcloud
Execute gcloud container clusters create com a sinalização --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE ativada.
gcloud container clusters create \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--zone us-central1-a \
test-cluster
A criação de um cluster pode levar alguns minutos.
Política padrão
Por padrão, sua política de autorização binária é configurada para permitir que todas as imagens de contêiner sejam implantadas.
Console do Google Cloud
Para ver a política padrão, faça o seguinte:
Acesse a página Autorização binária no console do Google Cloud .
O console exibe detalhes sobre a política.
Clique em Editar política.
Em Regra padrão do projeto, a opção Permitir todas as imagens é selecionada.
gcloud
Para ver a política padrão, exporte o arquivo YAML da política da seguinte maneira:
gcloud container binauthz policy export
Por padrão, o arquivo 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 visualizar a política padrão, recupere-a no formato JSON da seguinte maneira:
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 a seguinte saída:
{
"name": "projects/PROJECT_ID/policy",
"globalPolicyEvaluationMode": "ENABLE",
"defaultAdmissionRule": {
"evaluationMode": "ALWAYS_ALLOW",
"enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
}
}
Testar a política de aplicação
É possível testar a política de aplicação tentando implantar uma imagem de contêiner de amostra no cluster.
Neste guia de início rápido, use a imagem do contêiner de amostra localizada no caminho
us-docker.pkg.dev/google-samples/containers/gke/hello-app no Artifact Registry. Esta é uma imagem
de contêiner pública criada pelo Google que contém um aplicativo
de amostra "Hello, World!".
Console do Google Cloud
Para testar a política:
Acesse a página Clusters do GKE no Google Cloud console.
Clique em Implantar.
O console solicita que você insira detalhes sobre a implantação.
Insira
hello-serverno campo Nome da implantação.Clique em Próxima: Detalhes do contêiner.
Selecione Imagem de contêiner atual.
Insira
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0como o caminho da imagem do contêiner.Clique em Implantar.
kubectl
Para testar a política:
Atualize o arquivo
kubeconfiglocal:gcloud container clusters get-credentials \ --zone us-central1-a \ test-clusterIsso fornece as credenciais e informações do endpoint necessárias para acessar o cluster no GKE.
Implante 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 implantação foi permitida pela autorização binária.
Console do Google Cloud
Para verificar se a imagem foi implantada, acesse a página Cargas de trabalho do GKE no console Google Cloud .
Uma carga de trabalho para a implantação é exibida com um ícone verde que indica que a imagem foi implantada com sucesso.
kubectl
Para verificar se a imagem foi implantada, faça o seguinte:
kubectl get pods
O comando imprime uma mensagem semelhante à seguinte, que indica que a implantação foi bem-sucedida:
NAME READY STATUS RESTARTS AGE hello-server-579859fb5b-h2k8s 1/1 Running 0 1m
Exclua a implantação para seguir para a próxima etapa:
Console do Google Cloud
Para excluir a implantação, faça o seguinte:
Volte para a página Cargas de trabalho do GKE no consoleGoogle Cloud .
Selecione a carga de trabalho
hello-server.Clique em Excluir.
kubectl
Para excluir a implantação, faça o seguinte:
kubectl delete deployment hello-server
Configurar a política de aplicação para proibir todas as imagens
Agora, modifique a política para bloquear em vez de permitir que todas as imagens sejam implantadas.
Console do Google Cloud
Para modificar a política, faça o seguinte:
Volte para a página Autorização binária no console do Google Cloud .
Clique em Editar política.
Selecione Não permitir todas as imagens.
Clique em Save Policy.
gcloud
Para modificar a política, faça o seguinte:
Exporte o arquivo YAML da política:
gcloud container binauthz policy export > /tmp/policy.yaml
Em um editor de texto, altere
evaluationModedeALWAYS_ALLOWparaALWAYS_DENY.O arquivo YAML da política será exibido da seguinte maneira:
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
Importe o arquivo 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:
Crie um arquivo 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" } } EOMEnvie 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"
Testar a política outra vez
Novamente, teste a política implantando uma imagem de contêiner de amostra no cluster. Desta vez, a autorização binária impede que a imagem seja implantada.
Console do Google Cloud
Implante a imagem:
Acesse a página Clusters do GKE no Google Cloud console.
Clique em Implantar.
O console solicita que você insira detalhes sobre a implantação.
Insira
hello-serverno campo Nome da implantação.Clique em Próxima: Detalhes do contêiner.
Selecione Imagem de contêiner atual.
Insira
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0como o caminho da imagem do contêiner.Clique em Implantar.
kubectl
Implante a imagem:
kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
Agora você pode verificar se a política foi bloqueada:
Console do Google Cloud
Para verificar se a imagem não foi implantada, faça o seguinte:
Volte para a página Cargas de trabalho do GKE no consoleGoogle Cloud .
A carga de trabalho para a imagem do contêiner aparece com um ícone vermelho, indicando que a imagem não foi implantada.
kubectl
Para verificar se a imagem não foi implantada, execute o comando abaixo:
kubectl get pods
O comando imprime a seguinte mensagem, que indica que a imagem não foi implantada:
No resources found.
Veja mais detalhes sobre a implantação:
kubectl get event --template \
'{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}{{.message}}{{"\n"}}{{end}}'
Você verá uma resposta semelhante a esta:
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
Nesta saída:
- POD_NAME: o nome do pod.
- IMAGE_NAME: o nome da imagem.
- ATTESTOR_NAME: o nome do atestador.
Limpar
Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, siga as etapas abaixo.
Exclua o cluster que você criou no GKE:
Console
Para excluir o cluster, faça o seguinte:
Acesse a página Clusters do GKE no Google Cloud console.
Selecione o cluster
test-clustere clique em Excluir.
gcloud
Para excluir o cluster, faça o seguinte:
gcloud container clusters delete \
--zone=us-central1-a \
test-cluster
A seguir
- Use o atestador
built-by-cloud-buildpara implantar somente imagens criadas pelo Cloud Build (visualização). - Para ver um tutorial completo sobre como solicitar atestados, consulte:
- Leia nossos recursos sobre o DevOps e conheça o programa de pesquisa DevOps Research and Assessment (DORA).