Guia de início rápido

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

  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 confirmar se o faturamento está ativado para o projeto.

  4. Instale e inicialize o SDK do Cloud..
  5. Instale kubectl.

Ativar APIs obrigatórias

Ative as APIs do GKE, do Container Analysis e da autorização binária:

gcloud

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

  2. Ative as APIs necessárias:

    gcloud services enable \
        container.googleapis.com \
        containeranalysis.googleapis.com \
        binaryauthorization.googleapis.com
    

console

Ative as APIs necessárias:

Ative as APIs

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

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

    Acessar a página do 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

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

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

  6. Clique em Disponibilidade, rede, segurança e outros recursos.

  7. Na seção Segurança, selecione Ativar autorização binária.

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

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

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

    Captura de tela da guia

  2. Clique em Configurar política ou, se houver uma política, 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

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:

  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
    

console

Para testar a política:

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

    Acessar a página do GKE

  2. Clique em Implantar.

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

  3. Selecione Imagem de contêiner atual.

    Captura de tela da página

  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

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

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

Acessar a página do 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

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:

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

    Acessar a página do GKE

  2. Selecione a carga de trabalho test-server.

  3. 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:

  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:

  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"
    

console

Para modificar a política:

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

    Acessar a página "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.

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:

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

    Acessar a página do GKE

  2. Clique em Implantar.

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

  3. Selecione Imagem de contêiner atual.

    Captura de tela da página

  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

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

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

Acessar a página do 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

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:

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

    Acessar a página do GKE

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

A seguir