Questo tutorial illustra il processo di esecuzione di un database MySQL su una rete privata in Google Cloud per consentire l'accesso l'accesso al database utilizzando Compute Engine.
Utilizza questo tutorial se vuoi installare il tuo database MySQL su Compute Engine, ma vuoi limitare l'accesso solo a MySQL autorizzato in esecuzione su Compute Engine. Ti consigliamo di gestire la tua istanza MySQL, anziché utilizzare servizio gestito, a causa delle istanze tra regioni, dell'uso avanzato di parametri e di servizi in termini di prestazioni.
Questo tutorial descrive come configurare l'app server MySQL in modo da accettare il traffico remoto da un client MySQL installato su un'istanza Compute Engine nella stessa rete privata.
Per informazioni su come scegliere l'opzione di deployment di MySQL corretta, consulta Come installare MySQL su Compute Engine.
Questo tutorial presuppone che tu abbia familiarità con quanto segue:
- Comandi Linux di base
- Ubuntu-server 18.04
- MySQL 5.7
- Compute Engine
Architettura
In questo tutorial esegui il deployment di due istanze Compute Engine. Un'istanza è il server e l'altra istanza è il client, come illustrato nel diagramma:
Obiettivi
- Crea un'istanza Compute Engine e installa il server MySQL.
- Crea un'istanza Compute Engine e installa il client MySQL.
- Configura il server MySQL per l'accesso remoto.
- Rimuovi l'accesso pubblico al server MySQL.
- Connettiti da remoto a MySQL.
- Crea una regola firewall dei Controlli di servizio VPC.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
- Compute Engine
- Cloud Storage
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
- 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.
Al termine di questo tutorial, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori dettagli, consulta la sezione Pulizia.
Creazione di istanze Compute Engine
Crea due istanze per MySQL: un client e un'istanza server.
Crea un'istanza client Compute Engine
-
Name the instance
my-client
. -
Imposta il flag
--zone
su zona in cui creare per l'istanza. -
Imposta il flag
--image-project
suubuntu-os-cloud
. -
Imposta il flag
--image-family
suubuntu-1804-lts
. -
Imposta il flag
--scopes
suhttps://www.googleapis.com/auth/cloud-platform
. -
Create a Compute Engine instance. Configure the instance as follows:
-
Name the instance
my-server
. -
Imposta il flag
--zone
su zona in cui creare per l'istanza. -
Imposta il flag
--image-project
suubuntu-os-cloud
. -
Imposta il flag
--image-family
suubuntu-1804-lts
. -
Imposta il flag
--scopes
suhttps://www.googleapis.com/auth/cloud-platform
. - Per connetterti all'istanza
my-client
, usa il comandossh
. - Aggiorna il gestore dei pacchetti
apt-get
.sudo apt-get update
- Installa il
pacchetto del client MySQL.
sudo apt-get -y install mysql-client-5.7
- Per connetterti all'istanza
my-server
, usa il comandossh
. - Aggiorna il gestore dei pacchetti
apt-get
.sudo apt-get update
- Installa il
pacchetto del server MySQL.
sudo apt-get -y install mysql-server-5.7
Nella sessione SSH per l'istanza
my-server
, utilizza il comando seguente per migliorare la sicurezza dell'installazione di MySQL.sudo mysql_secure_installation
Premi
enter
per saltare la configurazione del plug-inVALIDATE PASSWORD
.Inserisci una nuova password di root due volte.
Per rimuovere gli utenti anonimi, inserisci
Y
e premienter
.Per impedire l'accesso root remoto, inserisci
Y
e premienter
.Per rimuovere il database di test, inserisci
Y
e premienter
.Per ricaricare le tabelle dei privilegi, inserisci
Y
e premienter
.In Cloud Shell, utilizza SSH per connetterti all'istanza
my-server
.Aggiorna il file di configurazione
/etc/mysql/mysql.conf.d/mysqld.cnf
con le seguenti informazioni: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
Riavvia il servizio MySQL per applicare le modifiche al server in esecuzione.
sudo service mysql restart
Verifica che il server sia in esecuzione localmente. Sostituisci
[ROOT_PASSWORD]
con la password root del server MySQL che hai stabilito in un passaggio precedente.sudo mysql --user=root -p[ROOT_PASSWORD] -e "show databases"
L'output sarà simile al seguente:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
In Cloud Shell, crea una variabile di ambiente per
my-client
all'indirizzo IP interno.CLIENT_IP=$(gcloud compute instances describe my-client \ --zone=ZONE \ --format='value(networkInterfaces[0].networkIP)')
Crea un nuovo utente MySQL con una password. Sostituisci
[MY_PASSWORD]
con la tua password,[ROOT_PASSWORD]
con la tua password utente root MySQL.sudo mysql -uroot -p[ROOT_PASSWORD] \ -e "CREATE USER 'TESTUSER'@'${CLIENT_IP}' IDENTIFIED BY '[MY_PASSWORD]';"
Concedi al nuovo utente MySQL l'autorizzazione per accedere al server dall'indirizzo IP interno di
my-client
.sudo mysql -uroot -p[ROOT_PASSWORD] -e \ "GRANT ALL PRIVILEGES ON *.* TO 'TESTUSER'@'${CLIENT_IP}' \ IDENTIFIED BY '[MY_PASSWORD]';"
Per rimuovere l'indirizzo IP esterno, aggiorna le impostazioni di configurazione in Cloud Shell. Sostituisci
[ZONE]
con la tua zona Google Cloud.gcloud compute instances delete-access-config my-server \ --access-config-name "external-nat" \ --zone="ZONE"
- In Cloud Shell, utilizza SSH per connetterti all'istanza
my-client
. Verifica la connessione elencando i database.
sudo mysql --host=my-server --user=TESTUSER \ --password=[MY_PASSWORD] -e "SHOW DATABASES;"
L'output è simile al seguente:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
In Cloud Shell, crea una regola firewall per consentire le comunicazioni da
mysql-client
amysql-server
.gcloud compute firewall-rules create "mysql-remote-access" \ --allow tcp:3306 --source-tags "mysql-client" \ --target-tags "mysql-server"
- Aggiungi un indirizzo IP esterno a
my-server
per consentire la connettività esterna. - Aggiungi l'indirizzo IP di origine del client esterno alla regole firewall.
- Modifica l'account
TESTUSER
o crea un account utente associato all'indirizzo IP di origine del tuo cliente esterno.
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
Installazione del client MySQL in corso...
I seguenti passaggi descrivono come installare MySQL su un Compute Engine in esecuzione in un'istanza Compute Engine.
Installazione del server MySQL in corso...
I passaggi riportati di seguito descrivono come installare MySQL su un'istanza Compute Engine.
Migliorare la sicurezza dell'installazione di MySQL
Devi stabilire una password root per MySQL ed eseguire la manutenzione di base della sicurezza sul server MySQL configurazione. Per ulteriori informazioni, consulta la documentazione documentazione di
mysql_secure_installation
Configurare il server MySQL
Prima di poterti connettere da remoto al server MySQL, devi configurarlo in modo che ascolti sul suo indirizzo IP interno. Quindi, creerai un account utente non root per il client MySQL per la connessione al server.
Tutti i comandi client MySQL devono includere flag della riga di comando (ad esempio, per l'autenticazione). I comandi MySQL in questa sezione includono i seguenti flag:
--user
per il nome utente,-p
per la password e-e
per eseguire l'istruzione specificata e uscire immediatamente. Per maggiori informazioni, consulta la documentazione di riferimento delle opzioni di comando di MySQL 5.7.Crea un utente MySQL
La connessione da remoto come utente root è stata disattivata con la precedente Comando
mysql_secure_installation
. Devi creare un nuovo utente con le autorizzazioni necessarie per consentire le connessioni da remoto.Rimuovi l'indirizzo IP esterno di
my-server
L'istanza
my-server
non ha bisogno di un indirizzo IP esterno perché il cliente può accedere amy-server
tramite un indirizzo IP interno.Verifica dell'accesso remoto dall'istanza client a server in corso...
I passaggi seguenti descrivono come connettersi al server MySQL su
my-server
dall'istanzamy-client
.Questi passaggi verificano che il client MySQL sia in grado di connettersi correttamente a MySQL il server web all'indirizzo IP interno.
Considerazioni sul firewall negli ambienti di produzione
La configurazione di rete predefinita in Google Cloud include una regola firewall,
default-allow-internal
, che consente il traffico interno tra le istanze Compute Engine su una vasta gamma di porte, inclusa la porta MySQL, porta3306
. In ambienti non predefiniti con una sicurezza consolidata di progettazione interna, potrebbe essere necessario creare una regola firewall per consentire amy-client
per comunicare con la tua istanzamy-server
sulla rete. In caso contrario, le due istanze non possono comunicare tra loro.Puoi basare le regole del firewall su intervalli di indirizzi IP o tag. Gli intervalli di indirizzi IP sono utili se vuoi concedere l'accesso a un ampio intervallo di indirizzi IP interni. In alternativa, se vuoi concedere accesso a istanze specifiche sulla tua rete, i tag offrono una soluzione più flessibile. I tag semplificano l'aggiunta di nuovi clienti senza concedere l'accesso a un un ampio intervallo di indirizzi IP. È sufficiente assegnare il tag appropriato al nuovo un'istanza client MySQL. Ad esempio, puoi creare una nuova regola firewall che consente il traffico da tutte le istanze client contrassegnate con
mysql-client
.Per supportare le regole firewall che utilizzano i tag, puoi assegnare i tag appropriati alle VM
my-client
emy-server
in 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
Aggiungere una nuova regola firewall
I passaggi seguenti spiegano come creare una nuova regola firewall da attivare con il tag
my-client
per comunicare con le istanze che hannomy-server
utilizzando la porta3306
.Ora puoi connetterti a MySQL da
my-client
.Considerazioni sull'accesso da client esterni
Questo tutorial illustra l'accesso dai client MySQL ai server MySQL in esecuzione su in Compute Engine. Consentire l'accesso da un client non in esecuzione su Compute Engine non rientra nell'ambito di questo tutorial. Se devi consentire l'accesso non Compute Engine, modifica quanto segue:
-
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
crea un'istanza del server Compute Engine
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse usata in questo tutorial, puoi elimina il progetto o elimina le istanze.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.
Per eliminare il progetto:
- 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.
Elimina le istanze
Per eliminare un'istanza di 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.
Passaggi successivi
- Informazioni alta disponibilità per MySQL.
- Scopri come configurare MySQL su Compute Engine.
- Configura i log di Cloud Logging per MySQL.
Esplora Cloud SQL.
Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.