Quiero restringir el acceso a mi bucket de Amazon Simple Storage Service (Amazon S3) para que los usuarios accedan a los objetos únicamente a través de mi distribución de Amazon CloudFront.
Resolución
Para restringir el acceso a un bucket de S3, debes crear un control de acceso de origen (OAC) o crear una identidad de acceso de origen (OAI) heredada. Es recomendable crear un OAC en lugar de la OAI heredada.
Importante: Antes de empezar, asegúrate de que has configurado el origen de Amazon S3 de la distribución de CloudFront como un punto de enlace de la API de REST; por ejemplo, AWSDOC-EXAMPLE-BUCKET.s3.amazonaws.com. Esta solución no se aplica a los orígenes de Amazon S3 que estén configurados como punto de enlace de un sitio web; por ejemplo, AWSDOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com. Para obtener más información, consulta ¿Cómo puedo utilizar CloudFront para ofrecer un sitio web estático alojado en Amazon S3?
Creación de un OAC de CloudFront
Sigue estos pasos:
- Abre la consola de CloudFront.
- En el panel de navegación, elige Distribuciones y, a continuación, elige la distribución que proporciona el contenido del bucket de S3 al que quieres restringir el acceso.
- Elige la pestaña Orígenes.
- Selecciona el origen de Amazon S3 y, a continuación, elige Editar.
- En Acceso de origen, selecciona la configuración del control de acceso de origen (recomendada).
- Para el control de acceso de origen, selecciona un OAC existente. A continuación, elige Crear nueva OAC.
- En el cuadro de diálogo, escribe un nombre para la configuración de control. Se recomienda mantener la configuración predeterminada como Firmar solicitudes (recomendado).
- Selecciona Crear.
- Para acceder al bucket de S3, selecciona Copiar política.
- Selecciona Guardar cambios.
- Abre la consola de Amazon S3.
- En el panel de navegación, elige Buckets de uso general y, a continuación, selecciona el bucket que sea el origen de la distribución de CloudFront.
- Selecciona la pestaña Permisos.
- En Política de bucket, confirma que ves una instrucción similar al siguiente ejemplo:
{
"Version": "2012-10-17",
"Statement": {
"Sid": "AllowCloudFrontServicePrincipalReadOnly",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE"
}
}
}
}
**Nota:**Sustituye DOC-EXAMPLE-BUCKET por el nombre de tu bucket y arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE por el nombre de recurso de Amazon (ARN) de tu distribución de CloudFront. Debes añadir la instrucción anterior a la política de bucket para permitir que el OAC de CloudFront lea los objetos de tu bucket. Tras restringir el acceso al bucket, puedes añadir otro nivel de seguridad integrando AWS WAF.
Creación de una OAI de CloudFront heredada
Sigue estos pasos:
- Abre la consola de CloudFront.
- En el panel de navegación, elige Distribuciones y, a continuación, elige la distribución que proporciona el contenido del bucket de S3 al que quieres restringir el acceso.
- Elige la pestaña Orígenes.
- Selecciona el origen de Amazon S3 y, a continuación, elige Editar.
- En Acceso de origen, elige Identidades de acceso heredadas.
- En la lista desplegable Identidades de acceso de origen, selecciona el nombre de la OAI. O bien, elige Crear nueva OAI.
- En el cuadro de diálogo, introduce un nombre para la nueva OAI y, a continuación, selecciona Crear.
- En Política del bucket, selecciona Sí, actualizar la política de bucket.
- Selecciona Guardar cambios.
- Abre la consola de Amazon S3.
- En el panel de navegación, elige Buckets de uso general y, a continuación, selecciona el bucket que sea el origen de la distribución de CloudFront.
- Selecciona la pestaña Permisos.
- En Política del bucket, confirma que ves una instrucción similar a la siguiente:
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*"
}
Nota: Sustituye arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX por el ARN de tu distribución de CloudFront y AWS****DOC-EXAMPLE-BUCKET por el nombre de tu bucket. Revisa la política de bucket para ver si hay declaraciones con "Effect": "Deny" que bloqueen el acceso al bucket desde la OAI de CloudFront. Cambia la acción a Permitir para que la OAI de CloudFront pueda acceder a los objetos del bucket. Revisa también la política de bucket para ver si hay instrucciones con **"Effect": **"Allow" que permitan el acceso al bucket desde cualquier origen que no sea la OAI de CloudFront. Modifica esas instrucciones para tu caso práctico.
Información relacionada
Creación de una distribución
Identity and access management for Amazon S3