Nesta página, você verá como configurar o Acesso privado a serviços na sua rede VPC.
O acesso a serviços particulares é implementado como uma conexão de peering de VPC entre sua rede VPC e a rede VPC subjacente do Google que contém a instância do Cloud SQL. A conexão particular permite que as instâncias de VM na sua rede VPC e os serviços que você acessa se comuniquem exclusivamente usando endereços IP internos. As instâncias de VM não precisam de acesso à Internet ou de endereços IP externos para alcançar serviços disponíveis através do acesso a serviços privados.
Antes de começar
O Cloud SQL requer acesso a serviços particulares para cada rede VPC usada em conexões de IP particulares. Para gerenciar uma conexão de acesso a serviços particulares, o usuário precisa ter as seguintes permissões de IAM:
compute.networks.list
compute.addresses.create
compute.addresses.list
servicenetworking.services.addPeering
Se você não tiver essas permissões, verá um erro de permissões insuficientes.
Se você estiver usando uma rede VPC compartilhada, será necessário fazer o seguinte:
- Adicionar o usuário ao projeto host
- Atribuir as mesmas quatro permissões ao usuário no projeto host
- Conceder a permissão
compute.globalAddresses.list
do IAM ao usuário
Configurar o acesso a serviços particulares para o Cloud SQL
Há duas partes no processo de configuração do acesso privado a serviços:
- Selecionar um intervalo atual ou alocar um novo intervalo de endereços IP.
Também é possível permitir que o Google aloque o intervalo para você. Nesse caso, o Google vai alocar automaticamente um intervalo de IP com tamanho de prefixo /20 e usar o nome default-ip-range.
Para criar instâncias em várias regiões ou para diferentes tipos de banco de dados, é preciso ter um intervalo mínimo /24 de endereços IP disponíveis para cada região ou tipo de banco de dados. Isso inclui outros aplicativos, como o Filestore ou o Memorystore. Para uma nova região ou tipo de banco de dados, o Cloud SQL precisa ter um intervalo /24 livre.
- Criar uma conexão privada pela sua rede VPC à rede do produtor de serviços.
Alocar um intervalo de endereços IP
Console
-
No Console do Google Cloud, acesse a página Redes VPC.
- Selecione a rede VPC que você quer usar.
- Selecione a guia
Conexão de serviço particular . - Selecione a guia
Intervalos de IP alocados para serviços . - Clique em
Alocar intervalo de IP . - Para o
Nome do intervalo alocado, especifiquegoogle-managed-services-VPC_NETWORK_NAME
, em queVPC_NETWORK_NAME
é o nome da rede VPC que você está conectando (por exemplo,google-managed-services-default
). ADescrição é opcional. - Na notação CIDR, selecione a opção
Personalizado e insira o intervalo de endereços IP a ser alocado. - Clique em
Alocar para criar o intervalo alocado.
gcloud
Escolha uma destas opções:
- Para especificar um intervalo de endereços e um tamanho de prefixo (máscara de sub-rede), use os sinalizadores
addresses
eprefix-length
. Por exemplo, para alocar o bloco CIDR192.168.0.0/16
, especifique192.168.0.0
como endereço e16
como tamanho de prefixo. - Para especificar apenas um tamanho de prefixo (máscara de sub-rede), use a
sinalização
prefix-length
. Quando você omitir o intervalo de endereços, o Google Cloud selecionará automaticamente um intervalo de endereços não utilizado na sua rede VPC. No exemplo a seguir, é selecionado um intervalo de endereços IP não utilizado com um tamanho de prefixo de16
bits.
gcloud compute addresses create google-managed-services-VPC_NETWORK_NAME \ --global \ --purpose=VPC_PEERING \ --addresses=192.168.0.0 \ --prefix-length=16 \ --network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME
gcloud compute addresses create google-managed-services-VPC_NETWORK_NAME \ --global \ --purpose=VPC_PEERING \ --prefix-length=16 \ --network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME
Substitua VPC_NETWORK_NAME
pelo nome da sua rede VPC, como my-vpc-network
.
O exemplo a seguir aloca um intervalo de IP que permite aos recursos na rede VPC my-vpc-network
conectarem-se a instâncias do Cloud SQL usando IP privado.
gcloud compute addresses create google-managed-services-my-vpc-network \ --global \ --purpose=VPC_PEERING \ --prefix-length=16 \ --network=projects/myprojectid/global/networks/myvpcnetwork \ --project=my-project
Terraform
Para alocar um intervalo de endereços IP, use um recurso do Terraform.
Aplique as alterações
Para aplicar a configuração do Terraform em um projeto do Google Cloud, conclua as etapas nas seções a seguir.
Preparar o Cloud Shell
- Inicie o Cloud Shell.
-
Defina o projeto padrão do Google Cloud em que você quer aplicar as configurações do Terraform.
Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.
Preparar o diretório
Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.
-
No Cloud Shell, crie um diretório e um novo
arquivo dentro dele. O nome do arquivo precisa ter a extensão
.tf
, por exemplo,main.tf
. Neste tutorial, o arquivo é chamado demain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.
Copie o exemplo de código no
main.tf
recém-criado.Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção
-upgrade
:terraform init -upgrade
Aplique as alterações
-
Revise a configuração e verifique se os recursos que o Terraform vai criar ou
atualizar correspondem às suas expectativas:
terraform plan
Faça as correções necessárias na configuração.
-
Para aplicar a configuração do Terraform, execute o comando a seguir e digite
yes
no prompt:terraform apply
Aguarde até que o Terraform exiba a mensagem "Apply complete!".
- Abra seu projeto do Google Cloud para ver os resultados. No console do Google Cloud, navegue até seus recursos na IU para verificar se foram criados ou atualizados pelo Terraform.
Excluir as alterações
Remova os recursos aplicados anteriormente com a configuração do Terraform executando o seguinte comando e inserindo yes
no prompt:
terraform destroy
Crie uma conexão privada
Console
-
No Console do Google Cloud, acesse a página Redes VPC.
- Selecione a rede VPC que você quer usar.
- Selecione a guia Conexão de serviço particular.
- Selecione a guia Conexões particulares com os serviços.
- Clique em Criar conexão para criar uma conexão particular entre sua rede e um produtor de serviços.
- Em Alocação atribuída, selecione um ou mais intervalos alocados que não estejam sendo usados por outros fornecedores de serviços.
- Clique em Conectar para criar a conexão.
gcloud
Crie uma conexão particular.
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=google-managed-services-VPC_NETWORK_NAME \ --network=VPC_NETWORK_NAME \ --project=PROJECT_ID
O comando inicia uma operação de instância de longa duração do Cloud SQL, retornando um ID de operação.
Verifique se a operação foi bem-sucedida.
gcloud services vpc-peerings operations describe \ --name=OPERATION_ID
Você pode especificar mais de um intervalo alocado ao criar uma conexão privada. Por exemplo, se um intervalo tiver sido esgotado, será possível atribuir mais intervalos alocados. O serviço usa endereços IP de todos os intervalos fornecidos na ordem que você especificou.
Terraform
Para criar uma conexão particular, use um recurso do Terraform.
Uma conta de serviço no formato service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com
recebe o papel servicenetworking.serviceAgent
enquanto a conexão particular é criada porque a conta é provisionada apenas na hora certa.
Se você vir um erro sobre a permissão compute.globalAddresses.list
ou compute.projects.get
para o projeto, execute este comando gcloud
:
gcloud projects add-iam-policy-binding HOST_PROJECT_NAME \ --member=serviceAccount:service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com \ --role=roles/servicenetworking.serviceAgent
Mudar a configuração do acesso a serviços particulares
É possível mudar o intervalo de endereços alocado de uma conexão privada a serviços sem modificar nenhuma instância atual do Cloud SQL. Para mudar o endereço IP privado de uma instância do Cloud SQL, siga estas etapas.
Para modificar o intervalo de endereços alocado:
Console
-
No Console do Google Cloud, acesse a página Redes VPC.
- Selecione a rede VPC que você quer usar.
- Selecione a guia Conexão de serviço particular.
- Selecione a guia Intervalos de IP alocados para serviços.
Selecione o nome do intervalo que você quer excluir.
Clique em Liberar.
Clique em Alocar intervalo de IP.
Crie um novo intervalo com o mesmo nome.
O nome é importante porque a conexão privada já foi estabelecida usando esse nome de endereço.
gcloud services vpc-peerings update \ --network=VPC_NETWORK_NAME \ --ranges=ALLOCATED_RANGES \ --service=servicenetworking.googleapis.com \ --force
Mudar o endereço IP particular de uma instância do Cloud SQL
Para alterar o endereço IP particular de uma instância atual do Cloud SQL, mova-a da rede original para uma rede VPC temporária. Em seguida, altere a configuração de acesso do serviço particular da rede original da instância e mova a instância do Cloud SQL novamente para a rede original.
A fim de migrar para uma rede VPC diferente, siga todas as etapas,
exceto a final (remoção da instância), no procedimento a seguir. Nesse caso,
TEMPORARY_VPC_NETWORK_NAME
é a nova rede VPC. Além disso,
exclua
a conexão particular anterior.
Pode levar alguns dias para que a conexão particular excluída desapareça do
console do Google Cloud.
Se a instância do Cloud SQL estiver hospedada em uma rede VPC compartilhada,
as variáveis VPC_NETWORK_NAME
usadas nas instruções a seguir precisarão ser os nomes de rede VPC
do projeto host. Para especificar uma rede com uma rede VPC
compartilhada, use o URL completo da
rede, por exemplo, projects/HOST_PROJECT/global/networks/NETWORK_NAME
.
Console
-
No Console do Google Cloud, acesse a página Redes VPC.
- Crie uma rede VPC temporária.
- Crie uma alocação de IP na rede VPC temporária.
- Crie uma conexão particular na rede VPC temporária.
Mova a instância do Cloud SQL para a rede VPC temporária.
gcloud beta sql instances patch INSTANCE_ID \ --project=PROJECT_ID \ --network=projects/PROJECT_ID/global/networks/TEMPORARY_VPC_NETWORK_NAME \ --no-assign-ip
Altere a configuração de acesso do serviço particular na rede original para adicionar um novo intervalo alocado ou excluir os existentes.
Mova a instância do Cloud SQL novamente para a rede VPC original.
gcloud beta sql instances patch INSTANCE_ID \ --project=PROJECT_ID \ --network=projects/PROJECT_ID/global/networks/ORIGINAL_VPC_NETWORK_NAME \ --no-assign-ip