Alojamiento virtual de buckets - Amazon Simple Storage Service

Alojamiento virtual de buckets

El alojamiento virtual es la práctica que consiste en distribuir múltiples sitios web desde un solo servidor web. Una manera de diferenciar sitios en las solicitudes de la API de REST de Amazon S3 es mediante el uso del nombre de host aparente de Request-URI en lugar de solo la parte del nombre de la ruta del URI. Para especificar un bucket, una solicitud REST de Amazon S3 normal utiliza el primer componente delimitado por una barra inclinada de la ruta del URI de la solicitud. En su lugar, puede utilizar el alojamiento virtual de Amazon S3 para hacer referencia a un bucket en una llamada a la API de REST mediante el encabezado Host de HTTP. En la práctica, Amazon S3 interpreta que el Host significa que es posible acceder a la mayoría de los buckets de manera automática (para tipos limitados de solicitudes) en https://bucket-name.s3.region-code.amazonaws.com. Para obtener una lista completa de las regiones y los puntos de conexión de Amazon S3, consulte Puntos de conexión y cuotas de Amazon S3 en la Referencia general de Amazon Web Services.

El alojamiento virtual también tiene otros beneficios. Al nombrar su bucket después de su nombre de dominio registrado y al convertir ese nombre en un alias de Domain Name System (DNS, Sistema de nombres de dominio) para Amazon S3, puede personalizar completamente el URL de sus recursos de Amazon S3, por ejemplo, http://my.bucket-name.com/. También puede publicar en el "directorio raíz" del servidor virtual de su bucket. Esta capacidad puede ser importante ya que varias aplicaciones existentes buscan archivos en esta ubicación estándar. Por ejemplo, favicon.ico, robots.txt y crossdomain.xml se encuentran en la raíz.

importante

Cuando utiliza buckets de tipo host virtual con SSL, el certificado comodín de SSL solo se asocia a los buckets que no contienen puntos (.). Para solucionar esta limitación, use HTTP o escriba su propia lógica de verificación de certificado. Para obtener más información, consulte Amazon S3 Path Deprecation Plan en AWS News Blog.

Solicitudes de tipo ruta

Actualmente, Amazon S3 admite URL tanto de tipo host virtual como de tipo ruta en todas las Regiones de AWS. Sin embargo, las URL de tipo ruta dejarán de usarse en el futuro. Para obtener más información, consulte la siguiente nota Importante.

En Amazon S3, las URL de tipo ruta utilizan el siguiente formato:

https://s3.region-code.amazonaws.com/bucket-name/key-name

Por ejemplo, si crea un bucket con el nombre DOC-EXAMPLE-BUCKET1 en la región EE. UU. Oeste (Oregón) y quiere acceder al objeto puppy.jpg en dicho bucket, puede usar la siguiente URL de tipo ruta:

https://s3.us-west-2.amazonaws.com/DOC-EXAMPLE-BUCKET1/puppy.jpg
importante

Actualización (23 de septiembre de 2020): para garantizar que los clientes tienen el tiempo necesario para pasar a las URL de tipo host virtual, hemos decidido retrasar la obsolescencia de las URL de tipo ruta. Para obtener más información, consulte Amazon S3 Path Deprecation Plan – The Rest of the Story en el Blog de noticias de AWS.

aviso

Cuando alojes contenido de un sitio web al que se acceda desde un navegador web, evita utilizar la URL de tipo ruta, ya que podrían interferir con el mismo modelo de seguridad de origen del navegador. Para alojar el contenido del sitio web, le recomendamos que utilice puntos de conexión de sitios web de S3 o una distribución de CloudFront. Para obtener más información, consulte Puntos de enlace de sitio web e implemente una aplicación de una sola página basada en React en Amazon S3 y CloudFront en Los patrones de AWS Perspective Guidance.

Solicitudes de tipo host virtual

En un URI de tipo alojamiento virtual, el nombre del bucket forma parte del nombre del dominio en el URL.

Las URL de tipo host virtual de Amazon S3 utilizan el siguiente formato:

https://bucket-name.s3.region-code.amazonaws.com/key-name

En este ejemplo, DOC-EXAMPLE-BUCKET1 es el nombre del bucket, EE.UU Oeste (Oregon) es la región y puppy.png es el nombre clave:

https://DOC-EXAMPLE-BUCKET1.s3.us-west-2.amazonaws.com/puppy.png

