{"id":27222,"date":"2022-08-16T09:12:13","date_gmt":"2022-08-16T07:12:13","guid":{"rendered":"https:\/\/www.makingscience.com\/?p=27222"},"modified":"2022-08-16T09:12:13","modified_gmt":"2022-08-16T07:12:13","slug":"google-kubernetes-engine-gke-recomendaciones-basicas-de-seguridad","status":"publish","type":"post","link":"https:\/\/www.makingscience.com\/es\/blog\/google-kubernetes-engine-gke-recomendaciones-basicas-de-seguridad\/","title":{"rendered":"Google Kubernetes Engine (GKE): recomendaciones b\u00e1sicas de seguridad"},"content":{"rendered":"<p><strong>\u00bfCu\u00e1les son las recomendaciones b\u00e1sicas para operar de forma segura con GKE?<\/strong> En este art\u00edculo compartimos con vosotros algunas recomendaciones de seguridad y buenas pr\u00e1cticas para asegurar un poco m\u00e1s tu cluster de Google Kubernetes Engine (GKE) y su seguridad.<\/p>\n<p>&nbsp;<\/p>\n<h3>No uses la cuenta de servicio por defecto<\/h3>\n<p>Puede sonar b\u00e1sico para algunas personas, pero no todo el mundo sabe acerca de los problemas de seguridad de la utilizaci\u00f3n de la cuenta de servicio por defecto. Esta cuenta por defecto tiene un <strong>rol de editor adjunto<\/strong>, por lo que su acceso es casi ilimitado y una cuenta de car\u00e1cter peligroso. Si alguien es capaz de comprometer un nodo de tu cluster, ser\u00e1 capaz de hacer cosas como crear o\/y borrar instancias, robar credenciales, datos, entre otros.<\/p>\n<p>Desde Making Science te aconsejamos evitar el uso de esa cuenta en todas partes, y es por esto que tendr\u00e1s que crear una nueva cuenta de servicio para el cluster GKE. Esta cuenta se configura a nivel de <em>pool<\/em>, por lo que podemos crear un nuevo <em>pool<\/em> en cualquier momento y migrar nuestros servicios en cualquier momento sin destruir el cluster.<\/p>\n<p><strong>Nota importante:<\/strong> No olvides a\u00f1adir al menos los roles <strong>Logs Writer<\/strong> y <strong>Monitoring Metric Writer<\/strong> y nunca adjuntar un rol primitivo a esa cuenta de servicio.<\/p>\n<p>&nbsp;<\/p>\n<h3>Si es posible, no utilices nunca claves de cuentas de servicio<\/h3>\n<p>Esta es una recomendaci\u00f3n general. No utilices una clave generada por una cuenta de servicio si es posible. La raz\u00f3n es que las claves no se rotan autom\u00e1ticamente y por lo tanto debemos rotarlas manualmente cada vez. Esto no siempre es posible y es un problema de seguridad. El acceso IAM en cambio, gestiona la rotaci\u00f3n de claves autom\u00e1ticamente y es, por tanto, m\u00e1s seguro. Si su aplicaci\u00f3n es capaz de iniciar sesi\u00f3n utilizando la cuenta de servicio por defecto en la instancia, el mejor enfoque es utilizar la identidad de carga de trabajo para poder vincular las cuentas de servicio de Google con las cuentas de servicio de K8s.<\/p>\n<p>Para utilizar las GSA (cuentas de servicio de Google) en K8s, habilitaremos la opci\u00f3n de identidad de carga de trabajo en el cluster, y luego vincularemos la KSA (cuenta de servicio de Kubernetes) a una GSA. Una vez hecho esto, adjuntaremos esa KSA a un deployment, statefulset, etc&#8230; y entonces los pods creados por ella podr\u00e1n iniciar sesi\u00f3n usando la cuenta de servicio por defecto.<\/p>\n<p><strong>Nota importante: <\/strong>La recomendaci\u00f3n aqu\u00ed es la misma que la de las instancias y es utilizar una cuenta de servicio diferente para cada servicio.<\/p>\n<p>&nbsp;<\/p>\n<h3>Nunca utilice roles primitivos<\/h3>\n<p>Esta es tambi\u00e9n una recomendaci\u00f3n general y es seguir el <strong>principio de m\u00ednimo privilegio<\/strong>. NUNCA use roles primitivos en la Cuenta de Servicio porque puede llevar a una severa brecha de seguridad.<\/p>\n<p>&nbsp;<\/p>\n<h3>Encripta la base de datos de secretos usando KMS<\/h3>\n<p>Por defecto en GKE la <strong>base de datos etcd<\/strong> est\u00e1 encriptada en reposo (como todo), pero este archivo es accesible desde el interior de los nodos de GKE sin encriptaci\u00f3n, por lo que puede ser extra\u00eddo por un atacante si gana suficiente acceso al cluster. Para a\u00f1adir una capa de seguridad adicional, podemos utilizar el servicio KMS para cifrar los datos utilizando una clave sim\u00e9trica, por lo que extraer los datos de etcd ser\u00e1 mucho m\u00e1s dif\u00edcil.<\/p>\n<p>Para ello, necesitaremos crear un llavero y una clave sim\u00e9trica en el servicio KMS. Una vez creada la clave, configuraremos el cifrado de secretos de la capa de aplicaci\u00f3n para que utilice esa clave.<\/p>\n<p>&nbsp;<\/p>\n<h3>Desactiva las autenticaciones inseguras<\/h3>\n<p>Aseg\u00farate de que las autenticaciones heredadas e inseguras est\u00e1n deshabilitadas. Por ejemplo:<\/p>\n<ul>\n<li>Autorizaci\u00f3n heredada<\/li>\n<li>Autenticaci\u00f3n b\u00e1sica<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>Habilita la autorizaci\u00f3n binaria<\/h3>\n<p>La autorizaci\u00f3n binaria es un servicio que le permitir\u00e1 comprobar si los servicios desplegados en su cluster est\u00e1n validados. Esto se hace verificando que el despliegue est\u00e1 firmado, por lo que evitar\u00e1 que un atacante pueda desplegar un servicio comprometido aunque haya conseguido acceso al cluster.<\/p>\n<p>Este enfoque tambi\u00e9n es muy \u00fatil para asegurarse de que todos los servicios desplegados en el cluster han superado una serie de pasos, por ejemplo, un pipeline de CI\/CD que comprueba la seguridad de la imagen.<\/p>\n<p>&nbsp;<\/p>\n<h3>No utilices nunca la cuenta de root en el pod<\/h3>\n<p>Como siempre, debemos utilizar la cuenta de root en cualquier lugar es inseguro. Si un atacante consigue acceder al pod, tendr\u00e1 acceso ilimitado a \u00e9l. Lo mejor es crear una cuenta de servicio personalizada con el m\u00ednimo acceso en la imagen del pod y utilizarla para ejecutar todos los servicios. Esto proteger\u00e1 tu pod de accesos no autorizados.<\/p>\n<p>&nbsp;<\/p>\n<h3>Utiliza un sistema de archivos R\/O<\/h3>\n<p>Por defecto todos los pods pueden escribir en el sistema de archivos, lo que puede ser aprovechado por un atacante para ejecutar c\u00f3digo en su servidor modificando o a\u00f1adiendo archivos al mismo. Los pods son stateful y esto puede solucionarse simplemente reiniciando el pod, pero puede ser tard\u00edo para nuestra aplicaci\u00f3n y puede haber sido comprometido de otras formas, como inyectando c\u00f3digo en la base de datos o incluso obteniendo datos privados de la misma.<\/p>\n<p>La mejor manera de evitar este tipo de vulnerabilidad es tener una aplicaci\u00f3n bien programada, pero nada es totalmente seguro, por lo que es bueno tener una capa de seguridad extra habilitando el acceso R\/O. Esto se puede hacer simplemente usando la opci\u00f3n readOnlyRootFilesystem en el despliegue.<\/p>\n<p>&nbsp;<\/p>\n<blockquote><p>Por supuesto, estas no son todas las recomendaciones para asegurar tu cluster GKE, pero es un punto de partida. \u00bfQuieres saber m\u00e1s sobre la seguridad de GKE? Nuestro equipo de expertos estar\u00e1 encantado de ayudarte en tu caso concreto. \u00a1Escr\u00edbenos! \u26c5\ufe0f<\/p><\/blockquote>\n<p style=\"text-align: center;\"><a style=\"border-radius: 15px; padding: 1em; background-color: #f0076f; color: white;\" href=\"https:\/\/www.makingscience.es\/contacto\/\" target=\"_blank\" rel=\"noopener\">Contacta aqu\u00ed<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfCu\u00e1les son las recomendaciones b\u00e1sicas para operar de forma segura con GKE? En este art\u00edculo compartimos con vosotros algunas recomendaciones de seguridad y buenas pr\u00e1cticas para asegurar un poco m\u00e1s tu cluster de Google Kubernetes Engine (GKE) y su seguridad. &nbsp; No uses la cuenta de servicio por defecto Puede sonar b\u00e1sico para algunas personas, [&hellip;]<\/p>\n","protected":false},"author":40,"featured_media":27227,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[34],"tags":[302,341,364,301],"class_list":["post-27222","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology-ai","tag-cloud-es","tag-gke","tag-google-kubernetes-engine","tag-seguridad"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/posts\/27222","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=27222"}],"version-history":[{"count":0,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/posts\/27222\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/media\/27227"}],"wp:attachment":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/media?parent=27222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/categories?post=27222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/tags?post=27222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}