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

Nesta página, mostramos como usar o comando da CLI do 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 em verificação de validação contínua.

Visão geral

O serviço de avaliação de políticas é um recurso da autorização binária que pode ser usado com políticas de plataforma baseadas em verificação de validação contínua (CV, na sigla em inglês). O serviço de avaliação de políticas avalia sob demanda se uma imagem de contêiner especificada está em conformidade com uma política da plataforma de CV. O serviço de avaliação de políticas está disponível como um comando da gcloud CLI e o método projects.platforms.gke.policies.evaluate.

A CV verifica se há violações das políticas pelo menos uma vez a cada 24 horas. Como resultado, pode levar até 24 horas para que os eventos de CV apareçam no Logging após a ativação da CV ou a implantação de um recurso do Kubernetes. Além disso, a CV gera entradas de registro ao detectar uma violação da política. A CV não produz entradas de registro quando os recursos do Kubernetes estão em conformidade com a política.

O serviço de avaliação de políticas gera um veredito 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, é possível determinar rapidamente se a imagem está em conformidade com uma política.

Ao usar o serviço, você especifica o URL da imagem, diretamente ou em um recurso do Kubernetes, e também especifica o nome da política baseada em verificação de CV do GKE.

Dessa forma, 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 a CV.

Esse recurso é compatível apenas com políticas baseadas em verificação de CV do GKE.

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

  • Verificação de diretório confiável: a verificação será aprovada se a imagem estiver localizada em um diretório especificado por você.
  • Listas de permissões de imagens isentas: todas as outras verificações exigem um resumo de imagem no formato IMAGE_URL@IMAGE_DIGEST.

Antes de começar

  1. Install the Google Cloud CLI.
  2. To initialize the gcloud CLI, run the following command:

    gcloud init

Funções exigidas

Para ter as permissões necessárias para usar o serviço de avaliação de políticas, peça ao administrador para conceder a você o papel do IAM Avaliador de políticas (roles/binaryauthorization.policyEvaluator) no projeto da política. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Se a política usar determinadas verificações, talvez seja necessário pedir ao administrador para conceder os seguintes papéis obrigatórios específicos da verificação:

Avaliar políticas da plataforma baseadas em verificações

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

Avalie políticas da plataforma baseadas em verificação com um recurso do Kubernetes

Para avaliar uma política com um recurso do Kubernetes usando a gcloud CLI, execute o seguinte comando:

Antes de usar os dados do comando abaixo, faça estas substituições:

  • POLICY_ID: o ID da política da plataforma. Se a política estiver em outro projeto, use o nome completo do recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • POD_SPECIFICATION_PATH: o caminho da especificação do pod.

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 precisa ser definida como gke, execute o seguinte comando:

Antes de usar os dados do comando abaixo, faça estas substituições:

  • POLICY_ID: o ID da política da plataforma. Se a política estiver em outro projeto, use o nome completo do recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • POD_SPECIFICATION_PATH: o caminho da especificação do pod.

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

Avaliar políticas da plataforma baseadas em verificação com um URL de imagem

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

Antes de usar os dados do comando abaixo, faça estas substituições:

  • POLICY_ID: o ID da política da plataforma. Se a política estiver em outro projeto, use o nome completo do recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • IMAGE_URL: o caminho da especificação do pod.

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

Ao usar a flag --image, o namespace e a conta de serviço são implicitamente considerados vazios. Se a política que você está avaliando usar conjuntos de verificação com escopo kubernetesNamespace ou kubernetesServiceAccount, os resultados retornados talvez não sejam precisos.

Analisar resposta ao comando

A resposta ao comando contém um veredito de nível superior que indica o estado de conformidade do pod. Os seguintes estados de conformidade podem ser retornados:

  • 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 por que a imagem seria permitida ou não.

Para facilitar o scripting, o comando retorna 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 saída a seguir 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.

Ver um resultado em conformidade

Nesta seção, descrevemos a saída 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, um veredito de CONFORMANT é retornado para os tipos de avaliação abaixo:

  • Verificação: a imagem está em conformidade com a verificação individual — nesse caso, a verificação do diretório confiável.
  • CheckSet: a imagem está em conformidade com todas as verificações no CheckSet.
  • Política: a imagem está em conformidade com a política.

Como a imagem está em conformidade com a política, o comando retorna um código de saída igual a zero.

Ver um resultado não conforme

Nesta seção, descrevemos a saída 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

Na saída, como a imagem não está em conformidade com a verificação individual (neste caso, a verificação do diretório confiável e, portanto, o conjunto de todas as verificações), o veredito de nível superior é NON_CONFORMANT e o comando retorna um código de saída diferente de zero.

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

Nesta seção, descrevemos como testar o serviço de avaliação de políticas. Crie uma política da plataforma baseada em verificação que contenha a verificação do diretório confiável. No primeiro teste, avalie uma especificação de pod que esteja em conformidade com a política. No segundo teste, avalie 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 do diretório confiável, execute os seguintes comandos:

  1. Crie um arquivo de política da 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 os dados do comando abaixo, faça estas substituições:

    • POLICY_ID: um ID de política de plataforma de sua escolha Se a política estiver em outro projeto, use o nome completo do recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • POLICY_PATH: um caminho para o arquivo de política.
    • POLICY_PROJECT_ID: o ID do projeto de 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
    

Avaliar uma imagem em conformidade

Nesta seção, você avaliará uma especificação de pod que está em conformidade com a política criada anteriormente neste guia. A avaliação produz um veredito indicando que a especificação do pod é CONFORMANT, porque ela se refere a uma imagem que reside no diretório especificado em trustedDirPatterns na verificação do diretório confiável.

  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 os dados do comando abaixo, faça estas substituições:

    • POLICY_ID: o ID da política da plataforma. Se a política estiver em outro projeto, use o nome completo do recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • my-conforming-pod.json: o caminho da especificação do pod.

    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

Avaliar uma imagem não conforme

Nesta seção, você avaliará uma especificação de pod que não está em conformidade com a política criada anteriormente neste guia. A avaliação produz um veredito que indica que a especificação do pod é NON_CONFORMANT, porque ela se refere a uma imagem que reside fora do diretório especificado em trustedDirPatterns na verificação do diretório confiável.

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 os dados do comando abaixo, faça estas substituições:

    • POLICY_ID: o ID da política da plataforma. Se a política estiver em outro projeto, use 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 pod.

    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

A seguir