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
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative a API Compute Engine.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative a API Compute Engine.
Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Veja mais detalhes em Como limpar.
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
-
Nome da instância
my-client
. - Defina a sinalização
--zone
com a zona onde será criada a instância. -
Defina a sinalização
--image-project
comoubuntu-os-cloud
. -
Defina a sinalização
--image-family
comoubuntu-1804-lts
. -
Defina a sinalização
--scopes
comohttps://www.googleapis.com/auth/cloud-platform
.
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
-
Nome da instância
my-server
. - Defina a sinalização
--zone
com a zona onde será criada a instância. -
Defina a sinalização
--image-project
comoubuntu-os-cloud
. -
Defina a sinalização
--image-family
comoubuntu-1804-lts
. -
Defina a sinalização
--scopes
comohttps://www.googleapis.com/auth/cloud-platform
.
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.
- 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
Como instalar o servidor MySQL
As etapas a seguir descrevem como instalar o MySQL em uma instância do Compute Engine.
- 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
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
.
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
.
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.
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 | +--------------------+
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.
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]';"
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 acessar my-server
por meio de um endereço IP interno.
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"
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ância my-client
.
- 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 | +--------------------+
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 MySQL 3306
. 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ância my-client
se comunique com a instância my-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
e my-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 tag my-server
usando a porta 3306
.
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"
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:
- 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.
Limpeza
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto ou exclua as instâncias.
Excluir o projeto
O jeito mais fácil de evitar cobranças é excluir o projeto que você criou para o tutorial.
Para excluir o projeto:
- No Console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
Excluir instâncias
Para excluir uma instância do Compute Engine:
- No Console do Google Cloud, acesse a página Instâncias de VMs.
-
Marque a caixa de seleção de
sua instância
my-server
. - Para excluir a instância, clique em Mais ações, clique em Excluir e siga as instruções.
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.