Especificación de bucket de encabezado Host de HTTP

Siempre y cuando su solicitud GET no utilice el punto de enlace de SSL, puede especificar el bucket para la solicitud con el encabezado del Host HTTP. El encabezado del Host en una solicitud de REST se interpreta de la siguiente manera:

  • Si se omite el encabezado Host o si su valor es s3.region-code.amazonaws.com, el bucket de la solicitud será el primer componente delimitado por una barra inclinada del URI de la solicitud y la clave para la solicitud será el resto del URI de la solicitud. Este es el método más común, según se ilustra en el primer y segundo ejemplo de esta sección. Solo se puede omitir el encabezado Host para solicitudes HTTP 1.0.

  • De lo contrario, si el valor del encabezado Host termina en .s3.region-code.amazonaws.com, el nombre del bucket es la primera parte del valor del encabezado Host hasta .s3.region-code.amazonaws.com. La clave para la solicitud es el URI de la solicitud. Esta interpretación expone los buckets como subdominios de .s3.region-code.amazonaws.com, según se ilustra en los ejemplos tercero y cuarto de esta sección.

  • De lo contrario, el bucket para la solicitud es el valor en minúscula del encabezado del Host y la clave para la solicitud es el URI de la solicitud. Esta interpretación es útil si registró el mismo nombre de DNS que el nombre de su bucket y estableció ese nombre como alias de nombre canónico (CNAME) para Amazon S3. El procedimiento para registrar nombres de dominio y configurar registros DNS de CNAME está fuera del propósito de esta guía, pero el resultado se muestra en el ejemplo final en esta sección.

Ejemplos

En esta sección se proporcionan ejemplos de URL y solicitudes.

ejemplo : solicitudes y URL de tipo ruta

En este ejemplo se utiliza lo siguiente:

  • Nombre del bucke ‐ example.com

  • Región: EE. UU. Este (Norte de Virginia)

  • Nombre de clav ‐ homepage.html

El URL es el siguiente:

http://s3.us-east-1.amazonaws.com/example.com/homepage.html

La solicitud es la siguiente:

GET /example.com/homepage.html HTTP/1.1 Host: s3.us-east-1.amazonaws.com

La solicitud con HTTP 1.0 y la omisión del encabezado de Host son los siguientes:

GET /example.com/homepage.html HTTP/1.0

Para obtener información acerca de los nombres compatibles con el DNS, consulte Limitaciones. Para obtener más información acerca de las claves, consulte Claves.

ejemplo : solicitudes y URL de tipo host virtual

En este ejemplo se utiliza lo siguiente:

  • Nombre del bucket: DOC-EXAMPLE-BUCKET1

  • Región: Europa (Irlanda)

  • Nombre de clave: homepage.html

El URL es el siguiente:

http://DOC-EXAMPLE-BUCKET1.s3.eu-west-1.amazonaws.com/homepage.html

La solicitud es la siguiente:

GET /homepage.html HTTP/1.1 Host: DOC-EXAMPLE-BUCKET1.s3.eu-west-1.amazonaws.com
ejemplo : método de alias CNAME

Para utilizar este método, debe configurar su nombre de DNS como un alias de CNAME para bucket-name.s3.us-east-1.amazonaws.com. Para obtener más información, consulte Personalización de URL de Amazon S3 con registros CNAME.

En este ejemplo se utiliza lo siguiente:

  • Nombre del bucke ‐ example.com

  • Nombre de clave: homepage.html

El URL es el siguiente:

http://www.example.com/homepage.html

El ejemplo es el siguiente:

GET /homepage.html HTTP/1.1 Host: www.example.com

Personalización de URL de Amazon S3 con registros CNAME

Según sus necesidades, es posible que no desee que s3.region-code.amazonaws.com aparezca en su sitio web o servicio. Por ejemplo, si aloja las imágenes del sitio web en Amazon S3, puede que prefiera http://images.example.com/ en lugar de http://images.example.com.s3.us-east-1.amazonaws.com/. Cualquier bucket con un nombre compatible con el DNS se puede denominar de la siguiente manera: http://BucketName.s3.Region.amazonaws.com/[Filename], por ejemplo, http://images.example.com.s3.us-east-1.amazonaws.com/mydog.jpg. Al utilizar CNAME, puede asignar images.example.com a un nombre de host de Amazon S3 para que la URL anterior pueda convertirse en http://images.example.com/mydog.jpg.

