Crie atestadores através da consola Google Cloud

Esta página explica como criar um atestador personalizado na autorização binária através da consola Google Cloud . Em alternativa, também pode executar estes passos através da CLI do Google Cloud ou da API REST. Esta tarefa faz parte da configuração da autorização binária.

Utilizadores do Cloud Build: em alternativa, pode usar o built-by-cloud-build atestador para implementar apenas imagens criadas pelo Cloud Build.

Antes de começar

Antes de criar atestadores, faça o seguinte:

  1. Ative a Autorização binária.

  2. Configure a autorização binária para a sua plataforma.

Vista geral

Um atestador é um Google Cloud recurso que a autorização binária usa para validar uma atestação. Para saber mais sobre a autorização binária, consulte a vista geral da autorização binária.

Para criar um atestador, faça o seguinte:

  • Configure um par de chaves que possa ser usado para assinar primeiro uma imagem, criando uma atestação, e, posteriormente, validar a imagem quando estiver a ser implementada. Os pares de chaves PKIX são pares de chaves gerados pelo Cloud Key Management Service (Cloud KMS) num formato compatível com PKIX.
  • Crie o atestador no Binary Authorization e associe a chave pública que criou

Numa configuração de projeto único, cria o seu atestador no mesmo projeto em que configura a política de autorização binária. Numa configuração com vários projetos, é muito provável que tenha um projeto de implementação onde a sua política está configurada e um projeto de atestação separado onde os seus atestadores estão armazenados.

Configure chaves criptográficas

A autorização binária permite-lhe usar chaves PKIX para assinar uma imagem de forma segura e, posteriormente, validá-la. Isto garante que apenas as partes validadas podem autorizar uma imagem de contentor. Para usar a atestação, configura chaves assimétricas, como chaves de infraestrutura de chave pública (X.509) (PKIX), para validar de forma segura a identidade dos atestadores. Quando uma imagem é implementada, a autorização binária verifica a atestação da imagem, que foi assinada com a chave privada, através da chave pública no atestador.

Neste guia, o algoritmo de assinatura digital de curva elíptica (ECDSA) recomendado é usado para gerar um par de chaves PKIX. Também pode usar chaves RSA ou PGP para assinar. Consulte Principais finalidades e algoritmos para mais informações sobre algoritmos de assinatura.

Crie um par de chaves PKIX

A autorização binária permite-lhe usar pares de chaves PKIX assimétricos para assinar e validar uma imagem.

Um par de chaves PKIX consiste numa chave privada, que o signatário usa para assinar digitalmente atestações, e numa chave pública, que adiciona ao atestador. No momento da implementação, a autorização binária usa esta chave pública para validar a atestação assinada pela chave privada.

Os pares de chaves assimétricas gerados e armazenados no Cloud KMS estão em conformidade com o formato PKIX. Para criar uma chave do Cloud KMS para utilização com a autorização binária, consulte o artigo Criar chaves assimétricas. Certifique-se de que escolhe Assinatura assimétrica como a finalidade da chave quando a cria.

PKIX (Cloud KMS)

Para criar o par de chaves no Cloud KMS, faça o seguinte:

  1. Configure as variáveis de ambiente necessárias para criar o par de chaves.

    KMS_KEY_PROJECT_ID=${PROJECT_ID}
    KMS_KEYRING_NAME=my-binauthz-keyring
    KMS_KEY_NAME=my-binauthz-kms-key-name
    KMS_KEY_LOCATION=global
    KMS_KEY_PURPOSE=asymmetric-signing
    KMS_KEY_ALGORITHM=ec-sign-p256-sha256
    KMS_PROTECTION_LEVEL=software
    KMS_KEY_VERSION=1
    
  2. Crie o conjunto de chaves.

    gcloud kms keyrings create ${KMS_KEYRING_NAME} \
      --location ${KMS_KEY_LOCATION}
    
  3. Crie a chave:

    gcloud kms keys create ${KMS_KEY_NAME} \
      --location ${KMS_KEY_LOCATION} \
      --keyring ${KMS_KEYRING_NAME}  \
      --purpose ${KMS_KEY_PURPOSE} \
      --default-algorithm ${KMS_KEY_ALGORITHM} \
      --protection-level ${KMS_PROTECTION_LEVEL}
    

PKIX (chave local)

Para gerar um novo par de chaves PKIX assimétricas locais e armazená-lo num ficheiro, faça o seguinte:

  1. Gere a chave:

    PRIVATE_KEY_FILE="/tmp/ec_private.pem"
    openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
    
  2. Uma vez que este ficheiro contém uma chave pública e uma chave privada em conjunto, tem de extrair a chave pública para um ficheiro separado para a poder adicionar ao atestador:

    PUBLIC_KEY_FILE="/tmp/ec_public.pem"
    openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
    

Crie o atestador

O passo seguinte é criar o próprio atestador e associar uma nota de análise de artefactos e uma chave pública.

A autorização binária usa a análise de artefactos para armazenar metadados fidedignos usados no processo de autorização. Para cada atestador que criar, tem de criar uma nota de análise de artefactos. Cada atestação é armazenada como uma ocorrência desta nota.

