{"id":26657,"date":"2022-08-01T09:27:58","date_gmt":"2022-08-01T07:27:58","guid":{"rendered":"https:\/\/www.makingscience.com\/?p=26657"},"modified":"2022-08-01T09:27:58","modified_gmt":"2022-08-01T07:27:58","slug":"en-la-busqueda-de-integridad-de-la-informacion-en-nuestros-s3-buckets","status":"publish","type":"post","link":"https:\/\/www.makingscience.com\/es\/blog\/en-la-busqueda-de-integridad-de-la-informacion-en-nuestros-s3-buckets\/","title":{"rendered":"En la b\u00fasqueda de integridad de la informaci\u00f3n en nuestros S3 buckets"},"content":{"rendered":"<p dir=\"ltr\">Los requerimientos de seguridad de nuestros buckets dependen considerablemente del tipo de informaci\u00f3n que almacenamos en ellos. En muchos casos esta informaci\u00f3n es crucial en el modelo de negocio y su p\u00e9rdida implicar\u00eda graves consecuencias.<\/p>\n<p dir=\"ltr\">En este blog indagaremos en las <strong>distintas capas de defensa <\/strong>que tenemos a nuestra disposici\u00f3n <strong>para<\/strong> <strong>proteger nuestra informaci\u00f3n de posibles p\u00e9rdidas.<\/strong><\/p>\n<h3 dir=\"ltr\">Versioning, la primera l\u00ednea y en muchos casos la \u00fanica necesaria<\/h3>\n<p dir=\"ltr\">Activar el versionado en los objetos almacenados en los buckets es, en muchos casos, la \u00fanica medida necesaria para proteger la informaci\u00f3n. Independientemente del ciclo de vida de los objetos almacenados, el versionado nos permite sobrevivir a p\u00e9rdidas o modificaciones equivocadas y accidentales de los datos. Por ejemplo, si nuestros objetos son modificados constantemente por alguna aplicaci\u00f3n, tiene sentido que se almacenen versiones de las mismas por si la aplicaci\u00f3n se corrompe y es necesario recuperar las versiones anteriores. Por otro lado, si nuestros datos siguen un modelo WORM (Write Once Read Many) y por tanto, no modificados deber\u00edan ser modificados nunca, tiene sentido activar el versionado por si sucede alg\u00fan incidente que borre accidentalmente los datos.<\/p>\n<p dir=\"ltr\">Cuando un objeto que se encuentra en un bucket versionado es eliminado, no se pierde la informaci\u00f3n instant\u00e1neamente, por el contrario, se a\u00f1ade un \u00abdelete marker\u00bb el cual funciona como un marcador de posici\u00f3n. Cuando una consulta GET por el objeto llega, simplemente no se retorna nada, como si el objeto no existiera. Sin embargo, si se necesita recuperarlo, basta con eliminar el deletion marker y el objeto regresar\u00e1 a su lugar y puede ser usado sin ninguna limitaci\u00f3n.<\/p>\n<p dir=\"ltr\">Por supuesto, si lo que se necesita es eliminar permanentemente los datos se pueden eliminar las versiones previas al \u00abdelete marker\u00bb.\u00a0 Si bien, cuando se habla de grandes cantidades de datos, tanto recuperar como eliminar esto a mano desde la consola de AWS suena como una tarea tit\u00e1nica e imposible, siempre se puede hacer uso de la CLI de amazon y utilizar algunos de sus comandos incluidos. Por ejemplo, si queremos encontrar todos los objetos que cuenten con un \u00abdelete marker\u00bb podemos hacer uso del siguiente comando:<\/p>\n<p dir=\"ltr\"><span style=\"color: #f0076f;\"><em>aws s3api list-object-versions &#8211;bucket DOC-EXAMPLE-BUCKET &#8211;prefix example.txt &#8211;query &#8216;DeleteMarkers[?IsLatest==`<wbr \/>true`]&#8217;<\/em><\/span><\/p>\n<p dir=\"ltr\">Con las llaves que retorne la consulta, podemos utilizar otro de los comandos del s3api para realizar la eliminaci\u00f3n de los \u00abdelete markers\u00bb para recuperar la informaci\u00f3n versionada:<\/p>\n<p dir=\"ltr\"><span style=\"color: #f0076f;\"><em>aws s3api delete-object &#8211;bucket DOC-EXAMPLE-BUCKET &#8211;key example.txt &#8211;version-id &#8216;example.<wbr \/>d6tjAKF1iObKbEnNQkIMPjj&#8217;<\/em><\/span><\/p>\n<p>&nbsp;<\/p>\n<h3 dir=\"ltr\">Replicaci\u00f3n objetos SRR, CRR y Batch Replication<\/h3>\n<p dir=\"ltr\">Hay escenarios donde la informaci\u00f3n es simplemente demasiado importante para estar almacenada en un solo lugar,<strong> \u00bfqu\u00e9 pasar\u00eda si las credenciales de la cuenta en la que est\u00e1n los buckets se filtran y un actor malicioso decide eliminar los buckets?<\/strong> <strong>\u00bfY si alguno de los arquitectos Cloud o miembro del equipo DevOps aplica por equivocaci\u00f3n una configuraci\u00f3n equivocada en el c\u00f3digo de IaC que elimina el bucket y por tanto toda informaci\u00f3n almacenada en \u00e9l?<\/strong>\u00a0Para estos casos simplemente no existe manera de recuperar los objetos perdidos.<\/p>\n<p dir=\"ltr\">Para evitar estos casos, <strong>la mejor opci\u00f3n es replicar los datos y almacenarlos en una cuenta alternativa,<\/strong> puede ser en la misma regi\u00f3n en la que originalmente estaban los datos o en otra, esto dependiendo de los requisitos de conformidad que debemos cumplir. Para la mayor\u00eda de veces, utilizar Same Region Replication (SRR) que no es otra cosa que replicar la informaci\u00f3n a otro bucket en la misma regi\u00f3n pero en una cuenta con accesos diferentes y quiz\u00e1 menos laxos, es suficiente para mantener los datos seguros. Esto gracias a que de por s\u00ed AWS ya almacena los datos en diferentes zonas de disponibilidad (ubicaciones diferentes aisladas las unas de las otras que se encuentran en una misma regi\u00f3n) y por lo tanto la informaci\u00f3n est\u00e1 protegida en caso de que se elimine en alguna de las zonas de disponibilidad. Pero, en escenarios en los que esto no es suficiente siempre se puede hacer uso de Cross Region Replication (CRR) que es replicar la informaci\u00f3n en el bucket a uno que se encuentre en una regi\u00f3n diferente.<\/p>\n<p dir=\"ltr\">Estas replicaciones generan una replicaci\u00f3n inmediata desde el momento en que se activa, es decir, cualquier nuevo objeto que se cree en el bucket original, ser\u00e1 instant\u00e1neamente replicado al nuevo bucket, tanto en SRR como en CRR. Sin embargo, esto no funciona a posteriori instant\u00e1neamente, puesto que los datos que ya existieran anteriormente en el bucket no van a ser instant\u00e1neamente replicados al nuevo bucket.\u00a0 Por suerte existe Batch replication, que nos permite hacer un volcado de la informaci\u00f3n desde un bucket a otro una vez activada la replicaci\u00f3n, para ello simplemente necesitamos un Role con accesos suficientes a los buckets y que pueda ser asumido por S3 para realizar la replicaci\u00f3n. La siguiente imagen explica desde una perspectiva de alto nivel como funciona este proceso:<\/p>\n<p dir=\"ltr\"><img fetchpriority=\"high\" decoding=\"async\" class=\"CToWUd a6T\" tabindex=\"0\" src=\"https:\/\/lh6.googleusercontent.com\/b8HqwRxVewFtzvcCPFfAbnY7GxSzlVeoZAlVIN5fzBBxeiTP4ibaGVLPQ7g82uPaac8GQFLmsJHWj87Di8qXH2g8xt3OmMaYPl3kfSqQHyYpTFaZflNqr6T_WU_QbHnw2hmTDcyksj5Mo1c9Xq8\" width=\"501\" height=\"596\" data-bit=\"iit\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3 dir=\"ltr\">Multi-Factor Authentication<\/h3>\n<p dir=\"ltr\">Una de las alternativas paralelas en la que quiz\u00e1 a muchos usuarios les conviene indagar es activar la Multifactor Authentication (MFA) para protegerse contra posibles perdidas de los datos por error humano. Al igual que puede usarse la MFA como un a\u00f1adido de seguridad para los inicios de sesi\u00f3n es tambi\u00e9n posible activarla para que no permita que se borre informaci\u00f3n del bucket o todo el bucket completo.<\/p>\n<p>&nbsp;<\/p>\n<h3 dir=\"ltr\">Reduciendo la factura de S3 por medio de las clases de almacenamiento<\/h3>\n<p dir=\"ltr\">Cabe resaltar que para S3 es transparente si la informaci\u00f3n est\u00e1 almacenada como versiones de objetos o como copias de seguridad en otro bucket, el precio por uso ser\u00e1 el mismo. Consecuentemente, si no se presta atenci\u00f3n a los costos de las versiones o de los backups se puede llegar a incurrir en sobrecostos innecesarios. Por suerte existen distintos tipos de almacenamiento S3 que nos permiten ahorrar costos. AWS presenta 7 clases de almacenamiento, cada una con diferentes objetivos y que permiten hacer un ahorro diferente dependiendo de las necesidades que tengamos con la informaci\u00f3n.<\/p>\n<p dir=\"ltr\">En este blog no vamos a realizar un an\u00e1lisis a profundidad de las diferentes clases que existen, basta con ojear en la web de AWS (<a href=\"https:\/\/aws.amazon.com\/es\/s3\/storage-classes\/\" target=\"_blank\" rel=\"noopener\" data-saferedirecturl=\"https:\/\/www.google.com\/url?q=https:\/\/aws.amazon.com\/es\/s3\/storage-classes\/&amp;source=gmail&amp;ust=1659423922970000&amp;usg=AOvVaw3IxRTG9gXg4Z9uOvMcPOuz\">https:\/\/aws.amazon.com\/es\/s3\/<wbr \/>storage-classes\/<\/a>) para entender cual es la que se adapta m\u00e1s a nuestras necesidades. Por ejemplo, si nuestros backups no necesitan ser accedidos con frecuencia pero s\u00ed ser accedidos inmediatamente en caso de una emergencia existe S3 Glacier instant retrieval.<\/p>\n<p>&nbsp;<\/p>\n<h3 dir=\"ltr\">Conclusi\u00f3n<\/h3>\n<p dir=\"ltr\">AWS S3 nos ofrece una gama de servicios considerable en cuanto a proteger nuestra informaci\u00f3n se trata. Si bien no existe una gu\u00eda general que sirva a todos los casos, con las soluciones que hemos explorado aqu\u00ed basta para darse una idea de que se puede hacer. En muchos casos activar estas configuraciones es sencillo y barato y puede ahorrarnos dolores de cabeza cuando nos encontramos ante un incidente.<\/p>\n<blockquote>\n<p dir=\"ltr\">\u00bfQuieres mejorar la seguridad de tu organizaci\u00f3n?\ud83d\udee1 Nuestros expertos pueden ayudarte con tu caso concreto. No dudes en escribirnos \ud83d\ude80<\/p>\n<\/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>Los requerimientos de seguridad de nuestros buckets dependen considerablemente del tipo de informaci\u00f3n que almacenamos en ellos. En muchos casos esta informaci\u00f3n es crucial en el modelo de negocio y su p\u00e9rdida implicar\u00eda graves consecuencias. En este blog indagaremos en las distintas capas de defensa que tenemos a nuestra disposici\u00f3n para proteger nuestra informaci\u00f3n de [&hellip;]<\/p>\n","protected":false},"author":40,"featured_media":26659,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[34],"tags":[322,349],"class_list":["post-26657","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology-ai","tag-aws","tag-aws-s3"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/posts\/26657","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=26657"}],"version-history":[{"count":0,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/posts\/26657\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/media\/26659"}],"wp:attachment":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/media?parent=26657"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/categories?post=26657"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/tags?post=26657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}