Quiero almacenar solo ciertos tipos de archivos en mi bucket de Amazon Simple Storage Service (Amazon S3). Quiero limitar las cargas para que mi bucket acepte solo esos tipos de archivos.
Resolución
Puedes restringir la carga de archivos a tipos de archivos específicos con una política de bucket que combine las instrucciones de permiso y denegación. Este enfoque utiliza una coincidencia de patrones en la clave del objeto para hacer cumplir los requisitos de extensión de archivo.
Nota: Este método filtra en función de las extensiones de archivo de la clave del objeto, no del contenido real del archivo o del tipo de extensiones de correo de Internet multipropósito (MIME). Los usuarios pueden omitir esta restricción si cambian el nombre de los archivos. Para la validación basada en el contenido, considera la posibilidad de realizar comprobaciones adicionales en la capa de aplicación.
Usa los dos tipos de instrucción siguientes en tu política de bucket:
-
Las instrucciones Allow permiten acciones s3:PutObject solo para objetos que coinciden con los tipos de archivo aprobados.
-
Las instrucciones Deny deniegan las acciones s3:PutObject para objetos que no coinciden con los tipos de archivo aprobados.
Nota: La instrucción de denegación explícita impide que los usuarios con amplios permisos de S3, como el acceso administrativo, carguen tipos de archivos no autorizados.
Por ejemplo, esta política de bucket permite la acción PutObject en exampleuser solo para objetos con extensiones de archivo .jpg, .png o .gif:
{
"Version": "2012-10-17",
"Id": "Policy1464968545158",
"Statement": [
{
"Sid": "Stmt1464968483619",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:user/exampleuser"
},
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.jpg",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.png",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.gif"
]
},
{
"Sid": "Stmt1464968483619",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"NotResource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.jpg",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.png",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.gif"
]
}
]
}
Nota: Sustituye DOC-EXAMPLE-BUCKET por el nombre de tu bucket.
Para el primer valor de Entidad principal, indica los nombres de recursos de Amazon (ARN) de los usuarios a los que quieres conceder permisos de carga.
Nota: Cuando especificas recursos en la política de bucket, la evaluación de la política de bucket distingue entre mayúsculas y minúsculas. Una política de bucket que deniega las acciones de s3:PutObject para NotResource arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.jpg te permite cargar my_image.jpg. Sin embargo, si intentas cargar my_image.JPG, Amazon S3 mostrará un error Access Denied. Para admitir ambos casos, incluye las extensiones *.jpg y *.JPG en tu política.
Este ejemplo de política de bucket incluye una instrucción de denegación explícita. Si un usuario no cumple las condiciones, incluso el usuario que configure la política de bucket puede perder el acceso al bucket. Por lo tanto, revisa detenidamente la política de bucket antes de guardarla. Si bloqueas accidentalmente el acceso al bucket, consulta ¿Cómo puedo recuperar el acceso a mi bucket de Amazon S3 después de haber denegado accidentalmente el acceso a todos?
Para proteger un bucket de Amazon S3 en función de criterios distintos del tipo de archivo, utiliza Amazon GuardDuty Malware Protection para S3 o Amazon Macie. El motor de análisis de Protección contra malware de Amazon GuardDuty comprueba si hay malware en todos los archivos cargados. Amazon Macie informa sobre los resultados de datos confidenciales en formatos de archivo compatibles que hayas cargado a S3. Utiliza criterios integrados o tus identificadores de datos personalizados.