Implemente um certificado autogerido global

Este tutorial mostra-lhe como usar o Gestor de certificados para implementar um certificado autogerido global.

Os seguintes balanceadores de carga suportam certificados autogeridos globais:

  • Balanceador de carga de aplicações externo global
  • Balanceador de carga de aplicações clássico
  • Balanceador de carga de rede de proxy externo global
  • Balanceador de carga de rede de proxy clássico

Se quiser implementar balanceadores de carga regionais ou entre regiões, consulte o seguinte:

Objetivos

Este tutorial mostra como concluir as seguintes tarefas:

  • Carregue um certificado autogerido para o Gestor de certificados.
  • Implemente o certificado num balanceador de carga suportado através de um proxy HTTPS de destino.

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. In the Google Cloud console, on the project selector page, select or create 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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  4. Enable the Compute Engine, Certificate Manager 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.

    Enable the APIs

  5. Install the Google Cloud CLI.

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

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

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create 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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  10. Enable the Compute Engine, Certificate Manager 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.

    Enable the APIs

  11. Install the Google Cloud CLI.

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

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

    gcloud init
  14. Funções necessárias

    Certifique-se de que tem as seguintes funções para concluir as tarefas neste tutorial:

    • Proprietário do Gestor de certificados (roles/certificatemanager.owner)

      Necessário para criar e gerir recursos do Gestor de certificados.

    • Administrador do balanceador de carga de computação (roles/compute.loadBalancerAdmin) ou administrador de rede de computação (roles/compute.networkAdmin)

      Obrigatório para criar e gerir o proxy de destino HTTPS.

    Para mais informações, consulte o seguinte:

    Crie o balanceador de carga

    Este tutorial pressupõe que já criou e configurou os back-ends, as verificações de estado, os serviços de back-end e os mapas de URL do balanceador de carga. Se tiver criado um Application Load Balancer externo, tome nota do nome do mapa de URLs, uma vez que vai precisar dele mais tarde neste tutorial.

    Se não tiver criado o balanceador de carga, consulte as páginas seguintes para criar um:

    Crie uma chave privada e um certificado

    Para criar uma chave privada e um certificado, faça o seguinte:

    1. Use uma autoridade de certificação (AC) externa fidedigna para emitir o certificado juntamente com a respetiva chave associada.

    2. Verifique se o certificado está corretamente encadeado e é fidedigno na raiz.

    3. Prepare os seguintes ficheiros codificados PEM:

      • O ficheiro de certificado (CRT)
      • O ficheiro de chave privada correspondente (KEY)

    Para obter informações sobre como pedir e validar um certificado, consulte o artigo Crie uma chave privada e um certificado.

    Carregue um certificado autogerido para o Gestor de certificados

    Para carregar o certificado para o Gestor de certificados, faça o seguinte:

    Consola

    1. Na Google Cloud consola, aceda à página Gestor de certificados.

      Aceda ao Gestor de certificados

    2. No separador Certificados, clique em Adicionar certificado.

    3. No campo Nome do certificado, introduza um nome exclusivo para o certificado.

    4. Opcional: no campo Descrição, introduza uma descrição do certificado. A descrição permite-lhe identificar o certificado.

    5. Para Localização, selecione Global.

    6. Para Âmbito, selecione Predefinição.

    7. Para Tipo de certificado, selecione Criar certificado autogerido.

    8. Para o campo Certificado, faça qualquer uma das seguintes ações:

      • Clique no botão Carregar e selecione o ficheiro de certificado formatado em PEM.
      • Copie e cole o conteúdo de um certificado formatado em PEM. O conteúdo tem de começar com -----BEGIN CERTIFICATE----- e terminar com -----END CERTIFICATE-----.
    9. Para o campo Certificado de chave privada, faça qualquer uma das seguintes ações:

      • Clique no botão Carregar e selecione a sua chave privada. A chave privada tem de estar no formato PEM e não estar protegida com uma frase secreta.
      • Copiar e colar o conteúdo de uma chave privada formatada em PEM. As chaves privadas têm de começar com -----BEGIN PRIVATE KEY----- e terminar com -----END PRIVATE KEY-----.
    10. No campo Etiquetas, especifique as etiquetas a associar ao certificado. Para adicionar uma etiqueta, clique em Adicionar etiqueta e especifique uma chave e um valor para a etiqueta.

    11. Clique em Criar.

      O novo certificado é apresentado na lista de certificados.

    gcloud

    Para criar um certificado autogerido global, use o comando certificate-manager certificates create:

    gcloud certificate-manager certificates create CERTIFICATE_NAME \
        --certificate-file="CERTIFICATE_FILE" \
        --private-key-file="PRIVATE_KEY_FILE"
    

    Substitua o seguinte:

    • CERTIFICATE_NAME: o nome do certificado.
    • CERTIFICATE_FILE: o caminho e o nome do ficheiro do certificado CRT.
    • PRIVATE_KEY_FILE: o caminho e o nome do ficheiro da chave privada KEY.

    Terraform

    Para carregar um certificado autogerido, pode usar um recurso google_certificate_manager_certificate com o bloco self_managed.

    API

    Carregue o certificado fazendo um pedido POST ao método certificates.create da seguinte forma:

    POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME
    {
      self_managed: {
        pem_certificate: "PEM_CERTIFICATE",
        pem_private_key: "PEM_KEY",
      }
    }
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do projeto Google Cloud .
    • CERTIFICATE_NAME: o nome do certificado.
    • PEM_CERTIFICATE: o PEM do certificado.
    • PEM_KEY: o PEM da chave.

    Implemente o certificado autogerido num balanceador de carga

    Para implementar o certificado autogerido global, use um mapa de certificados.

    Crie um mapa de certificados

    Crie um mapa de certificados que faça referência à entrada do mapa de certificados associada ao seu certificado:

    gcloud

    Para criar um mapeamento de certificados, use o comando gcloud certificate-manager maps create:

    gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
    

    Substitua CERTIFICATE_MAP_NAME pelo nome do mapa de certificados de destino.

    Terraform

    Para criar um mapa de certificados, pode usar um recurso google_certificate_manager_certificate_map.

    resource "google_certificate_manager_certificate_map" "certificate_map" {
      name        = "${local.name}-certmap-${random_id.tf_prefix.hex}"
      description = "${local.domain} certificate map"
      labels = {
        "terraform" : true
      }
    }

    Crie uma entrada de mapa de certificado

    Crie uma entrada de mapa de certificados e associe-a ao seu certificado e mapa de certificados:

    gcloud

    Para criar uma entrada de mapeamento de certificados, use o comando gcloud certificate-manager maps entries create:

    gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
        --map="CERTIFICATE_MAP_NAME" \
        --certificates="CERTIFICATE_NAME" \
        --hostname="HOSTNAME"
    

    Substitua o seguinte:

    • CERTIFICATE_MAP_ENTRY_NAME: o nome da entrada do mapa de certificados.
    • CERTIFICATE_MAP_NAME: o nome do mapeamento de certificados ao qual a entrada de mapeamento de certificados está anexada.
    • CERTIFICATE_NAME: o nome do certificado que quer associar à entrada do mapa de certificados.
    • HOSTNAME: o nome do anfitrião que quer associar à entrada do mapa de certificados.

      Se quiser criar um certificado que abranja um domínio com caráter universal e um domínio raiz, especifique o nome do anfitrião com uma raiz e um caráter universal, como example.com e *.example.com. Além disso, tem de especificar duas entradas de mapeamento de certificados: uma para example.com e outra para *.example.com.

    Terraform

    Para criar uma entrada de mapeamento de certificados com um domínio raiz, use um recurso google_certificate_manager_certificate_map_entry.

    resource "google_certificate_manager_certificate_map_entry" "first_entry" {
      name        = "${local.name}-first-entry-${random_id.tf_prefix.hex}"
      description = "example certificate map entry"
      map         = google_certificate_manager_certificate_map.certificate_map.name
      labels = {
        "terraform" : true
      }
      certificates = [google_certificate_manager_certificate.root_cert.id]
      hostname     = local.domain
    }

    Para criar uma entrada de mapeamento de certificados com um domínio de caráter universal, use um recurso google_certificate_manager_certificate_map_entry.

    resource "google_certificate_manager_certificate_map_entry" "second_entry" {
      name        = "${local.name}-second-entity-${random_id.tf_prefix.hex}"
      description = "example certificate map entry"
      map         = google_certificate_manager_certificate_map.certificate_map.name
      labels = {
        "terraform" : true
      }
      certificates = [google_certificate_manager_certificate.root_cert.id]
      hostname     = "*.${local.domain}"
    }

    Verifique se a entrada do mapeamento de certificados está ativa

    Verifique se a entrada do mapeamento de certificados está ativa antes de anexar o respetivo mapeamento de certificados ao proxy de destino.

    Para validar a entrada do mapeamento de certificados, use o comando gcloud certificate-manager maps entries describe:

    gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
        --map="CERTIFICATE_MAP_NAME"
    

    Substitua o seguinte:

    • CERTIFICATE_MAP_ENTRY_NAME: o nome da entrada do mapa de certificados.
    • CERTIFICATE_NAME: o nome do certificado que quer associar à entrada do mapa de certificados.

    O resultado é semelhante ao seguinte:

    certificates:
    createTime: '2021-09-06T10:01:56.229472109Z'
    hostname: example.com
    name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
    state: ACTIVE
    updateTime: '2021-09-06T10:01:58.277031787Z'
    

    Associe o mapa de certificados ao proxy de destino

    Pode anexar o mapa de certificados a um novo proxy de destino ou a um proxy de destino existente.

    gcloud

    Para anexar o mapeamento de certificados a um novo proxy de destino, use o comando gcloud compute target-https-proxies create:

    gcloud compute target-https-proxies create PROXY_NAME \
        --certificate-map="CERTIFICATE_MAP_NAME" \
        --url-map="URL_MAP" \
        --global
    

    Substitua o seguinte:

    • PROXY_NAME: o nome do proxy de destino.
    • CERTIFICATE_MAP_NAME: o nome do mapeamento de certificados que faz referência à entrada do mapeamento de certificados e ao certificado associado.
    • URL_MAP: o nome do mapa de URLs

    Para anexar o mapa de certificados a um proxy HTTPS de destino existente, use o comando gcloud compute target-https-proxies update. Se não souber o nome do proxy de destino existente, aceda à página Proxies de destino e anote o nome do proxy de destino.

    gcloud compute target-https-proxies update PROXY_NAME \
        --certificate-map="CERTIFICATE_MAP_NAME" \
        --global
    

    Depois de criar ou atualizar o proxy de destino, execute o seguinte comando para o validar:

    gcloud compute target-https-proxies list
    

    Terraform

    Para anexar o mapa de certificados ao proxy de destino, pode usar um recurso google_compute_target_https_proxy.

    Quando configura um proxy de destino, se anexar certificados TLS (SSL) diretamente e também através de um mapa de certificados, o proxy usa os certificados referenciados pelo mapa de certificados e ignora os certificados TLS (SSL) anexados diretamente.

    Limpar

    Para evitar incorrer em custos na sua conta do Google Cloud relativos aos recursos usados neste tutorial, elimine-os.

    1. Elimine o balanceador de carga e os respetivos recursos.

      Consulte o artigo Limpe uma configuração de equilíbrio de carga.

    2. Elimine ou desassocie o mapa de certificados do proxy.

      Para eliminar o mapeamento de certificados, execute o seguinte comando:

      gcloud compute target-https-proxies delete PROXY_NAME
      

      Se quiser manter o proxy HTTPS de destino, desassocie o mapa de certificados do proxy.

      • Se existirem certificados TLS (SSL) anexados diretamente ao proxy, a desanexação do mapa de certificados faz com que o proxy retome a utilização desses certificados TLS (SSL) anexados diretamente.
      • Se não existirem certificados TLS (SSL) anexados diretamente ao proxy, não é possível separar o mapa de certificados do proxy. Primeiro, tem de anexar, pelo menos, um certificado TLS (SSL) diretamente ao proxy antes de poder desanexar o mapa de certificados.

      Para desassociar o mapeamento de certificados, execute o seguinte comando:

      gcloud compute target-https-proxies update PROXY_NAME \
          --clear-certificate-map
      

      Substitua PROXY_NAME pelo nome do proxy de destino.

    3. Elimine a entrada do mapa de certificados do mapa de certificados:

      gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \
          --map="CERTIFICATE_MAP_NAME"
      

      Substitua o seguinte:

      • CERTIFICATE_MAP_ENTRY_NAME: o nome da entrada do mapa de certificados.
      • CERTIFICATE_MAP_NAME: o nome do mapeamento de certificados.
    4. Elimine o mapeamento de certificados:

      gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
      

      Substitua CERTIFICATE_MAP_NAME pelo nome do mapa de certificados.

    5. Elimine o certificado carregado:

      gcloud certificate-manager certificates delete CERTIFICATE_NAME
      

      Substitua CERTIFICATE_NAME pelo nome do certificado.

    O que se segue?