Implante um certificado global gerenciado pelo Google com o Certificate Authority Service


Neste tutorial, explicamos o processo de implantação de certificados usando um certificado gerenciado pelo Google com o Certificate Authority Service como exemplo.

Os seguintes balanceadores de carga dão suporte a certificados gerenciados pelo Google com serviço de CA:

  • Balanceador de carga de aplicativo externo global
  • Balanceador de carga de aplicativo clássico
  • Balanceador de carga de aplicativo interno entre regiões
  • Balanceador de carga de rede de proxy externo global

Se uma política de emissão de certificados estiver em vigor no pool de ACs de destino, o provisionamento de certificados poderá falhar por um dos seguintes motivos:

  • A política de emissão de certificados bloqueou o certificado solicitado. Nesse caso, você não vai receber cobranças porque o certificado não foi emitido.
  • A política aplicou alterações ao certificado que não são compatíveis com o Gerenciador de certificados. Nesse caso, você ainda será cobrado desde que o certificado foi emitido, mesmo que ele não seja totalmente compatível com o Gerenciador de certificados.

Os certificados emitidos pelas etapas deste tutorial não são confiáveis publicamente. Se você quiser emitir certificados que são publicamente confiáveis, siga as etapas em um dos seguintes tutoriais:

Se você quiser migrar um certificado atual para o Gerenciador de certificados, siga as etapas em Migrar certificados para o Gerenciador de certificados.

Mesmo que você esteja usando um pool de CAs regional para emitir um certificado TLS gerenciado pelo Google, o certificado em si é global e pode ser usado em qualquer região.

Objetivos

Nesta seção, mostramos como concluir as seguintes tarefas:

  • Crie um certificado gerenciado pelo Google com o CA Service usando o Gerenciador de certificados.
  • Implante o certificado em um balanceador de carga compatível usando um proxy HTTPS de destino.

Para mais informações sobre o processo de implantação do certificado, consulte Visão geral da implantação.

Antes de começar

  1. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  2. Verifique se você tem os papéis a seguir para concluir as tarefas do tutorial:

    • Proprietário do gerenciador de certificados:necessário para criar e gerenciar recursos do gerenciador de certificados.
    • Administrador do balanceador de carga do Compute ou Administrador de rede do Compute:necessário para criar e gerenciar o proxy de destino HTTPS.
    • Administrador do Certificate Authority Service:necessário para executar ações no CA Service.

    Para ver mais informações, consulte os seguintes tópicos:

  3. Ative a API CA Service.

  4. Criar um pool de CA. Você precisa criar e ativar pelo menos uma AC nesse pool de ACs.

Configurar a integração do CA Service com o Gerenciador de certificados

Configure o Gerenciador de certificados para integração com o serviço de CA da seguinte maneira:

  1. Use o seguinte comando para criar uma conta de serviço do Gerenciador de certificados no projeto de destino do Google Cloud:

    gcloud beta services identity create --service=certificatemanager.googleapis.com \
       --project=PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do projeto de destino do Google Cloud.

    O comando retorna o nome da identidade do serviço criado. Veja o exemplo a seguir:

    service-520498234@gcp-sa-certificatemanager.iam.gserviceaccount.com
    
  2. Conceda à conta de serviço do Gerenciador de certificados o papel de solicitante no pool de CAs de destino da seguinte maneira:

    gcloud privateca pools add-iam-policy-binding CA_POOL \
       --location REGION \
       --member "serviceAccount:SERVICE_ACCOUNT" \
       --role roles/privateca.certificateRequester
    

    Substitua:

    • CA_POOL: o ID do pool de ACs de destino.
    • REGION: a região de destino do Google Cloud.
    • SERVICE_ACCOUNT: o nome completo da conta de serviço que você criou na etapa 1.
  3. Crie um recurso de configuração de emissão de certificados para o pool de AC:

    gcloud certificate-manager issuance-configs create ISSUANCE_CONFIG_NAME \
       --ca-pool=CA_POOL \
       [--lifetime=CERTIFICATE_LIFETIME] \
       [--rotation-window-percentage=ROTATION_WINDOW_PERCENTAGE] \
       [--key-algorithm=KEY_ALGORITHM]
    

    Substitua:

    • ISSUANCE_CONFIG_NAME: o nome exclusivo do recurso de configuração de emissão de certificados.
    • CA_POOL: o caminho completo do recurso e o nome do pool de AC que você quer atribuir a este recurso de configuração de emissão de certificados.
    • CERTIFICATE_LIFETIME: a vida útil do certificado em dias. Os valores válidos são de 21 a 30 dias no formato de duração padrão. O valor padrão é de 30 dias (30D). Essa configuração é opcional.

    • ROTATION_WINDOW_PERCENTAGE: a porcentagem do ciclo de vida do certificado em que uma renovação é acionada. Essa configuração é opcional.

      O valor padrão é 66%. Você precisa definir a porcentagem da janela de rotação em relação ao ciclo de vida do certificado, para que a renovação ocorra pelo menos sete dias depois da emissão e sete dias antes da expiração.

    • KEY_ALGORITHM: o algoritmo de criptografia usado para gerar a chave privada. Os valores válidos são ecdsa-p256 ou rsa-2048. O valor padrão é rsa-2048. Essa configuração é opcional.

Para mais informações sobre as configurações de emissão de certificados, consulte Gerenciar configurações de emissão de certificados.

Crie um certificado gerenciado pelo Google emitido pela instância de serviço de CA

Crie um certificado gerenciado pelo Google emitido pela instância de serviço de CA da seguinte maneira:

gcloud

Para um balanceador de carga de aplicativo externo global, um balanceador de carga de aplicativo clássico ou um balanceador de carga de rede de proxy externo global:

Execute este comando:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAMES" \
    --issuance-config=ISSUANCE_CONFIG_NAME

Substitua:

  • CERTIFICATE_NAME: um nome exclusivo do certificado.
  • DOMAIN_NAMES: uma lista delimitada por vírgulas dos domínios de destino do certificado. Cada nome de domínio precisa ser totalmente qualificado, como myorg.example.com.
  • ISSUANCE_CONFIG_NAME: o nome do recurso de configuração de emissão de certificado que faz referência ao pool de ACs de destino.

Para um balanceador de carga de aplicativo interno entre regiões:

Execute este comando:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAMES" \
    --issuance-config=ISSUANCE_CONFIG_NAME \
    --scope=all-regions

Substitua:

  • CERTIFICATE_NAME: um nome exclusivo do certificado.
  • DOMAIN_NAMES: uma lista delimitada por vírgulas dos domínios de destino do certificado. Cada nome de domínio precisa ser totalmente qualificado, como myorg.example.com.
  • ISSUANCE_CONFIG_NAME: o nome do recurso de configuração de emissão de certificado que faz referência ao pool de ACs de destino.

API

Crie o certificado fazendo uma solicitação POST para o método certificates.create da seguinte maneira:

Para um balanceador de carga de aplicativo externo global, um balanceador de carga de aplicativo clássico ou um balanceador de carga de rede de proxy externo global:

POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME"
{
 "managed": {
  "domains": ["DOMAIN_NAME"],
  "issuanceConfig": "ISSUANCE_CONFIG_NAME",
 }
}

Substitua:

  • PROJECT_ID: o ID do projeto de destino do Google Cloud.
  • CERTIFICATE_NAME: um nome exclusivo do certificado.
  • DOMAIN_NAME: o domínio de destino do certificado . O nome de domínio precisa ser totalmente qualificado, como myorg.example.com.
  • ISSUANCE_CONFIG_NAME: o nome do recurso de configuração de emissão de certificado que faz referência ao pool de ACs de destino.

Para um balanceador de carga de aplicativo interno entre regiões:

POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME"
{
 "managed": {
  "domains": ["DOMAIN_NAME"],
  "issuanceConfig": "ISSUANCE_CONFIG_NAME",
  "scope": "ALL_REGIONS"
 }
}

Substitua:

  • PROJECT_ID: o ID do projeto de destino do Google Cloud.
  • CERTIFICATE_NAME: um nome exclusivo do certificado.
  • DOMAIN_NAME: o domínio de destino do certificado . O nome de domínio precisa ser totalmente qualificado, como myorg.example.com.
  • ISSUANCE_CONFIG_NAME: o nome do recurso de configuração de emissão de certificado que faz referência ao pool de ACs de destino.

Para ter uma visão geral do processo de implantação do certificado, consulte Visão geral da implantação.

Verificar se o certificado está ativo

Use o comando a seguir para verificar se o próprio certificado está ativo antes de implantá-lo no balanceador de carga. Pode levar vários minutos para o estado do certificado mudar para ACTIVE.

gcloud certificate-manager certificates describe CERTIFICATE_NAME

Substitua CERTIFICATE_NAME pelo nome do certificado de destino gerenciado pelo Google.

O comando retorna uma saída semelhante a esta:

certificatePem: myPEM
createTime: '2021-10-20T12:19:53.370778666Z'
expireTime: '2022-05-07T05:03:49Z'
managed:
  domains:
  - myorg.example.com
  issuanceConfig: projects/myProject/locations/global/certificateIssuanceConfigs/myIssuanceConfig
  state: ACTIVE
name: projects/myProject/locations/global/certificates/myCert
scope: myScope
sanDnsnames:
- myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

Implantar o certificado em um balanceador de carga

Nesta seção, apresentamos as etapas necessárias para implantar o certificado gerenciado pelo Google em um balanceador de carga.

Antes de prosseguir com as tarefas nesta seção, verifique se você concluiu as tarefas listadas nas seções Configurar a integração de serviço de CA com o Gerenciador de certificados e Criar um certificado gerenciado pelo Google emitido pela instância de serviço de CA.

Dependendo do tipo do balanceador de carga, é possível implantar certificados da seguinte maneira:

Implantar o certificado usando um mapa de certificado

Nesta seção, descrevemos as etapas para implantar um certificado usando um mapa de certificado.

Criar um CertificateMap

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

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

Substitua CERTIFICATE_MAP_NAME pelo nome do mapa de certificado de destino.

Criar uma entrada de mapa de certificado

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

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

Substitua:

  • CERTIFICATE_MAP_ENTRY_NAME: um nome exclusivo da entrada do mapa de certificado
  • CERTIFICATE_MAP_NAME: o nome do mapa do certificado ao qual esta entrada de mapa de certificado se anexa.
  • CERTIFICATE_NAME: o nome do certificado que você quer associar a essa entrada de mapa de certificado
  • HOSTNAME: o nome do host que você quer associar a essa entrada de mapa de certificado.

Verificar se a entrada do mapa de certificado está ativa

Use o comando a seguir para verificar se a entrada do mapa de certificados está ativa antes de anexar o mapa de certificado correspondente ao proxy de destino:

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

Substitua:

  • CERTIFICATE_MAP_ENTRY_NAME: o nome da entrada do mapa do certificado de destino
  • CERTIFICATE_MAP_NAME: o nome do mapa do certificado ao qual esta entrada de mapa de certificado se anexa.

O comando retorna uma saída semelhante a esta:

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

Anexar o mapa de certificado ao proxy de destino

Anexe o mapa de certificado configurado ao proxy de destino desejado:

  1. No Console do Google Cloud, acesse a página Proxies de destino.

    Acesse proxies de destino

  2. Anote o nome do proxy de destino.

  3. Anexe o mapa de certificado ao proxy de destino:

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

    Substitua:

    • PROXY_NAME: o nome do proxy de destino
    • CERTIFICATE_MAP_NAME: o nome do mapa de certificado que faz referência à sua entrada do mapa de certificado e ao certificado associado

Se houver certificados TLS (SSL) anexados diretamente ao proxy, o proxy vai dar preferência aos certificados referenciados pelo mapa de certificados em relação aos certificados TLS (SSL) anexados diretamente.

Anexar o certificado diretamente ao proxy de destino

Para anexar o certificado diretamente ao proxy, execute o seguinte comando:

gcloud compute target-https-proxies update PROXY_NAME \
    --url-map=URL_MAP \
    --global \
    --certificate-manager-certificates=CERTIFICATE_NAME

Substitua:

  • PROXY_NAME: um nome exclusivo do proxy.
  • URL_MAP: o nome do mapa de URL. Você criou o mapa de URL quando criou o balanceador de carga.
  • CERTIFICATE_NAME: o nome do certificado.

Solução de problemas

Para conferir as etapas de solução de problemas, consulte Problemas relacionados a certificados emitidos por uma instância de serviço de AC.

Limpar

Para reverter as alterações feitas neste tutorial, siga estas etapas:

  1. Desanexe o mapa de certificado do proxy.

    Antes de remover o mapa de certificados, observe o seguinte:

    • Se houver algum certificado TLS (SSL) anexado diretamente ao proxy, a remoção do mapa de certificados fará com que o proxy retome o uso dos certificados TLS (SSL) anexados diretamente.
    • Se não houver certificados TLS (SSL) anexados diretamente ao proxy, o mapa de certificado não poderá ser removido do proxy. Primeiro, anexe pelo menos um certificado TLS (SSL) diretamente ao proxy antes de remover o mapa de certificado.

    Para desanexar o mapa de certificado, execute o seguinte comando:

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

    Substitua PROXY_NAME pelo nome do proxy de destino.

  2. Exclua a entrada do mapa de certificado:

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

    Substitua:

    • CERTIFICATE_MAP_ENTRY_NAME: o nome da entrada do mapa do certificado de destino.
    • CERTIFICATE_MAP_NAME: o nome do mapa do certificado de destino.
  3. Exclua o mapa de certificado:

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    Substitua CERTIFICATE_MAP_NAME pelo nome do mapa de certificado de destino.

  4. Exclua o certificado gerenciado pelo Google:

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    Substitua CERTIFICATE_NAME pelo nome do certificado de destino.

  5. Exclua o recurso de configuração de emissão de certificados:

    gcloud certificate-manager issuance-configs delete ISSUANCE_CONFIG_NAME
    

    Substitua ISSUANCE_CONFIG_NAME pelo nome do recurso de configuração de emissão do certificado de destino.

  6. Exclua o pool de ACs conforme descrito em Como excluir um pool de ACs.

    Lembre-se de que, para desativar a última AC ativada no pool de AC mencionado na configuração de emissão de certificados ou para excluir o pool de ACs referenciados, primeiro é necessário excluir todas as configurações de emissão de certificados que fazem referência a esse pool de ACs.

A seguir