Início rápido: monitorize a segurança dos pods com a validação contínua
Saiba como começar a usar a validação contínua (CV) da autorização binária com políticas baseadas em verificações. Neste início rápido, vai usar as seguintes verificações de CV para validar continuamente os pods em execução para as seguintes condições:
- Diretório fidedigno: verifica se as imagens associadas ao Pod residem num ou mais diretórios fidedignos que especifica na política.
- Atualidade das imagens: verifica se as imagens do Pod foram carregadas no número de dias que especificar na política.
Antes de começar
- 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.
-
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
-
Create or select 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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization and Google Kubernetes Engine APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable container.googleapis.com
binaryauthorization.googleapis.com -
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
-
Create or select 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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization and Google Kubernetes Engine APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable container.googleapis.com
binaryauthorization.googleapis.com - Instale a ferramenta de linha de comandos
kubectl
. - Se as suas políticas de autorização binária e clusters do GKE estiverem em projetos diferentes, certifique-se de que a autorização binária está ativada em ambos os projetos.
Crie o ficheiro YAML da política de plataforma:
cat << EOF > /tmp/my-policy.yaml gkePolicy: checkSets: - checks: - trustedDirectoryCheck: trustedDirPatterns: - us-central1-docker.pkg.dev/my-project/my-directory displayName: My trusted directory check - imageFreshnessCheck: maxUploadAgeDays: 30 displayName: My image freshness check displayName: My trusted directory and image freshness check set EOF
Esta política verifica as seguintes condições:
As imagens dos pods são armazenadas no repositório do Artifact Registry com o nome
us-central1-docker.pkg.dev/my-project/my-directory
.As imagens dos pods foram carregadas para os repositórios do Artifact Registry ou do Container Registry nos últimos 30 dias.
Crie a política da plataforma:
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=/tmp/my-policy.yaml \ --project=POLICY_PROJECT_ID
Substitua o seguinte:
POLICY_ID
: um documento de identificação à sua escolhaPOLICY_PROJECT_ID
: o ID do projeto da política
Para criar um cluster com a política da plataforma baseada em verificações ativada, execute o seguinte comando:
gcloud beta container clusters create CLUSTER_NAME
\ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_IDSubstitua o seguinte:
CLUSTER_NAME
: o nome do clusterLOCATION
: a localização, por exemplo:us-central1
ouasia-south1
POLICY_PROJECT_ID
: o ID do projeto onde a política está armazenadaPOLICY_ID
: o ID da políticaCLUSTER_PROJECT_ID
: o ID do projeto do cluster
Aguarde a criação do cluster.
Para atualizar um cluster existente com políticas baseadas em verificações ativadas, execute o seguinte comando.
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Substitua o seguinte:
CLUSTER_NAME
: o nome do clusterLOCATION
: a localização, por exemplo:us-central1
ouasia-south1
POLICY_PROJECT_ID
: o ID do projeto onde a política está armazenadaPOLICY_ID
: o ID da políticaCLUSTER_PROJECT_ID
: o ID do projeto do cluster
Aguarde até que o cluster seja atualizado.
Obtenha a credencial para
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME
Implemente uma imagem:
kubectl run hello-app \ --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
A imagem
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
satisfaz a verificação de atualização porque foi carregada para o repositório nos últimos 30 dias. No entanto, a imagem não cumpre a verificação de diretório fidedigno porque não está emus-central1-docker.pkg.dev/my-project/my-directory
. Como resultado, o CV produz entradas de registoTrustedDirectoryCheck
no Cloud Logging.policyName
: uma política da plataforma que o CV estava a usar quando identificou a violaçãocheckResults
: um bloco de resultados que inclui os seguintes campos:explanation
: uma mensagem de errocheckSetName
: o valordisplayName
para o conjunto de verificaçõescheckSetIndex
: o índice da verificação definida na políticacheckName
: o nome da verificaçãocheckIndex
: o índice da verificação no conjunto de verificaçõesverdict
: o veredito que resultou na entrada do registo, neste caso,NOT_CONFORMANT
porque a verificação não foi cumprida.
CLUSTER_NAME
: o nome do clusterLOCATION
: a localização do clusterCLUSTER_PROJECT_ID
: o ID do projeto do clusterCLUSTER_NAME
: o nome do clusterLOCATION
: a localização do clusterCLUSTER_PROJECT_ID
: o ID do projeto do clusterPOLICY_ID
: o ID da políticaPOLICY_PROJECT_ID
: o ID do projeto da política
Crie uma política de plataforma
Para configurar uma política da plataforma GKE de CV, faça o seguinte:
Crie ou atualize um cluster
Para ativar a CV num cluster, pode criar um novo cluster ou atualizar um cluster existente.
Implemente uma imagem
Ver os registos
A entrada de registo aparece nos Registos na nuvem no prazo de 24 horas após a implementação do pod, mas pode aparecer em apenas algumas horas.
Para ver o registo no Registos na nuvem, use o seguinte filtro:
logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"
O registo do hello-app
pod é semelhante ao apresentado abaixo. Alguns campos podem ser diferentes consoante o ID do projeto, o nome do cluster, etc.
{
"insertId": "637c2de7-0000-2b64-b671-24058876bb74",
"jsonPayload": {
"podEvent": {
"endTime": "2022-11-22T01:14:30.430151Z",
"policyName": "projects/1234567890/platforms/gke/policies/my-policy",
"images": [
{
"result": "DENY",
"checkResults": [
{
"explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
"checkSetName": "Default check set",
"checkSetIndex": "0",
"checkName": "My trusted directory check",
"verdict": "NON_CONFORMANT",
"checkType": "TrustedDirectoryCheck",
"checkIndex": "0"
}
],
"image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
}
],
"verdict": "VIOLATES_POLICY",
"podNamespace": "default",
"deployTime": "2022-11-22T01:06:53Z",
"pod": "hello-app"
},
"@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
},
"resource": {
"type": "k8s_cluster",
"labels": {
"project_id": "my-project",
"location": "us-central1-a",
"cluster_name": "my-cluster"
}
},
"timestamp": "2022-11-22T01:44:28.729881832Z",
"severity": "WARNING",
"logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
"receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}
A entrada do registo mostra informações sobre a violação de política, incluindo os seguintes campos:
Algumas verificações podem incluir informações adicionais que podem ajudar a compreender por que motivo a verificação não foi cumprida.
Uma vez que a imagem satisfez a verificação de validade, a verificação de validade não aparece no registo.
Limpar
Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados nesta página, elimine o Google Cloud projeto com os recursos.
Esta secção descreve como limpar a monitorização de CV que configurou anteriormente neste guia.
Pode desativar a monitorização de CV ou a autorização binária e a CV no seu cluster.
Desative a Autorização binária num cluster
Para desativar a aplicação da CV e da autorização binária no seu cluster, execute o seguinte comando:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=DISABLED \
--location=LOCATION \
--project=CLUSTER_PROJECT_ID
Substitua o seguinte:
Desative a monitorização de políticas baseada em verificações num cluster
Para desativar a CV com políticas baseadas em verificações no cluster e reativar a aplicação através da política de aplicação da autorização binária, execute o seguinte comando:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--location=LOCATION \
--project="CLUSTER_PROJECT_ID"
Substitua o seguinte:
Tenha em atenção que --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
é
equivalente à flag mais antiga --enable-binauthz
.
Elimine a política
Para eliminar a política, execute o seguinte comando. Não é necessário eliminar a política da plataforma baseada em verificações para desativar a auditoria de políticas baseadas em verificações.
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
Substitua o seguinte: