Configuración del acceso privado a un bucket de Amazon S3 a través de un punto de conexión de VPC - Recomendaciones de AWS

Configuración del acceso privado a un bucket de Amazon S3 a través de un punto de conexión de VPC

Martin Maritsch, Nicolas Jacob Baer, Gabriel Rodriguez Garcia, Shukhrat Khodjaev, Mohan Gowda Purushothama y Joaquin Rinaudo, Amazon Web Services

Resumen

En Amazon Simple Storage Service (Amazon S3), las URL prefirmadas le permiten compartir archivos de tamaño arbitrario con los usuarios de destino. De manera predeterminada, se puede acceder a las URL prefirmadas de Amazon S3 desde Internet en un periodo de vencimiento, lo que facilita su uso. Sin embargo, los entornos corporativos suelen requerir que el acceso a las URL prefirmadas de Amazon S3 se limite solo a una red privada.

Este patrón presenta una solución sin servidor para interactuar de manera segura con los objetos de S3 mediante el uso de URL prefirmadas desde una red privada sin acceso a Internet. En la arquitectura, los usuarios acceden a un equilibrador de carga de aplicación a través de un nombre de dominio interno. El tráfico se enruta de manera interna a través de Amazon API Gateway y un punto de conexión de nube privada virtual (VPC) del bucket de S3. La función de AWS Lambda genera URL prefirmadas para la descarga de archivos a través del punto de conexión de VPC privada, lo que ayuda a mejorar la seguridad y la privacidad de la información confidencial.

Requisitos previos y limitaciones

Requisitos previos

  • Una VPC que incluye una subred implementada en una Cuenta de AWS conectada a la red corporativa (por ejemplo, a través de AWS Direct Connect).

Limitaciones

  • El bucket S3 debe tener el mismo nombre que el dominio, por lo que le recomendamos que consulte Reglas de nomenclatura de buckets de Amazon S3.

  • Este ejemplo de arquitectura no incluye características de supervisión para la infraestructura implementada. Si su caso de uso requiere supervisión, considere la posibilidad de añadir servicios de supervisión de AWS.

  • Este ejemplo de arquitectura no incluye la validación de entradas. Si el caso de uso requiere la validación de entradas y un mayor nivel de seguridad, considere la posibilidad de utilizar AWS WAF para proteger la API.

  • Esta arquitectura de ejemplo no incluye el registro de acceso con el equilibrador de carga de aplicación Si el caso de uso requiere el registro de acceso, considere la posibilidad de habilitar los registros de acceso del equilibrador de carga.

Versiones

  • Python, versión 3.11 o posterior

  • Terraform versión 1.6 o posterior

Arquitectura

Pila de tecnología de destino

Los servicios siguientes de AWS se utilizan en la pila de tecnologías de destino:

  • Amazon S3 es el servicio de almacenamiento principal que se utiliza para cargar, descargar y almacenar archivos de manera segura.

  • Amazon API Gateway expone los recursos y puntos de conexión para interactuar con el bucket de S3. Este servicio desempeña un papel en la generación de URL prefirmadas para descargar o cargar datos.

  • AWS Lambda genera direcciones URL prefirmadas para descargar archivos de Amazon S3. API Gateway llama a la función de Lambda.

  • Amazon VPC implementa recursos en una VPC para proporcionar aislamiento de la red. La VPC incluye subredes y tablas de enrutamiento para controlar el flujo de tráfico.

  • El equilibrador de carga de aplicación dirige el tráfico entrante a API Gateway o al punto de conexión de VPC del bucket de S3. Permite a los usuarios de la red corporativa acceder a los recursos de manera interna.

  • El punto de conexión de VPC para Amazon S3 permite la comunicación directa y privada entre los recursos de la VPC y Amazon S3 sin tener que atravesar la Internet pública.

  • AWS Identity and Access Management (IAM) controla el acceso a los recursos de AWS. Los permisos se configuran para garantizar interacciones seguras con la API y otros servicios.

Arquitectura de destino

Configuración del acceso privado a un bucket de S3 a través de un punto de conexión de VPC

