Usar uma autoridade certificadora (AC) gerenciada pelo cliente

Nesta página, descrevemos como usar a opção de autoridade de certificação (CA) gerenciada pelo cliente como o modo de CA do servidor para sua instância do Cloud SQL.

Visão geral

Com a opção de CA gerenciada pelo cliente, você configura seu próprio pool e CA no Certificate Authority Service (CA Service). Ao selecionar a opção de CA gerenciada pelo cliente, você configura a hierarquia de CA e gerencia a rotação dos certificados de CA para suas instâncias do Cloud SQL.

Antes de criar uma instância do Cloud SQL com a opção de CA gerenciada pelo cliente, crie um pool de CAs na mesma região da instância e pelo menos uma CA nesse pool usando o serviço de CA. A CA pode ser uma CA raiz ou uma CA subordinada. Você também pode criar uma CA subordinada no CA Service e encadeá-la a uma CA raiz externa. Ao criar a instância, você especifica o pool de CA. Sua solicitação é delegada a uma conta de serviço específica do projeto, que tem permissão para usar o pool de CA. A conta de serviço solicita uma CA do pool, e o Cloud SQL usa essa CA para assinar o certificado do servidor da instância.

Para o modo de CA do servidor da sua instância no Cloud SQL, é possível escolher entre as três opções a seguir:

  • CA interna por instância
  • AC compartilhada gerenciada pelo Google
  • CA gerenciada pelo cliente

Você pode escolher a opção de CA gerenciada pelo cliente se precisar gerenciar sua própria CA por motivos de compliance. Para mais informações sobre como usar as outras opções, consulte Autorizar com certificados SSL/TLS.

Fluxo de trabalho

Para usar a opção de CA gerenciada pelo cliente, o fluxo de trabalho é o seguinte:

  1. Crie uma conta de serviço para seu projeto do Cloud SQL.
  2. Crie um pool de CA no serviço de CA.
  3. Crie uma CA no serviço de CA.
  4. Crie uma instância do Cloud SQL que use a CA. Ao criar a instância, você delega à conta de serviço a permissão para assinar o certificado do servidor com o pool de AC que criou.

Antes de começar

Antes de usar a opção de CA gerenciada pelo cliente, verifique se você atende aos seguintes requisitos.

Funções exigidas

Para receber as permissões necessárias para criar uma conta de serviço específica do Cloud SQL, peça ao administrador para conceder a você o papel do IAM Criador de contas de serviço (roles/iam.serviceAccountCreator) em cada projeto individual. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Para receber as permissões necessárias para criar um pool e uma CA, peça ao administrador para conceder a você o papel do IAM Gerente de operações do serviço de CA(roles/privateca.caManager) no serviço de CA. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Criar uma conta de serviço específica do projeto

No projeto em que você planeja criar as instâncias do Cloud SQL, crie uma conta de serviço dedicada que vai processar a solicitação de criação e assinatura dos certificados do servidor para as instâncias do Cloud SQL.

gcloud

Execute o seguinte comando para criar uma conta de serviço para seu projeto do Cloud SQL:

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

Substitua PROJECT_ID pelo ID do projeto em que você planeja criar as instâncias do Cloud SQL.

O comando cria uma conta de serviço chamada service-PROJECT_ID@gcp-sa-cloud-sql.iam.gserviceaccount.com no projeto. Anote o nome da conta de serviço Solicitante de certificado do CA Service.

Criar um pool de CA

Crie um pool de CA no serviço de CA.

É possível criar um pool de CA no mesmo projeto em que você planeja criar as instâncias do Cloud SQL ou em um projeto diferente. No entanto, se você criar o pool de CAs em um projeto diferente, o VPC Service Controls poderá impedir a criação de instâncias do Cloud SQL, dependendo da política da organização. Para corrigir o problema, verifique se o projeto que hospeda o pool e a autoridade de certificação (CA) e o projeto que hospeda o Cloud SQL pertencem ao mesmo perímetro de serviço. Para mais informações, consulte Perímetros de serviço e Gerenciar perímetros de serviço.