El nombre del bucket debe ser el mismo que el CNAME. Por ejemplo, si crea un CNAME para asignar images.example.com a images.example.com.s3.us-east-1.amazonaws.com, http://images.example.com/filename y http://images.example.com.s3.us-east-1.amazonaws.com/filename serán iguales.

El registro de DNS de CNAME debe usar el nombre de host de tipo alojamiento virtual adecuado como el alias de su nombre de dominio. Por ejemplo, si el nombre del bucket y el nombre de dominio son images.example.com y el bucket está en la región EE. UU. Este (Norte de Virginia), el registro CNAME debe tomar como alias images.example.com.s3.us-east-1.amazonaws.com.

images.example.com CNAME images.example.com.s3.us-east-1.amazonaws.com.

Amazon S3 utiliza el nombre de host para determinar el nombre del bucket. Por tanto, el nombre del bucket debe ser el mismo que el CNAME. Por ejemplo, suponga que configuró www.example.com como un CNAME para www.example.com.s3.us-east-1.amazonaws.com. Cuando accede a http://www.example.com, Amazon S3 recibe una solicitud similar a la siguiente:

GET / HTTP/1.1 Host: www.example.com Date: date Authorization: signatureValue

Amazon S3 solo ve el nombre de host original www.example.com y desconoce el mapeo de CNAME que se utiliza para resolver la solicitud.

Se puede utilizar cualquier punto de conexión de Amazon S3 en un alias CNAME. Por ejemplo, se puede utilizar s3.ap-southeast-1.amazonaws.com en los alias CNAME. Para obtener más información acerca de los puntos de enlace, consulte Puntos de enlace de solicitud. Para crear un sitio web estático mediante un dominio personalizado, consulte Tutorial: Configuración de un sitio web estático mediante un dominio personalizado registrado con Route 53.

importante

Cuando utilice URL personalizadas con CNAME, tendrá que asegurarse de que existe un bucket coincidente para cualquier registro CNAME o alias que configure. Por ejemplo, si crea entradas DNS para www.example.com y login.example.com para publicar contenido web mediante S3, tendrá que crear los buckets www.example.com y login.example.com.

Cuando se configura un CNAME o registros de alias que apuntan a un punto de conexión de S3 sin un bucket coincidente, cualquier usuario de AWS puede crear ese bucket y publicar contenido con el alias configurado, aunque la propiedad no sea la misma.

Por el mismo motivo, le recomendamos que cambie o elimine el CNAME o el alias correspondiente cuando elimine un bucket.

Cómo asociar un nombre de host a un bucket de Amazon S3

Para asociar un nombre de host a un bucket de Amazon S3 mediante un alias CNAME
  1. Seleccione un nombre de host que pertenezca a un dominio que usted controle.

    En este ejemplo se utiliza el subdominio images del dominio example.com.

  2. Cree un bucket que coincida con el nombre de host.

    En este ejemplo, los nombres de host y de bucket son images.example.com. El nombre del bucket debe coincidir exactamente con el nombre de host.

  3. Cree un registro DNS de CNAME que defina el nombre de host como un alias para el bucket de Amazon S3.

    Por ejemplo:

    images.example.com CNAME images.example.com.s3.us-west-2.amazonaws.com

    importante

    Por motivos de direccionamiento de solicitudes, el registro de CNAME se debe definir exactamente como se muestra en el ejemplo anterior. De lo contrario, puede parecer que funciona correctamente, pero al final puede provocar un comportamiento impredecible.

    El procedimiento para la configuración de los registros DNS de CNAME depende de su servidor de DNS o proveedor de DNS. Para obtener información específica, consulte la documentación de su servidor o contáctese con su proveedor.

Limitaciones

La compatibilidad con SOAP por HTTP está obsoleta, pero SOAP aún se encuentra disponible con HTTPS. Las características nuevas de Amazon S3 no son compatibles con SOAP. En vez de usar SOAP, le recomendamos que utilice la API de REST o los SDK de AWS.

Compatibilidad con versiones anteriores

Las siguientes secciones abarcan varios aspectos de la compatibilidad con versiones anteriores de Amazon S3 que se relacionan con las solicitudes de URL de tipo ruta y de host virtual.

Puntos de conexión heredados

