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:

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 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 Google Cloud projeto.
  • 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 mapeamento de certificados

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 do 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 mapa 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 mapeamento de certificados correspondente ao proxy de destino.

Para validar a entrada do mapa 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 verificar:

gcloud compute target-https-proxies list

Terraform

Para anexar o mapeamento 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 cobranças na sua conta do Google Cloud pelos 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.