Neste tutorial, explicamos o processo de execução de um banco de dados MySQL em uma rede privada no Google Cloud para permitir acesso remoto seguro ao banco de dados usando o Compute Engine.
Use este tutorial se quiser instalar seu próprio banco de dados MySQL no Compute Engine, mas quiser restringir o acesso somente a clientes MySQL autorizados que também estão em execução no Compute Engine. Talvez você queira gerenciar sua própria instância do MySQL em vez de usar o serviço gerenciado, em decorrência de instâncias entre regiões, uso mais avançado de parâmetros e necessidades específicas de desempenho.
Neste tutorial, descrevemos como configurar o aplicativo do servidor MySQL para aceitar o tráfego remoto de um cliente MySQL instalado em uma instância do Compute Engine na mesma rede privada.
Para informações sobre como escolher a opção de implantação correta do MySQL, consulte Como instalar o MySQL no Compute Engine.
Neste tutorial, presumimos que você esteja familiarizado com estes produtos e serviços:
- Comandos básicos do Linux
- Servidor Ubuntu 18.04
- MySQL 5.7
- Compute Engine
Arquitetura
Neste tutorial, você implantará duas instâncias do Compute Engine. Uma instância é o servidor, e a outra é o cliente, conforme mostrado no diagrama a seguir:
Objetivos
- Criar uma instância do Compute Engine e instalar o servidor MySQL.
- Criar uma instância do Compute Engine e instalar o cliente MySQL.
- Configurar o servidor MySQL para acesso remoto.
- Remover o acesso público ao servidor MySQL.
- Conectar-se remotamente ao MySQL.
- Criar uma regra de firewall do VPC Service Controls.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- Compute Engine
- Cloud Storage
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Veja mais detalhes em Como fazer a limpeza.
Como criar instâncias do Compute Engine
Crie duas instâncias para o MySQL: uma instância de cliente e uma de servidor.
Criar uma instância de cliente do Compute Engine
-
Name the instance
my-client
. -
Defina a sinalização
--zone
com a zona onde será criada a instância. -
Defina a flag
--image-project
comoubuntu-os-cloud
. -
Defina a flag
--image-family
comoubuntu-1804-lts
. -
Defina a flag
--scopes
comohttps://www.googleapis.com/auth/cloud-platform
. -
Create a Compute Engine instance. Configure the instance as follows:
-
Name the instance
my-server
. -
Defina a sinalização
--zone
com a zona onde será criada a instância. -
Defina a flag
--image-project
comoubuntu-os-cloud
. -
Defina a flag
--image-family
comoubuntu-1804-lts
. -
Defina a flag
--scopes
comohttps://www.googleapis.com/auth/cloud-platform
. - Para se conectar à instância
my-client
, use o comandossh
. - Atualize o gerenciador de pacotes
apt-get
.sudo apt-get update
- Instale o pacote do cliente MySQL.
sudo apt-get -y install mysql-client-5.7
- Para se conectar à instância
my-server
, use o comandossh
. - Atualize o gerenciador de pacotes
apt-get
.sudo apt-get update
- Instale o pacote do servidor MySQL.
sudo apt-get -y install mysql-server-5.7
Na sessão SSH da instância
my-server
, use o comando a seguir para melhorar a segurança da instalação do MySQL.sudo mysql_secure_installation
Pressione
enter
para pular a configuração do plug-inVALIDATE PASSWORD
.Digite uma nova senha raiz duas vezes.
Para remover usuários anônimos, insira
Y
e pressioneenter
.Para impedir o login raiz remoto, insira
Y
e pressioneenter
.Para remover o banco de dados de teste, insira
Y
e pressioneenter
.Para recarregar as tabelas de privilégios, insira
Y
e pressioneenter
.No Cloud Shell, use o SSH para se conectar à instância
my-server
.Atualize o arquivo de configuração
/etc/mysql/mysql.conf.d/mysqld.cnf
com as seguintes informações:LOCAL_IP=$(curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip \ -H "Metadata-Flavor: Google") sudo sed -i "s|bind-address.*|bind-address = $LOCAL_IP|" /etc/mysql/mysql.conf.d/mysqld.cnf
Reinicie o serviço MySQL para aplicar as alterações ao servidor em execução.
sudo service mysql restart
Verifique se o servidor está sendo executado localmente. Substitua
[ROOT_PASSWORD]
pela senha raiz do servidor MySQL que você estabeleceu em uma etapa anterior.sudo mysql --user=root -p[ROOT_PASSWORD] -e "show databases"
A saída será semelhante a esta:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
No Cloud Shell, crie uma variável de ambiente para o endereço IP interno
my-client
.CLIENT_IP=$(gcloud compute instances describe my-client \ --zone=ZONE \ --format='value(networkInterfaces[0].networkIP)')
Crie um novo usuário MySQL com uma senha. Substitua
[MY_PASSWORD]
pela sua senha, e[ROOT_PASSWORD]
pela sua senha de usuário raiz do MySQL.sudo mysql -uroot -p[ROOT_PASSWORD] \ -e "CREATE USER 'TESTUSER'@'${CLIENT_IP}' IDENTIFIED BY '[MY_PASSWORD]';"
Conceda ao novo usuário do MySQL permissão para fazer login no servidor do endereço IP interno de
my-client
.sudo mysql -uroot -p[ROOT_PASSWORD] -e \ "GRANT ALL PRIVILEGES ON *.* TO 'TESTUSER'@'${CLIENT_IP}' \ IDENTIFIED BY '[MY_PASSWORD]';"
Para remover o endereço IP externo, atualize as configurações no Cloud Shell. Substitua
[ZONE]
pela sua zona do Google Cloud.gcloud compute instances delete-access-config my-server \ --access-config-name "external-nat" \ --zone="ZONE"
- No Cloud Shell, use o SSH para se conectar à instância
my-client
. Teste sua conexão listando os bancos de dados.
sudo mysql --host=my-server --user=TESTUSER \ --password=[MY_PASSWORD] -e "SHOW DATABASES;"
A saída é semelhante a esta:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
No Cloud Shell, crie uma regra de firewall para permitir a comunicação de
mysql-client
paramysql-server
.gcloud compute firewall-rules create "mysql-remote-access" \ --allow tcp:3306 --source-tags "mysql-client" \ --target-tags "mysql-server"
- Adicione um endereço IP externo a
my-server
para permitir a conectividade externa. - Adicione o endereço IP de origem do cliente externo às regras de firewall.
- Modifique a conta
TESTUSER
ou crie uma conta de usuário vinculada ao endereço IP de origem do seu cliente externo.
gcloud compute instances create my-server --zone=ZONE --image-project=ubuntu-os-cloud --image-family=ubuntu-1804-lts --scopes=https://www.googleapis.com/auth/cloud-platform
Como instalar o cliente MySQL
As etapas a seguir descrevem como instalar o MySQL em uma instância do Compute Engine.
Como instalar o servidor MySQL
As etapas a seguir descrevem como instalar o MySQL em uma instância do Compute Engine.
Melhorar a segurança da instalação do MySQL
É necessário estabelecer uma senha raiz para o MySQL e realizar manutenção básica de segurança na configuração do servidor MySQL. Para mais informações, consulte a documentação do MySQL para
mysql_secure_installation
.Como configurar o servidor MySQL
Antes de se conectar remotamente ao servidor MySQL, você precisa configurá-lo para escutar no endereço IP interno. Em seguida, crie uma conta de usuário não raiz para o cliente MySQL se conectar ao servidor.
Todos os comandos do cliente MySQL precisam incluir determinadas sinalizações de linha de comando (por exemplo, para autenticação). Os comandos do MySQL nesta seção incluem as seguintes sinalizações:
--user
para o nome de usuário,-p
para a senha e-e
para executar a instrução fornecida e sair imediatamente. Para mais informações, consulte a referência das opções de comando do MySQL 5.7.Criar um usuário do MySQL
Conecte-se remotamente já que o usuário raiz foi desativado com o comando
mysql_secure_installation
anterior. É preciso criar um novo usuário com as permissões necessárias para autorizar conexões remotas.Remover o endereço IP externo de
my-server
A instância
my-server
não precisa de um endereço IP externo porque o cliente pode acessarmy-server
por meio de um endereço IP interno.Como verificar o acesso remoto do cliente para a instância do servidor
As etapas a seguir descrevem como se conectar ao servidor MySQL em
my-server
a partir da instânciamy-client
.Estas etapas verificam se o cliente MySQL pode se conectar ao servidor MySQL por meio do endereço IP interno.
Considerações sobre firewall em ambientes de produção
A configuração de rede padrão no Google Cloud inclui uma regra de firewall,
default-allow-internal
, que permite o tráfego interno entre instâncias do Compute Engine em uma ampla variedade de portas, incluindo a porta MySQL3306
. Em ambientes não padrão com uma abrangência de segurança estabelecida, talvez seja necessário criar uma regra de firewall para permitir que a instânciamy-client
se comunique com a instânciamy-server
pela rede. Caso contrário, as duas instâncias não podem se comunicar entre si.As regras de firewall podem ser baseadas em tags ou intervalos de endereço IP. Esses intervalos são úteis quando o objetivo é conceder acesso a vários endereços IP internos. As tags oferecem uma solução mais flexível quando se trata de conceder acesso a instâncias específicas na rede. Elas facilitam a inclusão de novos clientes sem conceder acesso a vários endereços IP. Você só precisa atribuir a marca apropriada à nova instância do cliente MySQL. Por exemplo, é possível criar uma nova regra de firewall que permita o tráfego de todas as instâncias do cliente com a tag
mysql-client
.Para acomodar regras de firewall usando tags, atribua as tags apropriadas às VMs
my-client
emy-server
no Cloud Shell.gcloud compute instances add-tags my-client --tags mysql-client --zone=ZONE gcloud compute instances add-tags my-server --tags mysql-server --zone=ZONE
Adicionar uma nova regra de firewall
As etapas a seguir descrevem como criar uma nova regra de firewall para permitir que instâncias com a tag
my-client
se comuniquem com instâncias que tenham a tagmy-server
usando a porta3306
.Agora é possível se conectar ao MySQL de
my-client
.Considerações de acesso de clientes externos
Neste tutorial, abrangemos o acesso de clientes MySQL a servidores MySQL em execução no Compute Engine. Está fora do escopo deste tutorial permitir o acesso de um cliente que não está sendo executado no Compute Engine. Se você precisar permitir acesso que não seja do Compute Engine, modifique isto:
-
Name the instance
gcloud compute instances create my-client --zone=ZONE --image-project=ubuntu-os-cloud --image-family=ubuntu-1804-lts --scopes=https://www.googleapis.com/auth/cloud-platform
Criar uma instância de servidor do Compute Engine
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto ou exclua as instâncias.
Exclua o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Excluir instâncias
Para excluir uma instância do Compute Engine:
- In the Google Cloud console, go to the VM instances page.
-
Select the checkbox for
your
my-server
instance. - To delete the instance, click More actions, click Delete, and then follow the instructions.
A seguir
- Leia sobre alta disponibilidade para o MySQL.
- Leia sobre Como configurar o MySQL no Compute Engine.
- Configure o Cloud Logging para registros do MySQL.
Explore o Cloud SQL.
Confira arquiteturas de referência, diagramas e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.