Guia de início rápido: imagens isentas

Neste documento, você verá como isentar imagens em Políticas de autorização binária.

Neste documento, você irá atualizar a política para isentar imagens de contêiner no Container Registry e no Artifact Registry. No momento da implantação, o aplicador da autorização binária permite que imagens isentas sejam implantadas em um cluster do Google Kubernetes Engine (GKE). O aplicador permite que imagens isentas antes de aplicar outras regras de política.

Para saber como configurar uma política para exigir atestados em uma imagem, consulte os seguintes tutoriais completos:

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. Ative as APIs Artifact Registry, Binary Authorization.

    Ative as APIs

  5. Instale e inicialize o SDK do Cloud..
  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 confirmar se o faturamento está ativado para o projeto.

  8. Ative as APIs Artifact Registry, Binary Authorization.

    Ative as APIs

  9. Instale e inicialize o SDK do Cloud..
  10. Se você não estiver usando o Cloud Shell, instale o kubectl.

Criar um cluster com a autorização binária ativada

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 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 --enable-binauthz ativada.

gcloud container clusters create \
    --enable-binauthz \
    --zone us-central1-a \
    test-cluster

Ver a 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 Cloud

Para ver a política padrão, faça o seguinte:

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

    Acesse Autorização binária

    O console exibe detalhes sobre a política.

  2. Clique em Editar política.

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

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

Permitir apenas imagens isentas

Modifique a política para impedir a implantação de todas as imagens, exceto aquelas listadas como Imagens isentas.

Console do Cloud

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

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

    Acesse Autorização binária

  2. Clique em Editar política.

  3. Selecione Não permitir todas as imagens.

  4. Em Imagens isentas de regras de implantação, expanda Caminhos de imagem.

  5. Clique em Adicionar caminhos de imagem.

    Container Registry

    Em Novo caminho da imagem, cole o seguinte caminho de um repositório do Container Registry:

    gcr.io/google-samples/hello-app:1.0
    

    Artifact Registry

    Em Novo caminho de imagem, cole o seguinte caminho de um repositório do Artifact Registry:

    us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    
  6. Clique em Concluído para salvar o caminho da imagem.

  7. Clique em Save Policy.

gcloud

Para modificar a política e permitir exemplos de imagens do Container Registry e do Artifact Registry, 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 e adicione imagens isentas a admissionWhitelistPatterns.

    Para isentar as seguintes imagens de exemplo pelo Container Registry e pelo Artifact Registry, modifique o arquivo YAML da política da seguinte maneira:

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google-samples/hello-app:1.0
    - namePattern: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    globalPolicyEvaluationMode: ENABLE
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    name: projects/<var>PROJECT_ID</var>/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",
      "admissionWhitelistPatterns": [
        {
          "namePattern": "gcr.io/google-samples/hello-app:1.0"
        },
        {
          "namePattern": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
        }
      ],
      "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

Para testar a política implantando a imagem adicionada à lista de permissões Exempt image, faça o seguinte:

  1. Implante uma imagem isenta no cluster.

    Console do Cloud

    Implante uma imagem isenta:

    1. Acesse a página Clusters do GKE no Console do 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.

    4. Insira o caminho da imagem do contêiner.

      Container Registry

      Para implantar uma imagem pelo Container Registry, insira:

      gcr.io/google-samples/hello-app:1.0
      

      Artifact Registry

      Para implantar uma imagem pelo Artifact Registry, insira:

      us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      
    5. Clique em Continuar.

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

    7. Clique em Deploy.

    kubectl

    Container Registry

    Implante a imagem pelo Container Registry:

    kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
    

    Artifact Registry

    Implante a imagem pelo Artifact Registry:

    kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
    
  2. Verifique se a imagem tinha permissão para implantar:

    Console do Cloud

    Para verificar se a imagem foi implantada, faça o seguinte:

    1. Acesse a página do GKE

    Acessar o GKE

    1. Acesse a página Cargas de trabalho.

    A carga de trabalho hello-server aparecerá com um ícone verde, indicando que está em execução.

    kubectl

    Para verificar se a imagem tinha permissão para implantar, digite o seguinte comando:

    kubectl get pods
    

    Você verá a imagem em execução.

  3. Exclua o pod.

    Console do Cloud

    Na página Cargas de trabalho do GKE:

    1. Selecione a carga de trabalho hello-server.

    2. Clique em Excluir.

    3. Quando solicitado a excluir recursos, clique em Excluir.

    kubectl

    kubectl delete pod hello-server
    

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

    Acessar o GKE

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

gcloud

Para excluir o cluster, insira o comando:

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

A seguir