Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.
Guia de início rápido: configurar uma política de autorização binária com o GKE

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

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, 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.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.

  4. Ative as APIs Artifact Registry, Binary Authorization.

    Ative as APIs

  5. Instale e inicialize a Google Cloud CLI.
  6. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  7. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.

  8. Ative as APIs Artifact Registry, Binary Authorization.

    Ative as APIs

  9. Instale e inicialize a Google Cloud CLI.
  10. Instale kubectl.

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.

Console do Google Cloud

  1. Acesse a página Clusters do GKE no Console do Google Cloud.

    Acessar o GKE

    O console exibe uma lista de clusters do GKE no projeto do Google Cloud.

  2. Clique em Criar cluster.

  3. Digite test-cluster@ no campo Nome.

    Campo "Nome" no modelo de cluster padrão

  4. Selecione Zonal nas opções de Tipo de local.

  5. Selecione us-central1-a na lista suspensa Zona.

  6. Clique no link Segurança para exibir o painel Segurança.

  7. No painel Segurança, marque a caixa de seleção Ativar autorização binária:

    Ativar opção de autorização binária

  8. 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

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:

  1. Acesse a página Autorização binária no Console do Google Cloud.

    Acesse Autorização binária

    O console exibe detalhes sobre a política.

    Captura de tela da guia "Política" mostrando a regra padrão

  2. Clique em Editar política.

  3. Em Regra padrão do projeto, a opção Permitir todas as imagens é selecionada.

    Captura de tela da opção de escolher um tipo de regra padrão

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:

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

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"
  }
}

Testar a política

É possível testar a política tentando implantar uma imagem de contêiner de amostra no cluster.

Neste 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 um aplicativo de amostra "Hello, World!".

Console do Google Cloud

Para testar a política:

  1. Acesse a página Clusters do GKE no Console do Google Cloud.

    Acessar o GKE

  2. Clique em Deploy.

    O console solicita que você insira detalhes sobre a implantação.

  3. Selecione Imagem de contêiner atual.

    Captura de tela da página "Criar implantação"

  4. Insira gcr.io/google-samples/hello-app:1.0 como o caminho da imagem do contêiner.

  5. Clique em Continuar.

    Captura de tela da página "Configurar implantação"

  6. Digite hello-server no campo Nome do aplicativo.

  7. Clique em Deploy.

kubectl

Para testar a política:

  1. 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.

  2. Implante a imagem:

    kubectl run hello-server --image gcr.io/google-samples/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 do Google Cloud.

Acessar o GKE

Uma carga de trabalho para a implantação é exibida com um ícone verde que indica que a imagem foi implantada com sucesso.

Captura de tela de uma mensagem de implantação bem-sucedida

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:

  1. Volte para a página Cargas de trabalho do GKE no Console do Google Cloud.

    Acessar o GKE

  2. Selecione a carga de trabalho test-server.

  3. Clique em Excluir.

kubectl

Para excluir a implantação, faça o seguinte:

kubectl delete deployment hello-server

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.

Console do Google Cloud

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

  1. Retorne à página Autorização binária no Console do Google Cloud.

    Acesse Autorização binária

  2. Clique em Editar política.

  3. Selecione Não permitir todas as imagens.

    Captura de tela da opção de escolher um tipo de regra padrão

  4. Clique em Save Policy.

gcloud

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

  1. Exporte o arquivo YAML da política:

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. Em um editor de texto, altere evaluationMode de ALWAYS_ALLOW para ALWAYS_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
    
  3. 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:

  1. 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
    
  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"
    

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:

  1. Acesse a página Clusters do GKE no Console do Google Cloud.

    Acessar o GKE

  2. Clique em Deploy.

    O console solicita que você insira detalhes sobre a implantação.

  3. Selecione Imagem de contêiner atual.

    Captura de tela da página &quot;Criar implantação&quot;

  4. Insira gcr.io/google-samples/hello-app:1.0 como o caminho da imagem do contêiner.

  5. Clique em Continuar.

    Captura de tela da página &quot;Configurar implantação&quot;

  6. Digite hello-server no campo Nome do aplicativo.

  7. Clique em Deploy.

kubectl

Implante a imagem:

kubectl run hello-server --image gcr.io/google-samples/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 Console do Google Cloud.

Acessar o GKE

Uma carga de trabalho para a imagem do contêiner aparece com um ícone vermelho, indicando que a imagem não foi implantada.

Captura de tela de uma mensagem de implantação com falha

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 sua conta do Google Cloud pelos recursos usados nesta página, siga estas etapas.

Exclua o cluster que você criou no GKE:

Console

Para excluir o cluster, faça o seguinte:

  1. Acesse a página Clusters do GKE no Console do Google Cloud.

    Acessar o GKE

  2. Selecione o cluster test-cluster e clique em Excluir.

gcloud

Para excluir o cluster, faça o seguinte:

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

A seguir