Use o serviço de avaliação de políticas

Esta página mostra como usar o comando da CLI Google Cloud do serviço de avaliação de políticas para avaliar rapidamente se uma imagem ou um recurso do Kubernetes está em conformidade com uma política da plataforma baseada numa verificação de validação contínua.

Vista geral

O serviço de avaliação de políticas é uma funcionalidade da autorização binária que pode usar com políticas da plataforma baseadas em verificações de validação contínua (CV). O serviço de avaliação de políticas avalia a pedido se uma imagem de contentor especificada por si está em conformidade com uma política da plataforma CV. O serviço de avaliação de políticas está disponível como um comando da CLI gcloud e o método projects.platforms.gke.policies.evaluate.

O CV verifica se existem violações de políticas, pelo menos, uma vez a cada 24 horas. Como resultado, os eventos de CV podem demorar até 24 horas a aparecer no registo depois de o CV ser ativado ou de um recurso do Kubernetes ser implementado. Além disso, o CV produz entradas de registo quando deteta uma violação de política. O CV não produz entradas de registo quando os recursos do Kubernetes estão em conformidade com a política.

O serviço de avaliação de políticas produz um veredicto que indica se a imagem está em conformidade com a política ou se a imagem viola a política.

Ao usar o serviço de avaliação de políticas, pode determinar rapidamente se a sua imagem está em conformidade com uma política.

Quando usa o serviço, especifica o URL da imagem, diretamente ou num recurso do Kubernetes, e também especifica o nome da política baseada na verificação de CV do GKE.

Deste modo, o serviço de avaliação de políticas pode ajudar a desenvolver políticas e depurar recursos do Kubernetes não conformes antes de usar o CV.

Esta funcionalidade só suporta políticas baseadas na verificação de CV do GKE.

As imagens também têm de especificar um resumo da imagem no formato IMAGE_URL@IMAGE_DIGEST, exceto nos seguintes casos:

  • Verificação de diretório fidedigno: a verificação é aprovada se a imagem estiver localizada num diretório especificado por si.
  • Listas brancas de imagens isentas: todas as outras verificações requerem um resumo da imagem no formato IMAGE_URL@IMAGE_DIGEST.

Antes de começar

  1. Install the Google Cloud CLI.

  2. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

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

    gcloud init

Funções necessárias

Para obter as autorizações de que precisa para usar o serviço de avaliação de políticas, peça ao seu administrador para lhe conceder a função de IAM de avaliador de políticas (roles/binaryauthorization.policyEvaluator) no projeto de políticas. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Se a sua política usar determinadas verificações, pode ter de pedir ao administrador que conceda as seguintes funções necessárias específicas da verificação:

Avalie as políticas da plataforma baseadas em verificações

O serviço de avaliação de políticas pode avaliar um único URL de imagem ou uma imagem especificada num recurso do Kubernetes formatado em JSON ou YAML.

Avalie as políticas da plataforma baseadas em verificações com um recurso do Kubernetes

Para avaliar uma política com um recurso do Kubernetes através da CLI gcloud, execute o seguinte comando:

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • POLICY_ID: o ID da política de plataformas. Se a política estiver noutro projeto, pode usar o nome completo do recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • POD_SPECIFICATION_PATH: o caminho da especificação do agrupamento.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --resource=POD_SPECIFICATION_PATH

Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --resource=POD_SPECIFICATION_PATH

