Criar atestadores usando o Console do Google Cloud

Nesta página, explicamos como criar um atestador personalizado na autorização binária usando o console do Google Cloud. Como alternativa, você também pode executar essas etapas usando a Google Cloud CLI ou a API REST. Essa tarefa faz parte da configuração da autorização binária.

Usuários do Cloud Build: é possível usar o atestador built-by-cloud-build para implantar apenas imagens criadas pelo Cloud Build.

Antes de começar

Antes de criar atestadores, faça o seguinte:

  1. Ativar autorização binária.

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

Informações gerais

Um atestador é um recurso do Google Cloud que a autorização binária usa para verificar um atestado. Para saber mais sobre a autorização binária, consulte a Visão 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 uma imagem pela primeira vez, criando um atestado, e depois verifique a imagem quando ela estiver sendo implantada. Os pares de chaves PKIX são gerados pelo Cloud Key Management Service (Cloud KMS) em formato compatível com PKIX.
  • Crie o próprio atestador na autorização binária e associe a chave pública que você criou

Em uma configuração de projeto único, você cria seu atestador no mesmo projeto que configura a política de autorização binária. Em uma configuração de vários projetos, você provavelmente tem um projeto de implantação em que sua política está configurada e um projeto de atestador separado onde seus atestadores estão armazenados.

Configurar chaves criptográficas

A autorização binária permite usar chaves PKIX para assinar uma imagem com segurança e depois verificá-la. Isso garante que apenas as partes verificadas possam autorizar uma imagem de contêiner. Para usar atestados, configure chaves assimétricas, como chaves de infraestrutura de chave pública (PKIX) (X.509), para verificar com segurança a identidade dos atestadores. Quando uma imagem é implantada, a Autorização binária verifica o atestado da imagem, que foi assinado com a chave privada, usando a chave pública no atestador.

Neste guia, o algoritmo de assinatura digital de curva elíptica (ECDSA, na sigla em inglês) recomendado é usado para gerar um par de chaves PKIX. Também é possível usar chaves RSA ou PGP para assinatura. Consulte Finalidades de chave e algoritmos para mais informações sobre algoritmos de assinatura.

Criar um par de chaves PKIX

A autorização binária permite que você use pares de chaves PKIX assimétricas para assinar e verificar uma imagem.

Um par de chaves PKIX consiste em uma chave privada, que o signatário usa para assinar atestados digitalmente e uma chave pública, que você adiciona ao atestador. No momento da implantação, a autorização binária usa essa chave pública para verificar o atestado assinado pela chave privada.

Os pares de chaves assimétricas gerados e armazenados no Cloud KMS são compatíveis com o formato PKIX. Para criar uma chave do Cloud KMS para uso com autorização binária, consulte Como criar chaves assimétricas. Escolha a Assinatura assimétrica como a finalidade da chave ao criá-la.

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 keyring:

    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 em um arquivo, faça o seguinte:

  1. Gerar a chave

    PRIVATE_KEY_FILE="/tmp/ec_private.pem"
    openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
    
  2. Como esse arquivo contém uma chave pública e privada juntas, você precisa extrair a chave pública em um arquivo separado para adicioná-la ao atestador:

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

Crie o atestador

A próxima etapa é criar o próprio atestador e associar uma nota do Artifact Analysis e uma chave pública.

A autorização binária usa o Artifact Analysis para armazenar metadados confiáveis usados no processo de autorização. Para cada atestador criado, você precisa criar uma nota do Artifact Analysis. Cada atestado é armazenado como uma ocorrência dessa nota.

Para criar o atestador:

  1. Acesse a página "Autorização binária" do projeto atestador.

    Acesse Autorização binária

  2. Na guia Atestadores, clique em Criar.

  3. Clique em Criar novo atestador.

  4. Em Nome do atestador, insira 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 arquivo.
    3. Navegue e selecione o arquivo de chave PKIX que você salvou anteriormente. Observação: você 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 de Curva elíptica P256 - resumo SHA.

    PKIX (Cloud KMS)

    1. Clique em Adicionar uma chave PKIX.
    2. Clique em Importar do Cloud KMS.
    3. Digite o código do recurso para a versão da chave na janela exibida. O formato do código do recurso é:

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

      em que:

      • KMS_KEY_PROJECT_ID é o ID do projeto em que as chaves são armazenadas;
      • KMS_KEY_LOCATION é o local da chave (global é o padrão);
      • KMS_KEYRING_NAME é o nome do keyring;
      • KMS_KEY_NAME é o nome da chave;
      • KMS_KEY_VERSION é a versão da chave

      Se você criou um par de chaves do Cloud KMS usando as variáveis de ambiente de amostra nesta página, será possível visualizar o código 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 você quiser usar uma nota criada anteriormente, expanda a seção Configurações avançadas.

    1. Desmarque a opção Gerar automaticamente uma nota do Artifact Analysis.

    2. Digite o nome totalmente qualificado no campo ID de nota do Artifact Analysis. O nome tem o formato projects/PROJECT_ID/notes/NOTE_ID.

  7. Clique em Criar.

Verificar se o atestador foi criado

Para verificar se o atestador foi criado:

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

  2. Abra a guia Atestadores.

Configuração de vários projetos

Se você estiver usando uma configuração de vários projetos, em que você tem um implantador e um atestador separados, há permissões adicionais que precisam ser definidas no recurso do atestador para que o projeto do implantador use atestados criados durante a implantação.

Adicione uma vinculação de papel do IAM para o projeto do implantador

Adicione uma vinculação de papel do IAM para a conta de serviço do projeto do implantador ao atestador. Isso é usado pela autorização binária quando avalia uma política para determinar se a conta tem permissões para acessar o atestador.

Adicione a vinculação de papel do IAM na linha de comando, já que essa etapa não é compatível com o Console do Google Cloud.

Para adicionar a vinculação de papel do IAM:

  1. Configure variáveis de ambiente para armazenar os nomes e números do projeto.

    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 dos projetos:

    DEPLOYER_SERVICE_ACCOUNT="service-${DEPLOYER_PROJECT_NUMBER}@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
    
  3. Adicione a vinculação de papel do 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
    

Adicionar uma vinculação de papel do IAM para o usuário configurar a autorização binária

Você precisa adicionar uma vinculação de papel do IAM ao usuário que adiciona um atestador à política de autorização binária no projeto do implantador, já que o usuário precisa ter permissão para ver o atestador a ser adicionado. Se você quiser, essa permissão pode ser revogada com segurança depois que o atestador for adicionado.

Você também precisa adicionar a vinculação de papel do IAM na linha de comando, já que essa etapa não é compatível com o Console do Google Cloud.

Para adicionar a vinculação de papel do 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 vinculação de papel 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

A seguir