Para criar o atestador:

  1. Aceda à página de autorização binária do projeto de atestação.

    Aceda à Autorização binária

  2. No separador Atestadores, clique em Criar.

  3. Clique em Criar novo atestador.

  4. Em Nome do atestador, introduza um nome para o atestador (por exemplo, build-secure ou prod-qa).

  5. Para adicionar a chave pública ao atestador, faça o seguinte:

    PKIX (chave local)

    1. Clique em Adicionar uma chave PKIX.
    2. Clique em Importar do ficheiro.
    3. Navegue até ao ficheiro de chave PKIX que guardou anteriormente e selecione-o. Nota: também pode colar uma chave pública no formato PEM.
    4. Selecione o Algoritmo de assinatura. A chave de exemplo neste guia é gerada com o algoritmo Elliptic Curve P256 - SHA Digest.

    PKIX (Cloud KMS)

    1. Clique em Adicionar uma chave PKIX.
    2. Clique em Importar do Cloud KMS.
    3. Introduza o ID de recurso da versão da chave na janela apresentada. O formato do ID do recurso é:

      projects/KMS_KEY_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION
      

      where:

      • KMS_KEY_PROJECT_ID é o ID do projeto onde as chaves estão armazenadas
      • KMS_KEY_LOCATION é a localização da chave (global é a predefinição)
      • KMS_KEYRING_NAME é o nome do conjunto de chaves
      • KMS_KEY_NAME é o nome da chave
      • KMS_KEY_VERSION é a versão principal

      Se criou um par de chaves do Cloud KMS através das variáveis de ambiente de exemplo nesta página, pode ver o ID do recurso com o seguinte comando:

      echo projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}
      
    4. Clique em Enviar.

  6. Se quiser usar uma nota existente que criou anteriormente, expanda a secção Definições avançadas.

    1. Desmarque a opção Gerar automaticamente uma nota de análise de artefactos.

    2. Introduza o nome totalmente qualificado no campo ID da nota de análise de artefactos. O nome tem o formato projects/PROJECT_ID/notes/NOTE_ID.

  7. Clique em Criar.

Confirme se o atestador foi criado

Para verificar se o atestador foi criado:

  1. Volte à página Binary Authorization na Google Cloud consola.

  2. Abra o separador Atestantes.

Configuração de vários projetos

Se estiver a usar uma configuração com vários projetos, em que tem projetos de implementador e atestador separados, existem autorizações adicionais que têm de ser definidas no recurso de atestador para que o projeto de implementador use atestações criadas por este durante a implementação.

Adicione uma associação de função do IAM para o projeto implementador

Tem de adicionar uma associação de funções do IAM para a conta de serviço do projeto de implementação ao atestador. Esta opção é usada pela autorização binária quando avalia uma política para determinar se a conta tem autorizações para aceder ao atestador.

Tem de adicionar a associação de funções da IAM a partir da linha de comandos, uma vez que este passo não é suportado na Google Cloud consola.

Para adicionar a associação de funções IAM:

  1. Configure variáveis de ambiente para armazenar os nomes e os números dos seus projetos.

    DEPLOYER_PROJECT_ID=PROJECT_ID
    DEPLOYER_PROJECT_NUMBER="$(
        gcloud projects describe "${DEPLOYER_PROJECT_ID}" \
          --format="value(projectNumber)"
    )"
    
  2. Configure variáveis de ambiente para armazenar os nomes das contas de serviço para os projetos:

    DEPLOYER_SERVICE_ACCOUNT="service-${DEPLOYER_PROJECT_NUMBER}@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
    
  3. Adicione a vinculação da função IAM:

    gcloud --project ATTESTOR_PROJECT_ID \
        beta container binauthz attestors add-iam-policy-binding \
        "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
        --member="serviceAccount:${DEPLOYER_SERVICE_ACCOUNT}" \
        --role=roles/binaryauthorization.attestorsVerifier
    

Adicione uma associação de função do IAM para o utilizador que está a configurar a autorização binária

Tem de adicionar uma associação de função do IAM para o utilizador que adiciona um atestador à política de autorização binária no projeto do implementador, uma vez que o utilizador tem de ter a autorização para ver o atestador a adicionar. Se quiser, pode revogar esta autorização em segurança depois de o atestador ter sido adicionado.

Também tem de adicionar a associação de funções do IAM a partir da linha de comandos, uma vez que este passo não é suportado na Google Cloud consola.

Para adicionar a associação de funções IAM:

gcloud --project ATTESTOR_PROJECT_ID \
    beta container binauthz attestors add-iam-policy-binding \
    "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
    --member=ADMIN_EMAIL_ACCOUNT \
    --role=roles/binaryauthorization.attestorsViewer

Para remover a associação de função do IAM após a adição do atestador:

gcloud --project ATTESTOR_PROJECT_ID \
    beta container binauthz attestors remove-iam-policy-binding \
    "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
    --member=ADMIN_EMAIL_ACCOUNT \
    --role=roles/binaryauthorization.attestorsViewer

O que se segue?