GoogleCloudPlatform / cloudsql-proxy
El proxy de autenticación SQL en la nube es un binario que proporciona autorización y cifrado basados en IAM cuando se conecta a una instancia SQL en la nube.
Consulte la página Descripción general de la conexión para obtener más información sobre la conexión a una instancia de SQL en la nube, o la página Acerca del proxy para obtener más información sobre cómo funciona el proxy SQL en la nube.
Nota: El Proxy no puede proporcionar una ruta de red a una instancia SQL en la nube si no está ya presente (por ejemplo, el proxy no puede acceder a una VPC si no tiene acceso a ella).
- Instalación
- Imágenes de contenedor
- Instalar desde el origen
- Uso
- Ejemplo de socket Unix
- Ejemplo de IP privada
- Credenciales
- Indicadores de CLI
- Indicadores de autenticación
- -credential_file
- -token
- -enable_iam_login
- Indicadores de conexión
- -instances="project1:region:instance1,project3:region:instance1"
- -fuse
- -instances_metadata=metadata_key
- -max_connections
- Banderas adicionales
- -ip_address_types=PUBLIC,PRIVATE
- -term_timeout=30s
- -skip_failed_instance_config
- -log_debug_stdout=true
- -structured_logs
- Ejecutar como un Sidecar Kubernetes
- Documentación de referencia
- Terceros
- Homebrew
- Servicio de clúster de Kubernetes con Helm
- Envoltorio de proxy. Net (Paquete Nuget)
Instalación
Para Linux de 64 bits, ejecutar:
wget https://storage.googleapis.com/cloudsql-proxy/v1.19.2/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxychmod +x cloud_sql_proxy
Versiones para sistemas operativos y arquitecturas adicionales y se pueden encontrar en la página releasespage.
Para ver distribuciones alternativas, consulte a continuación la sección de terceros.
Imágenes de contenedor
Hay versiones en contenedores del proxy disponibles en los siguientes repositorios de registro de contenedores en la nube de Google:
gcr.io/cloudsql-docker/gce-proxy
us.gcr.io/cloudsql-docker/gce-proxy
eu.gcr.io/cloudsql-docker/gce-proxy
asia.gcr.io/cloudsql-docker/gce-proxy
Cada imagen está etiquetada con el proxy asociado versión. Actualmente se admiten las siguientes etiquetas:
-
$VERSION
– imagen predeterminada (recomendada) -
$VERSION-alpine
– utilizaalpine:3
como imagen base (solo compatible desde la versión 1.17 en adelante) -
$VERSION-buster
– utilizadebian:buster
como imagen base (solo compatible desde la versión 1.17 en adelante)
Recomendamos usar la última versión del proxy y actualizar la versión regularmente. Sin embargo, también recomendamos fijar a una etiqueta específica y evitar la etiqueta más reciente. Nota: la versión etiquetada es solo la del proxy. Los cambios en las imágenes base pueden romper configuraciones específicas, incluso en incrementos de versiones no principales. Como tal, es una práctica recomendada probar los cambios antes de la implementación y usar retrocesos automáticos para revertir posibles fallos.
Instalar desde el origen
Para instalar desde el origen, asegúrese de tener instalada la versión más reciente de Goinstall.
Luego, simplemente ejecute:
go get github.com/GoogleCloudPlatform/cloudsql-proxy/cmd/cloud_sql_proxy
El cloud_sql_proxy
se colocará en $GOPATH/bin
después de que se complete go get
.
Uso
Todas las siguientes invocaciones asumen que las credenciales válidas están presentes en el entorno. Los siguientes ejemplos hacen referencia a un INSTANCE_CONNECTION_NAME
, que toma la forma: myproject:myregion:myinstance
. Para encontrarINSTANCE_CONNECTION_NAME
, ejecute gcloud sql instances describe <INSTANCE_NAME>
, donde INSTANCE_NAME
es el nombre de la instancia de la base de datos.Ejemplo de socket TCP
# Starts the proxy listening on 127.0.0.1:5432cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432
# Starts the proxy listening on on port 5432 on *all* interfacescloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:0.0.0.0:5432
Ejemplo de socket Unix
# The proxy will mount a Unix domain socket at /cloudsql/<INSTANCE_CONNECTION_NAME># Note: The directory specified by `-dir` must exist.cloud_sql_proxy -dir=/cloudsql -instances=<INSTANCE_CONNECTION_NAME>
Ejemplo de IP privada
cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 -ip_address_types=PRIVATE
Para conectarse mediante IP privada, debe tener acceso a través de la VPC de su proyecto. Para obtener más información, consulte Requisitos de IP privada.
Credenciales
El proxy SQL en la nube utiliza una cuenta de IAM en la nube para autorizar conexiones con la instancia SQL de aCloud. El proxy obtiene las credenciales de estas cuentas en el siguiente orden:
- La marca
-credential_file
- La marca
-token
- La clave de cuenta de servicio en la ruta de acceso almacenada en la variable de entorno
GOOGLE_APPLICATION_CREDENTIALS
. - Las credenciales de usuario de gcloud (establecidas desde
gcloud auth login
) - Las credenciales predeterminadas de la aplicación
Nota: Cualquier cuenta que se conecte a una base de datos SQL en la nube necesitará uno de los siguientes roles de IAM:
- Cliente SQL en la nube (preferido)
- Editor SQL en la nube
- Administrador SQL en la nube
O uno puede asignar manualmente los siguientes permisos de IAM:
cloudsql.instances.connect
cloudsql.instances.get
Consulte Roles y permisos en Cloud SQL para obtener más información.
Cuando el proxy se autentica en la cuenta de servicio predeterminada de la máquina virtual de Compute Engine, la máquina virtual debe tener al menos el ámbito de la API sqlservice.admin
(es decir,”https://www.googleapis.com/auth/sqlservice.admin”) y el proyecto asociado debe tener habilitada la API de administración SQL. La cuenta de servicio predeterminada también debe tener privilegios mínimos de escritor o editor para cualquier proyecto de instancias SQL de destino.
Indicadores de CLI
El proxy de autenticación SQL en la nube toma algunos argumentos para configurar qué instancias se conectarán y el comportamiento de conexión. Para obtener una lista completa de indicadores soportados por el proxy,use cloud_sql_proxy -help
.
Indicadores de autenticación
-credential_file
Especifica la ruta de acceso a una clave de cuenta de servicio JSON que los proxys utilizan para autorizar o autenticar conexiones.
-token
Cuando se establece, el proxy utiliza este token Portador para la autorización.
-enable_iam_login
Habilita al proxy para usar la autenticación de base de datos SQL IAM en la nube. Esto hará que el proxy use credenciales de cuenta IAM para la autenticación de usuarios de bases de datos. Para detalles, consulte Información general de autenticación de base de datos SQL IAM en la nube
Indicadores de conexión
-instances="project1:region:instance1,project3:region:instance1"
Una lista de instancias separadas por comas para abrir dentro de -dir
. También admite la exposición de un puerto TCP y el cambio de nombre de los Sockets de dominio Unix predeterminados; consulte ejemplos a continuación. Se puede proporcionar la misma lista a través de la variable de entorno de INSTANCIAS, en caso de que se proporcionen ambas, el proxy usará el indicador de línea de comandos.
Ejemplo
Usando sockets TCP:
./cloud_sql_proxy -instances=my-project:us-central1:sql-inst=tcp:3306 &mysql -u root -h 127.0.0.1
Uso de sockets Unix:
./cloud_sql_proxy -dir=/cloudsql -instances=my-project:us-central1:sql-inst &mysql -u root -S /cloudsql/my-project:us-central1:sql-inst
Para especificar un nombre de socket Unix personalizado:
./cloud_sql_proxy -dir=/cloudsql \ -instances=my-project:us-central1:sql-inst=unix:custom_socket_name &mysql -u root -S /cloudsql/custom_socket_name
Para especificar una ubicación personalizada para un socket Unix (anulaciones -dir
):
./cloud_sql_proxy -dir=/cloudsql \ -instances=my-project:us-central1:sql-inst=unix:/my/custom/sql-socket &mysql -u root -S /my/custom/sql-socket
-fuse
Requiere acceso a /dev/fuse
, así como al binario fusermount
. Un indicador-fuse_tmp
opcional puede especificar dónde colocar los archivos temporales. La direcciónindicada por -dir
está montada.
Ejemplo
Al usar -fuse
, no es necesario especificar nombres de instancia con anticipación:
./cloud_sql_proxy -dir=/cloudsql -fuse &mysql -u root -S /cloudsql/my-project:us-central1:sql-inst
-instances_metadata=metadata_key
Utilizable solo en ECM. Se recopilará la clave de metadatos de GCE proporcionada para obtener una lista de instancias que se abrirán en -dir
. La clave de metadatos es relativade computeMetadata/v1/
. El formato del valor es el mismo que el de la bandera “instances”. Se utiliza una estrategia de sondeo suspendido, lo que significa que los cambios en el valor de themetadata se reflejarán en -dir
incluso mientras se ejecuta el proxy.Cuando se elimina una instancia de la lista, el socket correspondiente también se eliminará de -dir
( a menos que también se haya especificado en -instances
), pero ninguna conexión existente a esta instancia SE terminará.
Ejemplo
./cloud_sql_proxy -dir=/cloudsql \ -instances_metadata instance/attributes/<custom-metadata-key> &mysql -u root -S /cloudsql/my-project:us-central1:sql-inst
Nota: -instances
y -instances_metadata
se pueden usar al mismo tiempo, pero no son compatibles con la bandera -fuse
.
-max_connections
Si se proporciona, el número máximo de conexiones a establecer antes de rechazar nuevas conexiones. El valor predeterminado es 0 (sin límite).
Banderas adicionales
-ip_address_types=PUBLIC,PRIVATE
Lista delimitada por comas de los tipos de IP preferidos para conectarse a una instancia. Por ejemplo, establecer esto en PRIVADO obligará al proxy a conectarse a instancias utilizando la IP privada asociada a una instancia. Valores predeterminados a PUBLIC,PRIVATE
-term_timeout=30s
Cuánto tiempo esperar para que se cierren las conexiones antes de apagar el proxy.El valor predeterminado es 0.
-skip_failed_instance_config
Establecer este indicador evitará que el proxy finalice si se produce algún error durante la configuración de la instancia. Tenga en cuenta que esto significa que algunas instancias pueden fallar al configurarse correctamente, mientras que otras pueden funcionar si el proxy se reinicia.
-log_debug_stdout=true
Esto es para registrar la salida sin errores en salida estándar en lugar de error estándar. Por ejemplo, si no desea que los mensajes relacionados con la conexión se registren como errores, establezca esta bandera en true. El valor predeterminado es false.
-structured_logs
Escribe todos los resultados de registro como JSON con las siguientes claves: level, ts,caller, msg. Por ejemplo, el mensaje de inicio se ve como:
{"level":"info","ts":1616014011.8132386,"caller":"cloud_sql_proxy/cloud_sql_proxy.go:510","msg":"Usinggcloud's active project: "}
Ejecutar como un Sidecar Kubernetes
Vea el ejemplo aquí, así como Conectarse desde el motor GoogleKubernetes.
Documentación de referencia
- SQL en la nube
- Documentación de proxy de autenticación SQL en la nube
- Inicio rápido de proxy de autenticación SQL en la nube
- Ejemplos de código SQL en la nube
- Documentación de paquete de proxy de autenticación SQL en la nube
Las contribuciones son bienvenidas. Por favor, consulte el documento de CONTRIBUCIÓN para obtener más detalles.
Tenga en cuenta que este proyecto se lanza con un código de Colaborador de Conduct.By al participar en este proyecto, usted acepta cumplir con sus términos. Consulte el Código de Conducta de los contribuyentes para obtener más información.
Terceros
ADVERTENCIA: Google no admite oficialmente estas distribuciones.
Homebrew
Aquí hay una fórmula Homebrew para el proxy de autenticación SQL en la nube.
Servicio de clúster de Kubernetes con Helm
Siga estas instrucciones.
Este gráfico crea una Implementación y un Servicio, pero recomendamos implementar elproxy como contenedor de sidecar en sus pods.
Envoltorio de proxy. Net (Paquete Nuget)
Instale a través de Nuget, siga estas instrucciones.