Para criar um pool de CAs, siga as instruções em Criar um pool de CAs. É possível aceitar os valores padrão para o pool de CA com as seguintes configurações obrigatórias:

  • Crie o pool de CA na mesma região em que você planeja criar a instância do Cloud SQL. Para uma lista de regiões compatíveis com o Cloud SQL, consulte Regiões.
  • Permitir solicitações de certificado com base em configuração.
  • Permitir nomes DNS em nomes alternativos do assunto (SANs). Ao configurar as restrições de identidade do pool de CA, não defina restrições no formato dos nomes DNS que possam entrar em conflito com o que o Cloud SQL pode adicionar ao SAN.
  • Se você configurar as restrições de identidade para o pool de ACs, permita endereços IP como um formato no SAN.

Conceder à conta de serviço acesso ao pool de CA

Para garantir que a conta de serviço tenha as permissões necessárias para solicitar e assinar certificados para suas instâncias do Cloud SQL, conceda o seguinte papel à conta de serviço para o pool de CA que você criou:

  • roles/privateca.certificateRequester

gcloud

Execute o comando gcloud privateca pools para conceder à conta de serviço acesso ao pool de CAs:

gcloud privateca pools add-iam-policy-binding CA_POOL_ID \
  --project=PROJECT_ID \
  --location=REGION \
  --member serviceAccount:SERVICE_ACCOUNT_NAME \
  --role=roles/privateca.certificateRequester

Faça as seguintes substituições:

  • CA_POOL_ID com o ID do pool de CA que você criou.
  • PROJECT_ID com o ID do projeto em que você planeja criar as instâncias do Cloud SQL.
  • REGION com a região em que você criou o pool de CA.
  • SERVICE_ACCOUNT_NAME com o nome da conta de serviço Solicitante de certificado do serviço de CA que você criou para o projeto.

Criar uma CA no pool de CAs

Crie pelo menos uma CA no pool que você criou.

É possível criar uma CA raiz ou subordinada.

Para criar uma CA raiz, siga as instruções em Criar uma CA raiz. É possível aceitar os valores padrão para a CA, mas crie a CA no estado Ativado.

Ao configurar o tamanho e o algoritmo da chave da CA, você pode selecionar qualquer tamanho e algoritmo de chave. O Cloud SQL gera certificados de servidor usando chaves de curva elíptica EC P-256 (SHA 256), mas as chaves criptográficas da sua CA não precisam corresponder.

Se você criar uma CA subordinada, primeiro crie e configure a CA raiz.

crie uma instância do Cloud SQL

Para criar uma instância do Cloud SQL que usa a opção de CA gerenciada pelo cliente, faça o seguinte:

Console

Não é possível usar o console Google Cloud para criar instâncias que usam a opção de CA gerenciada pelo cliente. Se você criar uma instância usando o console doGoogle Cloud , o padrão será o modo de CA compartilhada.

Para selecionar um modo de CA de servidor diferente, use o comando gcloud sql instances create.

gcloud

gcloud sql instances create "INSTANCE_NAME" \
  --database-version=DATABASE_VERSION \
  --project=PROJECT_ID \
  --region=REGION \
  --server-ca-mode=CUSTOMER_MANAGED_CAS_CA \
  --server-ca-pool=projects/PROJECT_ID_CAS/locations/REGION/caPools/CA_POOL_ID

Faça as seguintes substituições:

  • INSTANCE_NAME com o nome da instância do Cloud SQL que você quer criar.
  • DATABASE_VERSION com o enum da versão da instância do Cloud SQL que você quer criar.
  • PROJECT_ID com o ID do projeto em que você planeja criar as instâncias do Cloud SQL.
  • PROJECT_ID_CAS com o ID do projeto em que você criou seu CA_POOL_ID. Esse projeto pode ser igual ou diferente de onde você quer criar a instância do Cloud SQL.
  • REGION com a região em que você criou o pool de CA. É preciso criar a instância na mesma região do pool de CAs.
  • CA_POOL_ID com o ID do pool de CA que você criou.

REST