Algunas regiones admiten puntos de enlace heredados. Es posible que vea estos puntos de enlace en los registros de acceso al servidor o en los registros de AWS CloudTrail. Para obtener más información, consulte la siguiente información. Para obtener una lista completa de las regiones y los puntos de conexión de Amazon S3, consulte Puntos de conexión y cuotas de Amazon S3 en la Referencia general de Amazon Web Services.

importante

Aunque es posible que vea los puntos de enlace heredados en los registros, es recomendable que utilice siempre la sintaxis estándar de puntos de enlace para obtener acceso a los buckets.

Las URL de tipo host virtual de Amazon S3 utilizan el siguiente formato:

https://bucket-name.s3.region-code.amazonaws.com/key-name

En Amazon S3, las URL de tipo ruta utilizan el siguiente formato:

https://s3.region-code.amazonaws.com/bucket-name/key-name

Región de S3

Algunas regiones antiguas de Amazon S3 admiten puntos de conexión que contienen un guion (-) entre s3 y el código de región (por ejemplo, s3‐us-west-2), en lugar de un punto (por ejemplo, s3.us-west-2). Si el bucket se encuentra en una de estas regiones, es posible que vea el siguiente formato de punto de enlace en los registros de acceso al servidor o en los registros de CloudTrail:

https://bucket-name.s3-region-code.amazonaws.com

En este ejemplo, el nombre del bucket es DOC-EXAMPLE-BUCKET1 y la región es Oeste de EE. UU. (Oregón):

https://DOC-EXAMPLE-BUCKET1.s3-us-west-2.amazonaws.com

Punto de conexión global heredado

En algunas regiones, puede utilizar el punto de conexión global heredado para crear solicitudes que no especifiquen un punto de conexión específico de la región. El punto de enlace global heredado es el siguiente:

bucket-name.s3.amazonaws.com

En los registros de acceso al servidor o en los registros de CloudTrail, es posible que vea solicitudes que utilizan el punto de enlace global heredado. En este ejemplo, el nombre del bucket es DOC-EXAMPLE-BUCKET1 y el punto de conexión global heredado es:

https://DOC-EXAMPLE-BUCKET1.s3.amazonaws.com
Solicitudes de tipo host virtual para Este de EE. UU. (Norte de Virginia)

Las solicitudes realizadas con el punto de conexión global heredado se envían a la región Este de EE. UU. (Norte de Virginia) de forma predeterminada. Por lo tanto, el punto de enlace global heredado se utiliza a veces como sustituto del punto de enlace regional para EE. UU. Este (Norte de Virginia). Si crea un bucket en EE. UU. Este (Norte de Virginia) y utiliza el punto de enlace, Amazon S3 envía su solicitud a esta región de forma predeterminada.

Solicitudes de tipo host virtual para otras regiones

El punto de conexión global heredado también se utiliza para solicitudes de tipo host virtual en otras regiones admitidas. Si crea un bucket en una región que se lanzó antes del 20 de marzo de 2019 y utiliza el punto de conexión global heredado, Amazon S3 actualiza el registro DNS para redirigir la solicitud a la ubicación correcta, lo que podría tardar algún tiempo. Mientras tanto, se aplica la regla predeterminada y su solicitud de tipo alojamiento virtual se dirige a la región de Este de EE. UU. (Norte de Virginia). A continuación, Amazon S3 la redirecciona con el redireccionamiento temporal HTTP 307 a la región correcta.

Para los buckets de S3 de regiones lanzadas después del 20 de marzo de 2019, el servidor DNS no enruta la solicitud directamente a la Región de AWS en la que se encuentra el bucket. En su lugar, devuelve un error de solicitud errónea HTTP 400. Para obtener más información, consulte Realizar solicitudes.

Solicitudes de tipo ruta

Para la región Este de EE. UU. (Norte de Virginia), el punto de conexión global heredado se puede utilizar para solicitudes de tipo ruta.

Para todas las demás regiones, la sintaxis de tipo ruta requiere que se use el punto de enlace específico de la región al intentar obtener acceso al bucket. Si intenta obtener acceso a un bucket con el punto de conexión global heredado u otro punto de conexión diferente al de la región donde reside el bucket, recibirá un error de redireccionamiento temporal con el código de respuesta HTTP 307 y un mensaje que indica el URI correcto para el recurso. Por ejemplo, si utiliza https://s3.amazonaws.com/bucket-name para un bucket creado en la región EE. UU. Oeste (Oregón), recibirá un error de redireccionamiento temporal HTTP 307.