En el siguiente diagrama se ilustra lo siguiente:

  1. Los usuarios de la red corporativa pueden acceder al equilibrador de carga de aplicación a través de un nombre de dominio interno. Suponemos que existe una conexión entre la red corporativa y la subred de la intranet en la Cuenta de AWS (por ejemplo, a través de una conexión de Direct Connect).

  2. El equilibrador de carga de aplicación dirige el tráfico entrante a API Gateway para generar URL prefirmadas para descargar o cargar datos en Amazon S3, o al punto de conexión de VPC del bucket de S3. En ambos casos, las solicitudes se enrutan internamente y no es necesario que atraviesen Internet.

  3. API Gateway expone los recursos y puntos de conexión para interactuar con el bucket de S3. En este ejemplo, proporcionamos un punto de conexión para descargar archivos del bucket de S3, pero esto podría ampliarse para proporcionar también la funcionalidad de carga.

  4. La función de Lambda genera la URL prefirmada para descargar un archivo de Amazon S3 mediante el nombre de dominio del equilibrador de carga de aplicación en lugar del dominio público de Amazon S3.

  5. El usuario recibe la URL prefirmada y la utiliza para descargar el archivo de Amazon S3 mediante el equilibrador de carga de aplicación. El equilibrador de carga incluye una ruta predeterminada para enviar el tráfico que no está destinado a la API hacia el punto de conexión de VPC del bucket de S3.

  6. El punto de conexión de VPC enruta la URL prefirmada con el nombre de dominio personalizado al bucket de S3. El bucket de S3 debe tener el mismo nombre que el dominio.

Automatizar y escalar

Este patrón utiliza Terraform para implementar la infraestructura del repositorio de código en una Cuenta de AWS.

Herramientas

Herramientas

  • Python es un lenguaje de programación informático de uso general.

  • Terraform es una herramienta de infraestructura como código (IaC) de HashiCorp que le ayuda a crear y administrar recursos en las instalaciones y en la nube.

  • La AWS Command Line Interface (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en el intérprete de comandos de la línea de comandos.

Repositorio de código

El código de este patrón está disponible en un repositorio de GitHub en https://github.com/aws-samples/private-s3-vpce.

Prácticas recomendadas

La arquitectura de ejemplo para este patrón utiliza permisos de IAM para controlar el acceso a la API. Cualquier persona que tenga credenciales de IAM válidas puede llamar a la API. Si su caso de uso requiere un modelo de autorización más complejo, es posible que quiera utilizar un mecanismo de control de acceso distinto.

Epics

TareaDescripciónHabilidades requeridas

Obtenga las credenciales de AWS.

Revise las credenciales de AWS y el acceso a su cuenta. Para obtener instrucciones, consulte Opciones de los archivos de configuración y credenciales en la documentación de la AWS CLI.

AWS DevOps, AWS general

Clonar el repositorio.

Clone el repositorio de GitHub proporcionado con este patrón:

git clone https://github.com/aws-samples/private-s3-vpce
AWS DevOps, AWS general

Configure las variables

  1. En su equipo, en el repositorio de GitHub, abra la carpeta terraform:

    cd terraform
  2. Abra el archivo example.tfvars y personalice los parámetros según sus necesidades.

AWS DevOps, AWS general

Implemente la solución.

  1. En la carpeta terraform, ejecute Terraform y pase las variables que personalizó:

    terraform apply -var-file="example.tfvars"
  2. Confirme que los recursos que se muestran en el diagrama de arquitectura se implementaron correctamente.

AWS DevOps, AWS general
TareaDescripciónHabilidades requeridas

Crear un archivo de prueba.

Cargue un archivo en Amazon S3 para crear un escenario de prueba para la descarga del archivo. Puede utilizar la consola de Amazon S3 o el comando de AWS CLI siguiente.

aws s3 cp /path/to/testfile s3://your-bucket-name/testfile
AWS DevOps, AWS general

Pruebe la funcionalidad de las URL prefirmadas.

  1. Envíe una solicitud al equilibrador de carga de aplicación para crear una URL prefirmada para el archivo de prueba mediante awscurl:

    awscurl https://your-domain-name/api/get_url?key=testfile

    Este paso crea una firma válida a partir de sus credenciales, que será validada por API Gateway.

  2. Analice el enlace a partir de la respuesta que reciba en el paso anterior y abra la URL prefirmada para descargar el archivo.

AWS DevOps, AWS general

Eliminar recursos.

Asegúrese de eliminar los recursos cuando ya no sean necesarios:

terraform destroy
AWS DevOps, AWS general

Solución de problemas

ProblemaSolución

Los nombres de clave de objetos de S3 con caracteres especiales, como signos numéricos (#), infringen los parámetros de la URL y provocan errores.

Codifique los parámetros de URL correctamente y asegúrese de que el nombre de la clave del objeto S3 siga las directrices de Amazon S3.

Recursos relacionados

Amazon S3:

Amazon API Gateway:

Equilibrador de carga de aplicación: