Como configurar uma política usando a API REST

Nesta página, fornecemos instruções para configurar uma política de autorização binária na linha de comando usando a API REST. Como alternativa, você também pode executar essas tarefas usando comandos gcloud na linha de comando ou usando o Console do Google Cloud. Esta etapa faz parte da configuração da autorização binária.

Visão geral

Uma política é um conjunto de regras que regem a implantação de uma ou mais imagens de contêiner.

Ao configurar uma política usando a API REST, você preenche valores em um formato JSON que tem uma estrutura idêntica à estrutura YAML usada nas interações gcloud com o serviço. Para mais informações, consulte Referência da política YAML.

Para configurar uma política, você precisa:

  • Exportar um arquivo JSON de política
  • Adicionar outras imagens isentas (opcional)
  • Definir a regra padrão
  • Adicionar regras específicas do cluster (opcional)
  • Importar o arquivo JSON da política

A maioria das políticas reais verifica se todos os atestadores necessários verificaram se uma imagem de contêiner está pronta para ser implantada. Nesse caso, você também precisa criar atestadores ao configurar a política.

Defina o projeto padrão.

Defina o projeto padrão do Google Cloud, caso ainda não tenha feito isso:

PROJECT_ID=PROJECT_ID
gcloud config set project ${PROJECT_ID}

onde PROJECT_ID é o código de seu projeto.

Exportar a política

Exporte a política para um arquivo JSON em seu sistema local:

curl \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "x-goog-user-project: ${PROJECT_ID}" \
    "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy" \
    -o "/tmp/policy.json"

Por padrão, o arquivo tem o seguinte conteúdo:

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "gcr.io/google_containers/*"
    },
    {
      "namePattern": "gcr.io/google-containers/*"
    },
    {
      "namePattern": "k8s.gcr.io/*"
    },
    {
      "namePattern": "gcr.io/stackdriver-agents/*"
    }
  ],
  "globalPolicyEvaluationMode": "ENABLE",
  "defaultAdmissionRule": {
    "evaluationMode": "ALWAYS_ALLOW",
    "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
  }
}

Gerenciar imagens isentas

Uma imagem isenta é uma imagem de contêiner isenta de regras de política. A autorização binária sempre permite a implantação de imagens isentas.

Cada política pode ter uma lista de permissões de imagens isentas especificadas pelo caminho do registro. Esse caminho pode ser um local no Container Registry ou em outro registro de imagem de contêiner. Se ativada, essa lista de permissões será adicionada às imagens isentas do modo de avaliação de política global.

Para adicionar uma imagem isenta, adicione um nó namePattern em uma lista admissionWhitelistPatterns no arquivo JSON da política:

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "MATCHING_PATTERN"
    }
  ],
  ...
}

em que MATCHING_PATTERN é o caminho para uma única imagem em seu registro por correspondência exata ou para qualquer imagem que corresponda a um padrão usando o símbolo curinga (*).

Modo de avaliação da política global

O modo de avaliação de política global é uma configuração de política que faz com que a autorização binária avalie uma política global antes de avaliar a política configurada como usuário. A política global é fornecida pelo Google e isenta uma lista de imagens de sistema mantidas pelo Google de avaliação adicional de política. Quando essa configuração está ativada, as imagens exigidas pelo Google Kubernetes Engine (GKE) não são bloqueadas pela aplicação da política. Além da política do usuário, a política global também é avaliada.

É possível visualizar o conteúdo da política global na linha de comando usando o seguinte comando:

gcloud container binauthz policy export --project=binauthz-global-policy

O modo de avaliação global de políticas torna desnecessário a especificação explícita de caminhos para imagens do sistema mantidas pelo Google na lista de permissões. Essa opção fica desativada por padrão.

Para ativar o modo de avaliação de política global, adicione o seguinte nó de nível superior ao arquivo JSON da política:

"globalPolicyEvaluationMode": "ENABLE"

Para desativar o modo de avaliação de política global, adicione o seguinte:

"globalPolicyEvaluationMode": "DISABLE"

Definir a regra padrão

Uma regra é a parte de uma política que define as restrições que as imagens de contêiner precisam passar antes de serem implantadas. Cada solicitação de admissão tem um cluster do GKE associado. Se uma solicitação não corresponder a uma regra específica do cluster, a regra padrão será usada.

A regra padrão é definida no nó defaultAdmissionRule na política. Para mais informações sobre as partes desta regra, consulte ADMISSION_RULE na Referência da política de YAML. Para exemplos de regras padrão, consulte Políticas de exemplo.

Para definir a regra padrão, edite o nó defaultAdmissionRule no arquivo JSON da política, conforme necessário:

  "defaultAdmissionRule": {
    "evaluationMode": "EVAL_MODE",
    "enforcementMode": "ENFORCEMENT_MODE"
    requireAttestationsBy: [
      ATTESTOR,
      ...
    ]
  }

em que:

  • EVAL_MODE especifica o tipo de restrição que a autorização binária avalia antes de permitir que uma imagem de contêiner seja implantada.
  • ENFORCEMENT_MODE especifica a ação realizada se uma imagem de contêiner não estiver em conformidade com as restrições definidas na regra.
  • ATTESTOR especifica os atestadores (se necessário) que precisam assinar uma imagem de contêiner antes de implantá-la. Use o caminho totalmente qualificado para o atestador no formato projects/PROJECT_ID/attestors/ATTESTOR_NAME.

Se a regra verificar se todos os atestadores necessários assinaram uma imagem de contêiner, você precisará criar atestadores antes de concluir esta etapa.

Definir regras específicas do cluster (opcional)

Um cluster também pode ter uma ou mais regras específicas de cluster. Esse tipo de regra se aplica apenas ao cluster do GKE especificado. Se um cluster não tiver uma regra própria, a regra padrão será usada. As regras específicas do cluster são uma parte opcional de uma política.

As regras específicas do cluster são definidas nos nós clusterAdmissionRules no arquivo JSON da política. Para mais informações sobre as partes desta regra, consulte ADMISSION_RULE na Referência da política de YAML. Por exemplo, consulte Usar uma regra específica do cluster em Políticas de exemplo.

Para adicionar uma regra específica do cluster:

No arquivo JSON da política, adicione um nó clusterAdmissionRules:

"clusterAdmissionRules": {
    "us-central1-a.test-cluster": {
      "evaluationMode": "REQUIRE_ATTESTATION",
      "requireAttestationsBy": [
        "ATTESTOR",
        ...
      ],
      "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
    }
  },

em que: CLUSTER_SPECIFIER é o ID de recurso do cluster ao qual a regra se aplica no formato; location.name e as outras propriedades estão conforme descrito Definir a regra padrão acima. Consulte Políticas de exemplo para ver um exemplo de uma regra específica do cluster.

Se a regra verificar se todos os atestadores necessários assinaram uma imagem de contêiner, você precisará criar atestadores antes de concluir esta etapa.

Importar o arquivo JSON da política

A etapa final é importar o arquivo JSON da política de volta para a autorização binária.

Para importar o arquivo, digite o seguinte:

curl -X PUT \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "x-goog-user-project: ${PROJECT_ID}" \
    --data-binary @/tmp/policy.json  \
    "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"

A seguir