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
- Install the Google Cloud CLI.
-
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:
- Papéis obrigatórios da verificação de atestado de assinatura simples
- Papéis obrigatórios de verificação de vulnerabilidades
- Papéis obrigatórios de verificação de atualizaçã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:
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
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
- 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:
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.
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
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:
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
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