Transferencia desde S3 a través de CloudFront

Las transferencias desde Amazon S3 pueden usar una distribución de Amazon CloudFront como ruta de salida.

Las transferencias de datos a través de CloudFront pueden beneficiarse de costos de salida de AWS más bajos en comparación con la transferencia directa desde S3. Consulta los precios de CloudFront y los cargos de salida de S3 para obtener más detalles.

Usar CloudFront como ruta de salida no expone tus objetos de S3 al público. Consulta ¿El uso de CloudFront expone mis objetos al público?

Descripción general

Para transferir datos de S3 a través de CloudFront, debes seguir estos pasos:

Configura los permisos de IAM

Sigue las instrucciones que se indican en Configura el acceso a un receptor: Cloud Storage para otorgar los permisos de Google Cloud necesarios en el bucket de destino.

Configura el acceso a tu bucket de S3

Sigue las instrucciones que se indican en Configura el acceso a una fuente: Amazon S3 para configurar el acceso a tus datos en Amazon S3.

Crea una distribución de CloudFront para tu bucket de S3

  1. En tu cuenta de AWS, ve a CloudFront.
  2. Haz clic en Crear una distribución de CloudFront.
  3. En Dominio de origen, selecciona tu bucket de S3.
  4. La ruta de acceso de origen debe dejarse vacía.
  5. Acepta el Nombre de origen que se completó automáticamente o especifica tu propio valor.
  6. En la sección Acceso de origen, selecciona Público. Esto no hace que tu bucket sea público, sino que le indica a CloudFront que no se debe configurar ningún mecanismo de acceso.
  7. En la sección Clave de caché y solicitudes de origen, haz lo siguiente:
    1. En Política de caché, selecciona CachingDisabled. Esto evita que CloudFront almacene en caché las solicitudes y las entregue a los usuarios no autenticados.
    2. En Política de solicitud de origen, selecciona AllViewerExceptHostHeader. Esto permite que CloudFront reenvíe encabezados de autenticación a S3, de modo que el Servicio de transferencia de almacenamiento pueda acceder a tu bucket con tus credenciales de seguridad.
  8. En la sección Firewall de aplicación web (WAF), selecciona No habilitar.
  9. De manera opcional, elige una clase de precio. El Servicio de transferencia de almacenamiento selecciona grupos de trabajadores en función de la región del bucket de origen, por lo que los precios de CloudFront se aplican en esa región. Para obtener el precio más bajo, asegúrate de que el bucket de origen esté en EE.UU. o Europa, o selecciona Usar solo Norteamérica y Europa como la clase de precio en CloudFront.
  10. Haz clic en Create CloudFront distribution.

    Una vez que se haya creado correctamente, se mostrará la página de detalles de la distribución de CloudFront.

  11. Toma nota del nombre de dominio de distribución. Por ejemplo: https://dy1h2n3l4ob56.cloudfront.net Si la página de detalles no incluye el protocolo https:// delante del nombre de dominio de distribución, deberás agregarlo tú mismo cuando crees el trabajo de transferencia.

Crear un trabajo de transferencia

La transferencia a través de una distribución de CloudFront se admite en la consola de Google Cloud y la API de REST.

No incluyas información sensible, como información de identificación personal (PII) ni datos de seguridad en el nombre de tu trabajo de transferencia. Los nombres de los recursos pueden propagarse a los nombres de otros recursos de Google Cloud y pueden exponerse a sistemas internos de Google fuera de tu proyecto.

Consola de Google Cloud

Para crear una transferencia con la consola de Google Cloud , sigue las instrucciones para crear una transferencia.

Cuando se te solicite que ingreses el dominio de CloudFront, ingresa el nombre de dominio de distribución que anotaste en la sección anterior. También puedes encontrar este valor en la sección CloudFront de la consola de Amazon Web Services. Tiene el formato https://dy1h2n3l4ob56.cloudfront.net.

API de REST

Para crear una transferencia con la API de REST, sigue el ejemplo de la página Crea transferencias.

Especifica el nombre de dominio de distribución como el valor del campo transferSpec.awsS3DataSource.cloudfrontDomain:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "cloudfrontDomain": "https://dy1h2n3l4ob56.cloudfront.net",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  ...
}

Soluciona problemas

Error AuthorizationHeaderMalformed

Si encuentras un error AuthorizationHeaderMalformed que especifica una discrepancia de región (por ejemplo, the region 'Location A' is wrong; expecting 'Location B'), es probable que se deba a una configuración de CloudFront no admitida.

Este error se produce si usas una sola distribución de CloudFront para dirigir varios buckets de S3 que residen en diferentes regiones de AWS.

Para resolver este problema, asegúrate de que cada distribución de CloudFront esté delante de los buckets de S3 en una sola región de AWS. Si tienes buckets de S3 en diferentes regiones, crea una distribución de CloudFront independiente para cada región.

Preguntas frecuentes

¿El uso de CloudFront expone mis objetos al público?

No. Si seguiste los pasos de configuración de esta página, tus objetos no están expuestos al público.

  • CloudFront no tiene acceso directo a tus objetos de S3.
  • Los usuarios reciben un error permission denied si intentan acceder a tus objetos, ya sea directamente o a través de CloudFront (si tu bucket es privado).
  • El Servicio de transferencia de almacenamiento firma las solicitudes a CloudFront con las credenciales que proporcionaste en el trabajo de transferencia, lo que nos permite descargar tus objetos de forma segura como si los descargáramos directamente desde S3. Esto funciona debido al parámetro de configuración de reenvío de encabezados AllViewerExceptHostHeader.