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

  1. 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.
  2. Install the Google Cloud CLI.

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

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

    gcloud init
  5. 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 the resourcemanager.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.

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  8. Install the Google Cloud CLI.

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

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

    gcloud init
  11. 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 the resourcemanager.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.

  12. Verify that billing is enabled for your Google Cloud project.

  13. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  14. Instale a ferramenta de linha de comandos kubectl.
  15. 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.
  16. Crie uma política de plataforma

    Para configurar uma política da plataforma GKE de CV, faça o seguinte:

    1. 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.

    2. 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 escolha
      • POLICY_PROJECT_ID: o ID do projeto da política

    Crie ou atualize um cluster

    Para ativar a CV num cluster, pode criar um novo cluster ou atualizar um cluster existente.

    • 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_ID
      

      Substitua o seguinte:

      • CLUSTER_NAME: o nome do cluster
      • LOCATION: a localização, por exemplo: us-central1 ou asia-south1
      • POLICY_PROJECT_ID: o ID do projeto onde a política está armazenada
      • POLICY_ID: o ID da política
      • CLUSTER_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 cluster
      • LOCATION: a localização, por exemplo: us-central1 ou asia-south1
      • POLICY_PROJECT_ID: o ID do projeto onde a política está armazenada
      • POLICY_ID: o ID da política
      • CLUSTER_PROJECT_ID: o ID do projeto do cluster

      Aguarde até que o cluster seja atualizado.

    Implemente uma imagem

    1. Obtenha a credencial para kubectl:

      gcloud container clusters get-credentials CLUSTER_NAME
      
    2. 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á em us-central1-docker.pkg.dev/my-project/my-directory. Como resultado, o CV produz entradas de registo TrustedDirectoryCheck no Cloud Logging.

    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:

    • policyName: uma política da plataforma que o CV estava a usar quando identificou a violação
    • checkResults: um bloco de resultados que inclui os seguintes campos:

      • explanation: uma mensagem de erro
      • checkSetName: o valor displayName para o conjunto de verificações
      • checkSetIndex: o índice da verificação definida na política
      • checkName: o nome da verificação
      • checkIndex: o índice da verificação no conjunto de verificações
      • verdict: o veredito que resultou na entrada do registo, neste caso, NOT_CONFORMANT porque a verificação não foi cumprida.

    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:

    • CLUSTER_NAME: o nome do cluster
    • LOCATION: a localização do cluster
    • CLUSTER_PROJECT_ID: o ID do projeto do cluster

    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:

    • CLUSTER_NAME: o nome do cluster
    • LOCATION: a localização do cluster
    • CLUSTER_PROJECT_ID: o ID do projeto do cluster

    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:

    • POLICY_ID: o ID da política
    • POLICY_PROJECT_ID: o ID do projeto da política

    O que se segue?