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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. 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 (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  7. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  8. 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 (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  13. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  14. Instale kubectl.
  15. 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.

    1. No console Google Cloud , acesse a página Clusters do Kubernetes do GKE:

      Acessar o GKE

    2. Clique em Criar.

    3. Em Criar um cluster do Autopilot, faça isto:

      1. No campo Nome, use test-cluster.

      2. No menu Região, selecione us-central1.

      3. Expanda a seção Configurações avançadas.

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

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

      6. Selecione Aplicar somente.

      7. Clique em Próxima e depois em Próxima: analisar e criar.

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

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

      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 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 de 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:

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

      Acessar o GKE

    2. Clique em Implantar.

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

    3. Selecione Imagem de contêiner atual.

    4. Insira us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 como o caminho da imagem do contêiner.

    5. Clique em Continuar.

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

    7. Clique em Implantar.

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

    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.

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

      Acessar o GKE

    2. Selecione a carga de trabalho hello-server.

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

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

      Acesse Autorização binária

    2. Clique em Editar política.

    3. Selecione Não permitir todas as imagens.

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

      Acessar o GKE

    2. Clique em Implantar.

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

    3. Selecione Imagem de contêiner atual.

    4. Insira us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 como o caminho da imagem do contêiner.

    5. Clique em Continuar.

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

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

    Acessar o GKE

    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:

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

      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