Windows (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --resource=POD_SPECIFICATION_PATH

Para avaliar uma política que especifica a plataforma, que tem de ser definida como gke, execute o seguinte comando:

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • POLICY_ID: o ID da política de plataformas. Se a política estiver noutro projeto, pode usar o nome completo do recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • POD_SPECIFICATION_PATH: o caminho da especificação do agrupamento.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --platform=gke \
    --resource=POD_SPECIFICATION_PATH

Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --platform=gke `
    --resource=POD_SPECIFICATION_PATH

Windows (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --platform=gke ^
    --resource=POD_SPECIFICATION_PATH

Avalie as políticas da plataforma baseadas em verificações com um URL de imagem

Para avaliar uma política através de um URL de imagem, execute o seguinte comando:

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • POLICY_ID: o ID da política de plataformas. Se a política estiver noutro projeto, pode usar o nome completo do recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • IMAGE_URL: o caminho da especificação do agrupamento.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --image=IMAGE_URL

Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --image=IMAGE_URL

Windows (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --image=IMAGE_URL

Quando usa a flag --image, o espaço de nomes e a conta de serviço são implicitamente considerados vazios. Se a política que está a avaliar usar conjuntos de verificações com âmbito definido para kubernetesNamespace ou kubernetesServiceAccount, os resultados devolvidos podem não ser precisos.

Reveja o resultado do comando

O resultado do comando contém um veredito de nível superior que indica o estado de conformidade do Pod. Podem ser devolvidos os seguintes estados de conformidade:

  • CONFORMANT: o recurso do Kubernetes está em conformidade com a política da plataforma.
  • NON_CONFORMANT: O recurso do Kubernetes não está em conformidade com a política da plataforma.
  • ERROR: a avaliação terminou com um erro.

A resposta também contém resultados aninhados com informações detalhadas sobre o estado de conformidade de todas as verificações que foram avaliadas para cada imagem contida no recurso do Kubernetes.

Cada bloco ImageResults contém um campo explanation legível por humanos que descreve o motivo pelo qual a imagem seria permitida ou não permitida.

Para facilitar a criação de scripts, o comando devolve um código de saída diferente de zero quando a especificação do pod não está em conformidade com a política ou a avaliação falha.

Os exemplos de resultados seguintes demonstram dois casos. No primeiro caso, o recurso do Kubernetes está em conformidade com a política. No segundo caso, o recurso não está em conformidade com a política.

Veja um resultado em conformidade

Esta secção descreve o resultado de uma verificação do serviço de avaliação de políticas em que o pod está em conformidade com a política da plataforma.

results:
- imageResults:
  - checkSetResult:
      checkResults:
        results:
        - displayName: My trusted directory check
          evaluationResult:
            verdict: CONFORMANT
          explanation: Image is in a trusted directory
          type: TrustedDirectoryCheck
      displayName: Default check set
      scope: {}
    imageUri: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    verdict: CONFORMANT
  kubernetesNamespace: default
  kubernetesServiceAccount: default
  podName: my-pod
  verdict: CONFORMANT
verdict: CONFORMANT

Na saída, é devolvido um veredicto de CONFORMANT para os seguintes tipos de avaliação:

  • Verificação: a imagem está em conformidade com a verificação individual. Neste caso, a verificação do diretório fidedigno.
  • CheckSet: a imagem está em conformidade com cada uma das verificações no CheckSet.
  • Política: a imagem está em conformidade com a política.

Uma vez que a imagem está em conformidade com a política, o comando devolve um código de saída zero.

Veja um resultado não conforme

Esta secção descreve o resultado de uma verificação do serviço de avaliação de políticas em que o pod não está em conformidade com a política da plataforma.

results:
- imageResults:
  - checkSetResult:
      checkResults:
        results:
        - displayName: My trusted directory check
          evaluationResult:
            verdict: NON_CONFORMANT
          explanation: Image isn't in a trusted directory
          type: TrustedDirectoryCheck
      displayName: Default check set
      scope: {}
    imageUri: us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0
    verdict: NON_CONFORMANT
  kubernetesNamespace: default
  kubernetesServiceAccount: default
  podName: my-pod
  verdict: NON_CONFORMANT
verdict: NON_CONFORMANT

No resultado, uma vez que a imagem não está em conformidade com a verificação individual, neste caso, a verificação do diretório fidedigno e, por conseguinte, o conjunto de todas as verificações, o veredito de nível superior é NON_CONFORMANT e o comando devolve um código de saída diferente de zero.

Teste o serviço de avaliação de políticas

Esta secção descreve como pode testar o serviço de avaliação de políticas. Cria uma política de plataforma baseada em verificações que contém a verificação de diretório fidedigno. No primeiro teste, pode avaliar uma especificação de Pod em conformidade com a política. No segundo teste, avalia uma especificação de Pod que não está em conformidade com a política.

Para criar uma política que contenha uma verificação de diretório fidedigno, execute os seguintes comandos:

  1. Crie um ficheiro de política de plataforma:

    cat << EOF > my-policy.yaml
    gkePolicy:
      checkSets:
      - checks:
        - displayName: "My trusted directory check"
          trustedDirectoryCheck:
            trustedDirPatterns:
            - "us-docker.pkg.dev/google-samples/containers/gke/"
        displayName: "My default check set"
    EOF
    
  2. Crie a política:

    Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

    • POLICY_ID: Um ID de política da plataforma à sua escolha. Se a política estiver noutro projeto, pode usar o nome completo do recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • POLICY_PATH: um caminho para o ficheiro de política.
    • POLICY_PROJECT_ID: o ID do projeto da política.

    Execute o seguinte comando:

    Linux, macOS ou Cloud Shell

    gcloud beta container binauthz policy create POLICY_ID \
        --platform=gke \
        --policy-file=POLICY_PATH \
        --project=POLICY_PROJECT_ID

    Windows (PowerShell)

    gcloud beta container binauthz policy create POLICY_ID `
        --platform=gke `
        --policy-file=POLICY_PATH `
        --project=POLICY_PROJECT_ID

    Windows (cmd.exe)

    gcloud beta container binauthz policy create POLICY_ID ^
        --platform=gke ^
        --policy-file=POLICY_PATH ^
        --project=POLICY_PROJECT_ID

    gcloud beta container binauthz policy create POLICY_ID \
    --platform=gke \
    --policy-file=my-policy.yaml
    

Avalie uma imagem em conformidade

Nesta secção, avalia uma especificação de pod que está em conformidade com a política que criou anteriormente neste guia. A avaliação produz um veredito que indica que a especificação do pod é CONFORMANT, porque a especificação do pod faz referência a uma imagem que reside no diretório especificado em trustedDirPatterns na verificação de diretórios fidedignos.

  1. Crie a especificação do Pod:

    cat << EOF > my-conforming-pod.json
    {
      "apiVersion": "v1",
      "kind": "Pod",
      "metadata": {
        "name": ""
      },
      "spec": {
        "containers": [
          {
            "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
          }
          ]
      }
    }
    EOF
    
  2. Use o serviço de avaliação de políticas executando o seguinte comando:

    Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

    • POLICY_ID: o ID da política de plataformas. Se a política estiver noutro projeto, pode usar o nome completo do recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • my-conforming-pod.json: o caminho da especificação do agrupamento.

    Execute o seguinte comando:

    Linux, macOS ou Cloud Shell

    gcloud beta container binauthz policy evaluate POLICY_ID \
        --image=my-conforming-pod.json

    Windows (PowerShell)

    gcloud beta container binauthz policy evaluate POLICY_ID `
        --image=my-conforming-pod.json

    Windows (cmd.exe)

    gcloud beta container binauthz policy evaluate POLICY_ID ^
        --image=my-conforming-pod.json

Avalie uma imagem não conforme

Nesta secção, avalia uma especificação de Pod que não está em conformidade com a política que criou anteriormente neste guia. A avaliação produz um veredito que indica que a especificação do pod é NON_CONFORMANT, porque a especificação do pod faz referência a uma imagem que reside fora do diretório especificado em trustedDirPatterns na verificação de diretório fidedigno.

Para avaliar uma imagem não conforme, execute os seguintes comandos:

  1. Crie a especificação do Pod:

    cat << EOF > my-non-conforming-pod.json
    {
      "apiVersion": "v1",
      "kind": "Pod",
      "metadata": {
        "name": ""
      },
      "spec": {
        "containers": [
          {
            "image": "us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0"
          }
        ]
      }
    }
    EOF
    
  2. Use o serviço de avaliação de políticas executando o seguinte comando:

    Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

    • POLICY_ID: o ID da política de plataformas. Se a política estiver noutro projeto, pode usar o nome completo do recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • my-non-conforming-pod.json: o caminho da especificação do agrupamento.

    Execute o seguinte comando:

    Linux, macOS ou Cloud Shell

    gcloud beta container binauthz policy evaluate POLICY_ID \
        --image=my-non-conforming-pod.json

    Windows (PowerShell)

    gcloud beta container binauthz policy evaluate POLICY_ID `
        --image=my-non-conforming-pod.json

    Windows (cmd.exe)

    gcloud beta container binauthz policy evaluate POLICY_ID ^
        --image=my-non-conforming-pod.json

O que se segue?