DEV Community

Sergio Jiménez
Sergio Jiménez

Posted on

Proteger mediante CloudFlare un sitio alojado en S3

Cuando creamos un sitio web, como por ejemplo una landing page estática, y queremos alojarla en un sitio rápido y rentable sin servidor, podemos utilizar directamente un bucket de aws s3.

Esta funcionalidad es bien conocida, pero por si acaso te dejo la propia documentación de aws dónde explica cómo hacerlo: aws hosting s3

En esa documentación se indica que directamente podremos hacer accesible el contenido del bucket de forma pública, adjuntando una politica tal que así:

Image description

CDN y WAF de Cloudflare

Si queremos añadir capacidades de CDN y WAF podríamos utilizar el servicio de CloudFront de AWS, o alguna alternativa como puede ser Cloudflare que nos permite también empezar con un nivel gratuito de protección para nuestro site, además de otras capacidades de protección en email y DNS.

El problema es que si alguien accede al bucket de s3 directamente, podrá acceder como un bypass sin la protección de Cloudflare. Es decir, en vez de acceder por el dominio protegido por Cloudflare www.example.com podría usar http://www.example.com.s3-website.eu-central-1.amazonaws.com que como tiene una politica de permitir todo es accesible igualmente.

¿Cómo podemos evitarlo?

Cloudflare publica una lista de Ips desde las que accede a los servicios:
IP List Cloudflare

Podemos crear una política que permita solo esas ip's para el acceso a S3 dando un 403 si no llamas desde cloudflare.

La política viene a sustituir a la anterior por defecto, y os dejo el código json para que podáis copiar y pegar:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowCloudFlareIP",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:getObject",
            "Resource": [
                "arn:aws:s3:::Bucket-Name",
                "arn:aws:s3:::Bucket-Name/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "2c0f:f248::/32",
                        "2a06:98c0::/29",
                        "2803:f800::/32",
                        "2606:4700::/32",
                        "2405:b500::/32",
                        "2405:8100::/32",
                        "2400:cb00::/32",
                        "198.41.128.0/17",
                        "197.234.240.0/22",
                        "190.93.240.0/20",
                        "188.114.96.0/20",
                        "173.245.48.0/20",
                        "172.64.0.0/13",
                        "162.158.0.0/15",
                        "141.101.64.0/18",
                        "131.0.72.0/22",
                        "108.162.192.0/18",
                        "104.16.0.0/12",
                        "103.31.4.0/22",
                        "103.22.200.0/22",
                        "103.21.244.0/22"
                    ]
                }
            }
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

Sustituid Bucket-Name por el nombre de vuestro bucket.

Esta es una forma sencilla de alojar y proteger un sitio estático ya de por sí tremendamente seguro y rápido. Añadiendo capacidad de CDN y WAF haremos que nuestro site literalmente vuele.

Espero que haya sido útil, y nos vemos en otros post.

Top comments (1)

Some comments may only be visible to logged-in visitors. Sign in to view all comments. Some comments have been hidden by the post's author - find out more