Saltar al contenido
Marcos Peña
Menú
  • Acerca de…
Menú

Restringir acceso a un bucket de AWS s3 por IP

Publicada el diciembre 29, 2021diciembre 29, 2021 por Marcos

Escenario

Una de nuestra aplicaciones web usa el servicio de almacenaje del webservice s3 de Amazon para guardar los ficheros que se suben a la web. Para ello el usuario dispone de un formulario y, una vez enviado, la aplicación utiliza el API de AWS para guardarlo en su bucket de s3.

Problema

En ningún momento se expone la dirección de s3, del tipo https://s3.eu-central-1.amazonaws.com/acme-documents/4e8c61c7ca8ca26ed8a3d4eac6123226, porque las peticiones de descarga de la aplicación pasan por un controlador, accesible desde https://acme.com/file/3/download, que de manera interna invoca un servicio que se encarga de solicitar el fichero a AWS para que lo devuelva el controlador. Ahora bien, el bucket de s3 es público y no dispone de ninguna restricción por ACL, de modo que si alguien se hiciera con la URL podría descargarse el fichero. Una manera de solucionarlo sería definiendo los controles de acceso, pero para ello habría que actualizar el código que ya está desplegado en producción.

Solución

A parte de definir una política de acceso al bucket con ACL, s3 también permite restringir el acceso a cualquier dirección que no haya sido especificada. Para ello basta con entrar en la consola de AWS de s3 y sustituir el bucket policy por un JSON de este tipo:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::acme-documents",
                "arn:aws:s3:::acme-documents/*"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "111.111.111.111/32",
                        "222.222.222.222/32"
                    ]
                }
            }
        }
}
Como se puede leer, el efecto de esta regla es denegar el acceso a los recursos especificados para las direcciones IPS que no hayan sido autorizadas. En la clave Resource se listan los buckets afectados, con el formato nombre-del-bucket precedido por arn:aws:s3::: En la clave aws:SoruceIp de la condición NotIpAddress hay que listar las direcciones IPS en formato CIDR

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Artículos

  • junio 2022
  • mayo 2022
  • abril 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • junio 2021
  • mayo 2021
  • abril 2021
  • marzo 2021
  • febrero 2021
  • enero 2021
  • diciembre 2020
  • noviembre 2020
  • octubre 2020
  • septiembre 2020
  • agosto 2020
  • julio 2020
  • junio 2020
  • mayo 2020
  • abril 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • diciembre 2019
  • noviembre 2019
  • octubre 2019
  • septiembre 2019
  • agosto 2019
  • julio 2019
  • junio 2019
  • mayo 2019
  • abril 2019
  • marzo 2019
  • febrero 2019
  • enero 2019
  • noviembre 2018
  • octubre 2018
  • julio 2016
  • mayo 2016
  • abril 2016
  • agosto 2015
  • febrero 2014
  • junio 2013
  • febrero 2013
  • noviembre 2012
  • octubre 2012
  • septiembre 2012
  • abril 2012
  • enero 2012

Categorías

  • Cómo
  • Consejos
  • Hacks
  • Sin sentido
  • Tutorial

Etiquetas

apache Apexcharts API aws chartjs comodo ec2 firefox freebsd freenas Google gpg guacamole Hangouts java Javascript kubuntu Laravel last.fm Linux Malware mysql nas4free nginx partición disco php plesk python react Realtek Seguridad sftp sonata-admin spring spring-boot ssh ssl symfony symfony2 symfony4 thymeleaf ubuntu vnc windows xfs

Entradas recientes

  • OsTicket y nginx
  • Extracción del texto de un pdf creado a partir de una imagen
  • Confirmación antes de apagar
  • cURL error 60: SSL certificate problem: unable to get local issuer certificate
  • Oracle JDK 7 is NOT installed.

Comentarios recientes

  • Marcos en Deobbing flash
  • Irosales en Deobbing flash
  • Instalación certificado SSL de un vendedor – Marcos Peña en Instala un certificado SSL en tres pasos
  • gerMdz en Cómo instalar un certificado letsencrypt para un sitio gestionado por Cloudflare
  • Jose Olalla en Cómo ampliar el espacio en disco en 1and1

Archivos

  • junio 2022
  • mayo 2022
  • abril 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • junio 2021
  • mayo 2021
  • abril 2021
  • marzo 2021
  • febrero 2021
  • enero 2021
  • diciembre 2020
  • noviembre 2020
  • octubre 2020
  • septiembre 2020
  • agosto 2020
  • julio 2020
  • junio 2020
  • mayo 2020
  • abril 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • diciembre 2019
  • noviembre 2019
  • octubre 2019
  • septiembre 2019
  • agosto 2019
  • julio 2019
  • junio 2019
  • mayo 2019
  • abril 2019
  • marzo 2019
  • febrero 2019
  • enero 2019
  • noviembre 2018
  • octubre 2018
  • julio 2016
  • mayo 2016
  • abril 2016
  • agosto 2015
  • febrero 2014
  • junio 2013
  • febrero 2013
  • noviembre 2012
  • octubre 2012
  • septiembre 2012
  • abril 2012
  • enero 2012

Categorías

  • Cómo
  • Consejos
  • Hacks
  • Sin sentido
  • Tutorial

Meta

  • Acceder
  • Feed de entradas
  • Feed de comentarios
  • WordPress.org
© 2022 Marcos Peña | Funciona con Minimalist Blog Tema para WordPress