Para criar uma instância do Cloud SQL que use a opção de CA gerenciada pelo cliente, use o método instances.insert e especifique as seguintes propriedades:

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID o ID do projeto em que você planeja criar as instâncias do Cloud SQL.
  • PROJECT_ID_CAS é o ID do projeto em que você criou seu CA_POOL_ID. Esse projeto pode ser igual ou diferente de onde você quer criar a instância do Cloud SQL.
  • INSTANCE_ID o nome da instância do Cloud SQL que você quer criar.
  • REGION é a região em que você criou o pool de ACs. É preciso criar a instância na mesma região do pool de CAs.
  • CA_POOL_ID com o ID do pool de CA que você criou.

Método HTTP e URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

Corpo JSON da solicitação:

{
  "name":"INSTANCE_ID",
  "region":"REGION",
  "databaseVersion": "DATABASE_VERSION",
  "settings":{
     "ipConfiguration":
      {
         "serverCaPool": "projects/PROJECT_ID_CAS/locations/REGION/caPools/CA_POOL_ID",
         "serverCaMode": "CUSTOMER_MANAGED_CAS_CA"
      }
   }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2025-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID_CSQL/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Resolver problemas

Problema Solução de problemas

Você recebe a seguinte mensagem de erro:

PERMISSION_DENIED: Permission privateca.certificates.create denied on CA_POOL_ID
Verifique se você concedeu o papel roles/privateca.certificateRequester à conta de serviço criada para o projeto do Cloud SQL. Para mais informações, consulte Conceder acesso à conta de serviço ao pool de ACs.

Você recebe a seguinte mensagem de erro:

PERMISSION_DENIED: Request is prohibited by organization's policy vpcServiceControlsUniqueIdentifier VPC_SERVICE_CONTROLS_UNIQUE_IDENTIFIER.
Configure o VPC Service Controls para que o projeto que hospeda o pool de ACs e a AC do CA Service e o projeto que hospeda o Cloud SQL pertençam ao mesmo perímetro de serviço. Para mais informações, consulte Perímetros de serviço e Gerenciar perímetros de serviço.

Você recebe uma das seguintes mensagens de erro INVALID ARGUMENT:

  • Public key algorithm is not permitted by the CaPool's issuance policy.
  • This CaPool's issuance policy does not permit passthrough subjects and/or subject alternative names, and thus can only be used with the REFLECTED_SPIFFE subject mode.
  • Config issuance mode is not permitted by the CaPool's issuance policy.

Verifique as configurações do pool e da AC. Verifique se você atende a todos os requisitos listados em Criar um pool de CA e Criar uma CA no pool de CA.

Você recebe a seguinte mensagem de erro:

RESOURCE_EXHAUSTED

Isso representa problemas de cota com o serviço de CA. Verifique a cota do CA Service no seu projeto. Verifique se você está usando solicitações no pool de CA fora do Cloud SQL. Para mais informações, consulte Cotas e limites.

Você recebe a seguinte mensagem de erro:

NOT FOUND: parent resource CA_POOL_ID not found.
Verifique o ID do projeto, a localização e o nome do pool de CA especificado ao criar a instância do Cloud SQL. Verifique se não há erros de digitação.

Você recebe a seguinte mensagem de erro:

FAILED_PRECONDITION: There are no enabled CAs in the CaPool. Please ensure that there is at least one enabled Certificate Authority to issue a certificate.
Verifique se você criou pelo menos uma CA no pool especificado ao criar a instância do Cloud SQL e se ela está ativada.

Você recebe a seguinte mensagem de erro:

FAILED_PRECONDITION: Per-Product Per-Project Service Account (P4 SA) SERVICE_ACCOUNT_NAME not found for project PROJECT_ID.
Verifique se você criou a conta de serviço para seu projeto do Cloud SQL. Para mais informações, consulte Criar uma conta de serviço específica do projeto.

Você recebe a seguinte mensagem de erro:

INVALID ARGUMENT: Invalid format for server CA pool.

Verifique se você especificou o pool de CA no formato correto:

projects/PROJECT_ID/locations/REGION/caPools/CA_POOL_ID

Você recebe a seguinte mensagem de erro:

INVALID ARGUMENT: The instance's server CA pool must be in the same region as the instance.

Verifique se o pool de CAs está na mesma região da instância do Cloud SQL que você quer criar.