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
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
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:
- Funções necessárias para a verificação da atestação de assinatura simples
- Funções necessárias para a verificação de vulnerabilidades
- Funções necessárias para a verificação da atualidade
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:
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
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
- 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:
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.
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 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:
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 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