{"id":22313,"date":"2022-05-11T12:23:53","date_gmt":"2022-05-11T10:23:53","guid":{"rendered":"https:\/\/www.makingscience.com\/?p=22313"},"modified":"2022-05-11T12:23:53","modified_gmt":"2022-05-11T10:23:53","slug":"proxysql-una-alternativa-a-la-gestion-de-bases-de-datos-sql-en-google-cloud-platform-gcp","status":"publish","type":"post","link":"https:\/\/www.makingscience.com\/es\/blog\/proxysql-una-alternativa-a-la-gestion-de-bases-de-datos-sql-en-google-cloud-platform-gcp\/","title":{"rendered":"ProxySQL, una alternativa a la gesti\u00f3n de bases de datos SQL en Google Cloud Platform (GCP)"},"content":{"rendered":"<p dir=\"ltr\">En el mundo del DevOps, es de vital importancia mantener un entorno en el que tus compa\u00f1eros desarrolladores puedan sacar el mayor partido de las tecnolog\u00edas disponibles, y a las que est\u00e1n acostumbrados sin abrir jugosas brechas de seguridad.<\/p>\n<p dir=\"ltr\">En este post hablaremos sobre<strong> c\u00f3mo dar acceso a nuestras bases de datos a usuarios que la necesitan,<\/strong> en un entorno con un cluster de kubernetes y una base de datos en CLoudSQL <strong>de la manera m\u00e1s segura y eficiente haciendo uso del ProxySQL.<\/strong><\/p>\n<p>&nbsp;<\/p>\n<h3 dir=\"ltr\">La gesti\u00f3n de datos es complicada<\/h3>\n<p dir=\"ltr\"><strong>Realizar una gesti\u00f3n de base de datos dentro de la nube puede llegar a ser un dolor de cabeza para nuestros amigos programadores.<\/strong> Esto se debe a que tener nuestra base de datos dentro de una VPC que est\u00e1 solo accesible desde los microservicios que cuenten con las credenciales suficientes, es la alternativa de facto para mantener seguro nuestros valiosos datos. Eso implica que, si en entornos no productivos los desarrolladores necesitan realizar operaciones SQL dentro de la base de datos, se enfrentar\u00e1n al problema de no contar con acceso directo desde sus entornos locales.<\/p>\n<p dir=\"ltr\">Para <strong>enfrentar este problema,<\/strong> surgen ante nosotros <strong>tres posibilidades,<\/strong> cada una con un nivel distinto de seguridad y de complejidad.<\/p>\n<ol>\n<li dir=\"ltr\"><strong>Acceso por parte de los desarrolladores a uno de los microservicios y realicen las operaciones por l\u00ednea de comandos: <\/strong>este acceso se puede garantizar por herramientas de control Kubernetes como Rancher, o desde el mismo GCP. Con esta opci\u00f3n <strong>mantendremos la seguridad y aplicamos la regla del menor privilegio posible.<\/strong> Desgraciadamente, realizar una gesti\u00f3n de base de datos desde esos microservicios se vuelve una tarea demasiado manual, sobre todo hablando de datos.<\/li>\n<li dir=\"ltr\"><strong>Crear un microservicio que ejecute un simple servidor phpmyadmin que cuente con las credenciales necesarias para acceder a la base de datos: <\/strong>aqu\u00ed podemos de nuevo tener control sobre las credenciales de acceso utilizando un <strong>Identity Aware Proxy<\/strong> y<strong> garantizar un entorno mucho m\u00e1s amigable que utilizar mysql en l\u00ednea de comandos.<\/strong> Sin embargo, esta soluci\u00f3n cuenta con la desventaja de que existen disponibles much\u00edsimas m\u00e1s herramientas de gesti\u00f3n de base de datos y estamos forzando a realizar toda la gesti\u00f3n desde la misma entidad. Vamos, que esta soluci\u00f3n se acerca, pero podemos hacerlo mejor.<\/li>\n<li dir=\"ltr\"><strong>Utilizar ProxySQL:<\/strong> la propuesta es bastante sencilla a priori, el <strong>ProxySQl ser\u00e1 utilizado como una suerte de t\u00fanel entre el desarrollador y la base de datos.<\/strong> Basta con tener la base de datos con la opci\u00f3n de direcci\u00f3n IP p\u00fablica que brinda GCP para CloudSQL y realizar la instalaci\u00f3n local del Proxysql dependiendo del sistema operativo en cuesti\u00f3n. Si quieres saber un poco m\u00e1s sobre este proceso puedes verlo <a href=\"https:\/\/cloud.google.com\/sql\/docs\/mysql\/connect-admin-proxy\" target=\"_blank\" rel=\"noopener\">aqu\u00ed.<\/a><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p dir=\"ltr\"><img fetchpriority=\"high\" decoding=\"async\" class=\"CToWUd a6T aligncenter\" tabindex=\"0\" src=\"https:\/\/lh6.googleusercontent.com\/Ak4eltXsE8z4rphbJZwWGLWY0BSaYF1RlnQ8duVDn9TJbtAyHFVg6c42yG0zZfg5Pl6tqM6Ye_O_MSWe58HXyOMVNKHYg7rYV_AYH-oPAM1ufq98zwOvk8kJybx0UeppG8V5UCzO\" width=\"624\" height=\"177\" \/><\/p>\n<p dir=\"ltr\">Con todos estos pasos listos, basta con ejecutar el siguiente set de comandos el cual crea la conexi\u00f3n con la base de datos mediante una encriptaci\u00f3n propietaria de ProxySQL y ya tendremos en nuestro puerto local un puerto con acceso la base de datos del que podemos tirar del hilo para hacer operaciones SQL.<\/p>\n<p dir=\"ltr\">Primero que nada,<strong> necesitamos el ID de la instancia<\/strong>, este lo podemos obtener por la CLI de GCP o desde la consola:<\/p>\n<p dir=\"ltr\"><span style=\"color: #e6175c;\">gcloud sql instances describe &lt;nombre instancia SQL&gt;<\/span><\/p>\n<p dir=\"ltr\">Despu\u00e9s utilizamos este comando para crear la conexi\u00f3n. Recordar que se deben tener los permisos suficientes para acceder, eso se hace habilitando el role de Cloud SQL Client para el usuario IAM que estamos utilizando.<\/p>\n<p dir=\"ltr\"><span style=\"color: #e6175c;\">.\/cloud_sql_proxy -instances=&lt;Id de la instancia&gt;=tcp:<a style=\"color: #e6175c;\" href=\"http:\/\/0.0.0.0\/\" target=\"_blank\" rel=\"noopener\" data-saferedirecturl=\"https:\/\/www.google.com\/url?q=http:\/\/0.0.0.0&amp;source=gmail&amp;ust=1649317311669000&amp;usg=AOvVaw20T1gK0GvRdDibSA9k2XVl\">0.0.0.0<\/a>:&lt;puerto a exponer&gt;<\/span><\/p>\n<p dir=\"ltr\">Y ahora ya se puede hechar mano de su software de gesti\u00f3n de base de datos favorito a ese puerto.<\/p>\n<p>&nbsp;<\/p>\n<h3 dir=\"ltr\">La necesidad de una mayor seguridad<\/h3>\n<p dir=\"ltr\">Sin embargo, hay algo que quiz\u00e1 no est\u00e1 del todo asegurado, en temas de compliance y seguridad aunque esa IP p\u00fablica en CloudSQL y se encuentre restringida, al final es una IP que tenemos que gestionar y cuidar y en muchos escenarios, y\u00a0 dependiendo de las reglas internas de la empresa esto no est\u00e1 permitido. Eso implica un gran obst\u00e1culo para nuestra configuraci\u00f3n actual, puesto que el proxySQL la necesita para funcionar. Afortunadamente, <strong>existe una configuraci\u00f3n en kubernetes que podemos habilitar para que nuestro despliegue funcione sin mayor problema, eso s\u00ed complicando un poco m\u00e1s el despliegue.<\/strong><\/p>\n<p dir=\"ltr\"><strong>El salvador en este caso es nuestro amigo PortForward,<\/strong> el cual permite crear un <strong>mapeo de puertos entre un cluster kubernetes en remoto y el ordenador de un sujeto con credenciales de acceso suficiente.<\/strong><\/p>\n<p dir=\"ltr\">Por tanto, lo que hacemos en este caso es crear un pod en nuestro despliegue, que de por s\u00ed tiene acceso a la misma VPC privada dentro de GCP. Existen imagenes ya listas del ProxySQL provistas y mantenidas por Google (<a href=\"https:\/\/github.com\/GoogleCloudPlatform\/cloudsql-proxy\" target=\"_blank\" rel=\"noopener\" data-saferedirecturl=\"https:\/\/www.google.com\/url?q=https:\/\/github.com\/GoogleCloudPlatform\/cloudsql-proxy&amp;source=gmail&amp;ust=1649317311669000&amp;usg=AOvVaw2wxzSTXoou7GqYk6R7AWuu\">https:\/\/github.com\/<wbr \/>GoogleCloudPlatform\/cloudsql-<wbr \/>proxy<\/a>), las cuales con unos cuantos par\u00e1metros de configuraci\u00f3n est\u00e1n listas para operar como un microservicio. Como dato adicional,\u00a0<strong>ProxySQL puede servir de acceso tambi\u00e9n para el resto de microservicios en el cluster.<\/strong> Una vez hecho esto, simplemente habilitamos la opci\u00f3n de PortForward y ejecutamos este comando para tener acceso a nuestro Mapeo de Puertos.<\/p>\n<p dir=\"ltr\">Aqu\u00ed la cuesti\u00f3n es que, <strong>para que nuestra arquitectura funcione se debe garantizar acceso al cluster Kubernetes a los desarrolladores.<\/strong> Si lo realizamos de esa manera no estaremos respetando el principio de Less Privileges, pues estaremos dando acceso a todo el hierro que soporta las aplicaciones que est\u00e1 ejecutando. Vamos, que el desarrollador no tendr\u00eda por que tener acceso a los Ingress o los microservicios de cach\u00e9.<\/p>\n<p dir=\"ltr\">La soluci\u00f3n de nuevo es relativamente simple, <strong>utilizamos un namespace diferente para el microservicio que contiene el ProxySQL.<\/strong> Es decir, <strong>garantizamos permisos a los desarrolladores SOLAMENTE a dicho namespace por medio de un service account, un role creado en IAM y un role binding.<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p dir=\"ltr\"><img decoding=\"async\" class=\"CToWUd a6T aligncenter\" tabindex=\"0\" src=\"https:\/\/lh5.googleusercontent.com\/zienq4ObwxafBWo5eV9mT8ObGN38LNMHRb9GJOz8nwhiJAb_K1uA-2Jm880KywrDogm4TjMXjPRb1fyWS6f1bcpZGL5LY0azvEYbzBRKjgZs5ySL4FE6hIk96wZkyu7kffOWVPbc\" width=\"624\" height=\"281\" \/><\/p>\n<h3 dir=\"ltr\">Como conclusi\u00f3n&#8230;<\/h3>\n<p dir=\"ltr\">No podemos enfatizar lo suficiente en <strong>la importancia de asegurar los datos y de cumplir los requerimientos de seguridad.<\/strong> Eso s\u00ed, para tener el lujo de no tener una IP privada, el despliegue puede complicarse un poco, a\u00f1adiendo m\u00e1s puntos de salto entre el entorno local y la base de datos, adem\u00e1s de los par\u00e1metros de configuraci\u00f3n.<\/p>\n<p dir=\"ltr\">Pero hemos de decir que esto vale la pena, pues solo se debe hacer una vez y tendremos todo listo y asegurado.<\/p>\n<p dir=\"ltr\">Las herramientas que existen son muchas y las interacciones hacen las posibilidades infinitas, por lo que podremos encontrar otras soluciones que se adec\u00faen m\u00e1s a otros casos.<\/p>\n<p dir=\"ltr\"><a href=\"https:\/\/www.makingscience.es\/digital-leaders\/#form?utm_source=linkedin&amp;utm_medium=social&amp;utm_campaign=linkedin_DLD_CLOUD_19\/05\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" class=\"alignnone size-large wp-image-22321\" src=\"https:\/\/www.makingscience.com\/wp-content\/uploads\/1\/2022\/04\/LinkedIn_CTA_Cloud_Data-1024x539.jpg\" alt=\"\" width=\"1024\" height=\"539\" \/><\/a><\/p>\n<blockquote><p>El pr\u00f3ximo jueves, 19 de mayo no te pierdas el evento <strong>Digital Leaders Day: CLOUD &amp; DATA: Construye, securiza y escala, <\/strong>en el que hablaremos sobre<strong> seguridad y datos,\u00a0<\/strong> destapando todo el poder de las soluciones de <strong>Google Cloud Platform (GCP)<\/strong> junto a nuestros clientes, Google y nuestros expertos, \u00bfte lo vas a perder? Ap\u00fantate a este evento presencial\u00a0<span style=\"color: #e31068;\"><a style=\"color: #e31068;\" href=\"https:\/\/www.makingscience.es\/digital-leaders\/#form?utm_source=linkedin&amp;utm_medium=social&amp;utm_campaign=linkedin_DLD_CLOUD_19\/05\" target=\"_blank\" rel=\"noopener\">aqu\u00ed.<\/a><\/span><\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>En el mundo del DevOps, es de vital importancia mantener un entorno en el que tus compa\u00f1eros desarrolladores puedan sacar el mayor partido de las tecnolog\u00edas disponibles, y a las que est\u00e1n acostumbrados sin abrir jugosas brechas de seguridad. En este post hablaremos sobre c\u00f3mo dar acceso a nuestras bases de datos a usuarios que [&hellip;]<\/p>\n","protected":false},"author":40,"featured_media":22757,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2097],"tags":[],"class_list":["post-22313","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categorizar"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/posts\/22313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/comments?post=22313"}],"version-history":[{"count":0,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/posts\/22313\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/media\/22757"}],"wp:attachment":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/media?parent=22313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/categories?post=22313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/tags?post=22313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}