Neste guia de início rápido, mostramos como configurar e testar uma política simples naautorização binária.
Neste guia de início rápido, você visualiza e testa a política padrão e, em seguida, configura a política para negar a implantação de todas as imagens de contêiner do Container Registry em um Google Kubernetes Engine (GKE). Essa não é uma política real. Em uma política real, normalmente são necessários atestadores por atestadores no seu ambiente antes de implantar uma imagem de contêiner.
Consulte Primeiros passos com a CLI ou Primeiros passos com o Console para ver um tutorial mais longo que descreve como configurar uma política com atestados obrigatórios.
Antes de começar
-
Faça login na sua conta do Google.
Se você ainda não tiver uma, inscreva-se.
-
No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.
- Instale e inicialize o SDK do Cloud..
- Instale
kubectl
.
Ativar APIs obrigatórias
Ative as APIs do GKE, do Container Analysis e da autorização binária:
gcloud
Defina o projeto padrão do Google Cloud usado pelos comandos
gcloud
:PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
PROJECT_ID é o nome do projeto.
Ative as APIs necessárias:
gcloud services enable \ container.googleapis.com \ containeranalysis.googleapis.com \ binaryauthorization.googleapis.com
console
Ative as APIs necessárias:
Essa operação pode levar alguns minutos para ser concluída.
Criar um cluster com a 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:
gcloud
Execute gcloud container clusters create
com a sinalização --enable-binauthz
ativada.
gcloud container clusters create \ --enable-binauthz \ --zone us-central1-a \ test-cluster
console
Acesse a página Clusters do GKE no Console do Cloud.
O console exibe uma lista de clusters do GKE no projeto do Google Cloud.
Clique em Criar cluster.
Digite
test-cluster
@ no campo Nome.Selecione Zonal nas opções de Tipo de local.
Selecione
us-central1-a
na lista suspensa Zona.Clique em Disponibilidade, rede, segurança e outros recursos.
Na seção Segurança, selecione Ativar autorização binária.
Clique em Criar
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.
gcloud
Para ver a política padrão, exporte o arquivo YAML da política:
gcloud container binauthz policy export
Por padrão, o arquivo tem o seguinte conteúdo:
admissionWhitelistPatterns: - namePattern: gcr.io/google_containers/* - namePattern: gcr.io/google-containers/* - namePattern: k8s.gcr.io/* - namePattern: gke.gcr.io/* - namePattern: gcr.io/stackdriver-agents/* 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:
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 REST API retorna o seguinte:
{ "name": "projects/PROJECT_ID/policy", "admissionWhitelistPatterns": [ { "namePattern": "gcr.io/google_containers/*" }, { "namePattern": "gcr.io/google-containers/*" }, { "namePattern": "k8s.gcr.io/*" }, { "namePattern": "gke.gcr.io/*" }, { "namePattern": "gcr.io/stackdriver-agents/*" } ], "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
console
Para ver a política padrão:
Acesse a página Autorização binária no Console do Google Cloud.
Acessar a página "Autorização binária"
O console exibe detalhes sobre a política.
Clique em Configurar política ou, se houver uma política, em Editar política.
Em Regra padrão do projeto, a opção Permitir todas as imagens é selecionada.
Testar a política
É possível testar a política tentando implantar uma imagem de contêiner de amostra no cluster.
Para este guia de início rápido, use a imagem de contêiner de amostra localizada no caminho gcr.io/google-samples/hello-app
no Container Registry. Esta é uma imagem de contêiner pública criada pelo Google que contém uma mensagem Hello, World! aplicativo de amostra.
kubectl
Para testar a política:
Atualize o arquivo
kubeconfig
local:gcloud container clusters get-credentials \ --zone us-central1-a \ test-cluster
Isso fornece as credenciais e informações do endpoint necessárias para acessar o cluster no GKE.
Implante a imagem:
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
console
Para testar a política:
Acesse a página Clusters do GKE no Console do Cloud.
Clique em Implantar.
O console solicita que você insira detalhes sobre a implantação.
Selecione Imagem de contêiner atual.
Insira
gcr.io/google-samples/hello-app:1.0
como o caminho da imagem do contêiner.Clique em Continuar.
Digite
hello-server
no campo Nome do aplicativo.Clique em Implantar.
Agora, verifique se a implantação foi permitida pela autorização binária.
kubectl
Para verificar se a imagem foi implantada:
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
console
Para verificar se a imagem foi implantada, acesse a página Cargas de trabalho do GKE no Console do Google Cloud.
Uma carga de trabalho para a implantação é exibida com um ícone verde que indica que a imagem foi implantada com sucesso.
Exclua a implantação para seguir para a próxima etapa:
kubectl
Para excluir a implantação:
kubectl delete deployment hello-server
console
Para excluir a implantação:
Volte para a página Cargas de trabalho do GKE no Console do Google Cloud.
Selecione a carga de trabalho
test-server
.Clique em Excluir.
Configurar a política para proibir todas as imagens
Agora, modifique a política para bloquear em vez de permitir que todas as imagens sejam implantadas.
gcloud
Para modificar a política:
Exporte o arquivo YAML da política:
gcloud container binauthz policy export > /tmp/policy.yaml
Em um editor de texto, altere
evaluationMode
deALWAYS_ALLOW
paraALWAYS_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:
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" } } 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"
console
Para modificar a política:
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.
Testar novamente a política
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.
kubectl
Implante a imagem:
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
console
Implante a imagem:
Acesse a página Clusters do GKE no Console do Cloud.
Clique em Implantar.
O console solicita que você insira detalhes sobre a implantação.
Selecione Imagem de contêiner atual.
Insira
gcr.io/google-samples/hello-app:1.0
como o caminho da imagem do contêiner.Clique em Continuar.
Digite
hello-server
no campo Nome do aplicativo.Clique em Implantar.
Agora você pode verificar se a política foi bloqueada:
kubectl
Para verificar se a imagem não foi implantada:
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}}'
que mostra que a implantação não foi permitida pela política:
FailedCreate:Error creating: pods "hello-server-579859fb5b-lvfgd" is forbidden: image policy webhook backend denied one or more images: Denied by default admission rule. Overridden by evaluation mode
console
Para verificar se a imagem não foi implantada:
Volte para a página Cargas de trabalho do GKE no Console do Google Cloud.
Uma carga de trabalho para a imagem do contêiner aparece com um ícone vermelho, indicando que a imagem não foi implantada.
Limpeza
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste guia de início rápido, siga estas etapas:
Exclua o cluster que você criou no GKE:
gcloud
Para excluir o cluster, siga estas etapas:
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster
console
Para excluir o cluster, siga estas etapas:
Acesse a página Clusters do GKE no Console do Cloud.
Selecione o cluster
test-cluster
e clique em Excluir.
A seguir
- Saiba como configurar e aplicar uma política com os atestados necessários. Consulte:
- Leia nossos recursos sobre DevOps e explore nosso programa de pesquisa.