Como ativar o modo de teste

Visão geral

Esta página explica como ativar o modo de simulação. Com o modo de simulação ativado, a autorização binária verifica a conformidade da política na criação do pod sem realmente bloquear a criação dele. Em vez disso, as mensagens de status de conformidade com a política são registradas no Cloud Logging. Com essas informações, é possível determinar se alguma imagem de contêiner teria sido bloqueada acidentalmente para ser implantada e corrigir a política. Quando a política impõe a conformidade conforme o esperado, você pode desativar o modo de simulação.

Antes de começar

Este guia pressupõe que você tenha a autorização binária configurada. Para uma configuração simples, consulte o guia de início rápido.

Para ver um tutorial completo e baseado em attestation, consulte Primeiros passos com a CLI ou Primeiros passos no Console.

Ativar simulação

Para ativar a simulação, faça o seguinte:

gcloud

  1. Exporte a política de autorização binária padrão:

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. Em um editor de texto, defina a aplicação para DRYRUN_AUDIT_LOG_ONLY.

    O arquivo YAML da política deve ter esta aparência:

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google_containers/*
    - namePattern: gcr.io/google-containers/*
    - namePattern: k8s.gcr.io/*
    - namePattern: gke.gcr.io/*
    - namePattern: gcr.io/stackdriver-agents/*
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: DRYRUN_AUDIT_LOG_ONLY
    name: projects/PROJECT_ID/policy
    
  3. Importe o arquivo YAML da política de volta para a autorização binária:

    gcloud container binauthz policy import /tmp/policy.yaml
    
  4. Atualize o arquivo kubeconfig local:

    gcloud container clusters get-credentials \
    --zone us-central1-a \
    CLUSTER_NAME
    

    Em que CLUSTER_NAME é o nome do cluster do GKE.

Console

  1. Acesse a página "Autorização binária" no Console do Google Cloud.

    Acessar a página "Autorização binária"

  2. Clique em Configurar política ou, se houver uma política, em Editar política.

  3. Na política, altere o "avaliaçãoMode" de ALWAYS_ALLOW para ALWAYS_DENY e defina a aplicação para DRYRUN_AUDIT_LOG_ONLY.

    O arquivo YAML da política pode aparecer da seguinte maneira:

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google_containers/*
    - namePattern: gcr.io/google-containers/*
    - namePattern: k8s.gcr.io/*
    - namePattern: gke.gcr.io/*
    - namePattern: gcr.io/stackdriver-agents/*
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: DRYRUN_AUDIT_LOG_ONLY
    name: projects/PROJECT_ID/policy
    
  4. Clique em Salvar política.

Implantar um contêiner

  1. Implantar a imagem do contêiner

    1. [Opcional]: crie um arquivo pod.yaml parecido com o seguinte:

      apiVersion: v1
      kind: Pod
      metadata:
        name: test-pod
      spec:
        containers:
        - name: test-container
          image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
      
    2. Implante a imagem do contêiner:

      kubectl apply -f pod.yaml
      
  2. Confirmar se o pod está em execução

    O pod deve estar em execução. Para confirmar, execute:

    kubectl get pods
    

    Você verá que test-pod está em execução.

  3. Verifique o registro de auditoria:

    Para ver as entradas de registro de auditoria de simulação no Cloud Logging, consulte Eventos de simulação no Cloud Logging.

    Um exemplo de registro de auditoria de simulação é o seguinte:

    {
     insertId: "f87d1ef8-fa7b-4079-be90-d0638e7983ba"
     labels: {
      authorization.k8s.io/decision: "allow"
      authorization.k8s.io/reason: ""
      imagepolicywebhook.image-policy.k8s.io/dry-run: "true"
      imagepolicywebhook.image-policy.k8s.io/overridden-verification-result: "'gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4': Denied by an ALWAYS_DENY admission rule
    "
     }
     logName: "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
     operation: {…}
     protoPayload: {…}
     receiveTimestamp: "2020-06-10T15:59:23.857650559Z"
     resource: {…}
     timestamp: "2020-06-10T15:59:00.185878Z"
    }
    

    em que project-id é o ID do projeto.

Limpeza

Excluir o pod

kubectl delete -f /tmp/pod.yaml

Desativar modo de simulação

Desative o modo de simulação alterando enforcementMode no defaultAdmissionRule na política de autorização binária. Exemplo:

   enforcementMode: ALWAYS_ALLOW