Restricción del acceso a un origen de Amazon S3 - Amazon CloudFront

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Restricción del acceso a un origen de Amazon S3

CloudFront proporciona dos formas de enviar solicitudes autenticadas a un origen de Amazon S3: control de acceso de origen (OAC) e identidad de acceso de origen (OAI). Recomendamos usar OAC porque admite:

  • Todos los buckets de Amazon S3 en todas las Regiones de AWS, incluidas las regiones opcionales lanzadas después de diciembre de 2022

  • Cifrado del servidor con AWS KMS de Amazon S3 (SSE-KMS)

  • Solicitudes dinámicas (PUT y DELETE) en Amazon S3

La identidad de acceso de origen (OAI) no funciona en los escenarios de la lista anterior o requiere soluciones adicionales en esos escenarios. En los temas siguientes se describe cómo utilizar el control de acceso de origen (OAC) con un origen de Amazon S3. Para obtener información sobre cómo migrar de la identidad de acceso de origen (OAI) al control de acceso de origen (OAC), consulte Migración de la identidad de acceso de origen (OAI) al control de acceso de origen (OAC).

Notas
  • Si utiliza CloudFront OAC con orígenes de bucket de Amazon S3, debe establecer Amazon S3 Object Ownership como Bucket owner forced, que es el valor predeterminado para los nuevos buckets de Amazon S3. Si necesita ACL, utilice la configuración que prefiera el propietario del bucket para mantener el control de los objetos que se cargan a través de ellas. CloudFront

  • Si su origen es un bucket de Amazon S3 configurado como punto de enlace de un sitio web, debe configurarlo CloudFront como un origen personalizado. Esto significa que no puede utilizar OAC (nila OAI). OAC no admite la redirección de origen mediante Lambda @Edge.

Temas

Creación de un nuevo control de acceso de origen

Complete los pasos que se describen en los siguientes temas para configurar un nuevo control de acceso a Origin en. CloudFront

Requisitos previos

Antes de crear y configurar el control de acceso de origen (OAC), debe tener una CloudFront distribución con un origen de bucket de Amazon S3. Este origen debe ser un bucket S3 normal, no un bucket configurado como punto de conexión de sitio web. Para obtener más información sobre cómo configurar una CloudFront distribución con un origen de bucket de S3, consulteCómo empezar con una distribución sencilla CloudFront .

nota

Cuando utiliza OAC para proteger el origen de su bucket de S3, la comunicación entre Amazon S3 CloudFront y Amazon S3 se realiza siempre a través de HTTPS, independientemente de su configuración específica.

Concesión del permiso de control de acceso de origen para acceder al bucket de S3

Antes de crear un control de acceso de origen (OAC) o configurarlo en una CloudFront distribución, asegúrese de que el OAC tenga permiso para acceder al origen del bucket de S3. Hágalo después de crear una CloudFront distribución, pero antes de añadir el OAC al origen de S3 en la configuración de distribución.

Para conceder permiso a la OAC para acceder al bucket de S3, utilice una política de bucket de S3 que permita que el principal de CloudFront servicio (cloudfront.amazonaws.com) acceda al bucket. Usa un Condition elemento de la política que permita acceder CloudFront al depósito solo cuando la solicitud sea en nombre de la CloudFront distribución que contiene el origen de S3.

Para obtener información sobre cómo agregar o modificar una política de bucket, consulte Agregar una política de bucket mediante la consola de Amazon S3 en la Guía del usuario de Amazon S3.

Los siguientes son ejemplos de políticas de bucket de S3 que permiten a un CloudFront OAC acceder a un origen de S3.

ejemplo Política de bucket de S3 que permite el acceso de solo lectura a un OAC CloudFront
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<S3 bucket name>/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<Cuenta de AWS ID>:distribution/<CloudFront distribution ID>" } } } }
ejemplo Política de bucket de S3 que permite el acceso de lectura y escritura a un OAC CloudFront
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowCloudFrontServicePrincipalReadWrite", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::<S3 bucket name>/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<Cuenta de AWS ID>:distribution/<CloudFront distribution ID>" } } } }

SSE-KMS

Si los objetos del origen de bucket de S3 están cifrados mediante el cifrado en el servidor con AWS Key Management Service (SSE-KMS), debe asegurarse de que el OAC tiene permiso para utilizar la clave AWS KMS. Para dar permiso al OAC para utilizar la clave KMS, agregue una declaración a la política de claves de KMS. Para obtener información sobre cómo modificar una política de claves, consulte Modificación de una política de claves en la Guía del desarrollador de AWS Key Management Service.

En el siguiente ejemplo se muestra una declaración de política de claves de KMS que permite al OAC utilizar la clave de KMS.

ejemplo Declaración de política clave de KMS que permite a un CloudFront OAC acceder a una clave de KMS para el SSE-KMS
{ "Sid": "AllowCloudFrontServicePrincipalSSE-KMS", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<Cuenta de AWS ID>:root", "Service": "cloudfront.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<Cuenta de AWS ID>:distribution/<CloudFront distribution ID>" } } }

Creación de un control de acceso de origen

Para crear un control de acceso de origen (OAC), puede usar laAWS Management Console,AWS CloudFormation, o la APIAWS CLI. CloudFront

Console
Para crear un control de acceso de origen
  1. Inicie sesión en AWS Management Console y abra la CloudFront consola enhttps://console.aws.amazon.com/cloudfront/v4/home.

  2. En el panel de navegación, elija Origin access (Acceso de origen).

  3. Elija Create control setting (Crear configuración de control).

  4. En el formulario Create control setting (Crear configuración de control), haga lo siguiente:

    1. En el panel Details (Detalles), ingrese un valor para Name (Nombre) y (opcionalmente) para Description (Descripción) para el control de acceso de origen.

    2. En el panel Settings (Configuración), le recomendamos que deje la configuración predeterminada Sign requests (recommended) (Firmar solicitudes [recomendado]). Para obtener más información, consulte Configuración avanzada para el control de acceso de origen.

  5. Elija S3 en el menú desplegable de Origin type (Tipo de origen).

  6. Seleccione Crear.

    Una vez creado el OAC, anote el valor de Name (Nombre). Lo necesita en el siguiente procedimiento.

Para agregar un control de acceso de origen a un origen de S3 en una distribución
  1. Abre la CloudFront consola enhttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Elija una distribución con un origen de S3 a la que desee agregar el OAC y, a continuación, elija la pestaña Origins (Orígenes).

  3. Seleccione el origen de S3 al que desea agregar el OAC y, a continuación, elija Edit (Editar).

  4. Para acceder a Origin, selecciona la configuración de control de acceso de Origin (recomendada).

  5. En el menú desplegable Origin access control (Control de acceso de origen), elija el OAC que desee utilizar.

  6. Elija Guardar cambios.

La distribución comienza a desplegarse en todas las ubicaciones CloudFront periféricas. Cuando una ubicación periférica recibe la nueva configuración, firma todas las solicitudes que envía al origen de bucket de S3.

CloudFormation

Para crear un control de acceso de origen (OAC) con AWS CloudFormation, utilice el tipo de recurso AWS::CloudFront::OriginAccessControl. El siguiente ejemplo se muestra la sintaxis de plantilla de AWS CloudFormation, en formato YAML, para crear un control de acceso de origen.

Type: AWS::CloudFront::OriginAccessControl Properties: OriginAccessControlConfig: Description: An optional description for the origin access control Name: ExampleOAC OriginAccessControlOriginType: s3 SigningBehavior: always SigningProtocol: sigv4

Para obtener más información, consulte AWS::CloudFront::OriginAccessControl en la Guía AWS CloudFormation del usuario.

CLI

Para crear un control de acceso de origen con la AWS Command Line Interface (AWS CLI), utilice el comando aws cloudfront create-origin-access-control. Puede utilizar un archivo de entrada para proporcionar los parámetros de entrada del comando, en lugar de especificar cada parámetro individual como entrada de la línea de comandos.

Para crear un control de acceso de origen (CLI con archivo de entrada)
  1. Utilice el siguiente comando para crear un archivo llamado origin-access-control.yaml. Este archivo contiene todos los parámetros de entrada para el comando create-origin-access-control.

    aws cloudfront create-origin-access-control --generate-cli-skeleton yaml-input > origin-access-control.yaml
  2. Abra el archivo origin-access-control.yaml que acaba de crear. Edite el archivo para agregar un nombre para el OAC, una descripción (opcional) y cambie SigningBehavior por always. A continuación, guarde el archivo.

    Para obtener información sobre otras configuraciones de OAC, consulte Configuración avanzada para el control de acceso de origen.

  3. Utilice el siguiente comando para crear el control de acceso de origen mediante los parámetros de entrada del archivo origin-access-control.yaml.

    aws cloudfront create-origin-access-control --cli-input-yaml file://origin-access-control.yaml

    Anote el valor de Id en la salida del comando. Lo necesita para añadir el OAC al origen de un bucket de S3 en una CloudFront distribución.

Para adjuntar un OAC a un origen de bucket de S3 en una distribución existente (CLI con archivo de entrada)
  1. Use el siguiente comando para guardar la configuración de CloudFront distribución a la que desea agregar el OAC. La distribución debe tener un origen de bucket de S3.

    aws cloudfront get-distribution-config --id <CloudFront distribution ID> --output yaml > dist-config.yaml
  2. Abra el archivo llamado dist-config.yaml que acaba de crear. Edite el archivo y realice los siguientes cambios:

    • En el objeto Origins, agregue el ID de OAC al campo que se llama OriginAccessControlId.

    • Elimine el valor del campo que se llama OriginAccessIdentity, si existe.

    • Cambie el nombre del campo ETag a IfMatch, pero no cambie el valor del campo.

    Guarde el archivo cuando haya terminado.

  3. Utilice el siguiente comando para actualizar la distribución y utilizar el control de acceso de origen.

    aws cloudfront update-distribution --id <CloudFront distribution ID> --cli-input-yaml file://dist-config.yaml

La distribución comienza a implementarse en todas las ubicaciones de CloudFront borde. Cuando una ubicación periférica recibe la nueva configuración, firma todas las solicitudes que envía al origen de bucket de S3.

API

Para crear un control de acceso de origen con la CloudFront API, utilice CreateOriginAccessControl. Para obtener más información sobre los campos que especifique en esta llamada a la API, consulte la documentación de referencia de la API para el SDK de AWS u otro cliente de la API.

Después de crear un control de acceso de origen, puede adjuntarlo a un origen de bucket de S3 en una distribución, mediante una de las siguientes llamadas a la API:

Para estas dos llamadas a la API, proporcione el ID de control de acceso de origen en el campo OriginAccessControlId, dentro de un origen. Para obtener más información sobre los otros campos que especifique en estas llamadas a la API, consulte Valores que deben especificarse al crear o actualizar una distribución y la documentación de referencia de la API para el SDK de AWS u otro cliente de la API.

Migración de la identidad de acceso de origen (OAI) al control de acceso de origen (OAC)

Para migrar de una identidad de acceso de origen (OAI) heredada a un control de acceso de origen (OAC), actualice primero el origen del bucket de S3 para permitir que tanto la OAI como el OAC accedan al contenido del bucket. Esto garantiza que CloudFront nunca pierda el acceso al depósito durante la transición. Para permitir que tanto OAI como OAC accedan a un bucket de S3, actualice la política de buckets para incluir dos declaraciones, una para cada tipo de entidad principal.

El siguiente ejemplo de política de buckets de S3 permite que tanto una OAI como un OAC accedan a un origen de S3.

ejemplo Política de buckets de S3 que permite el acceso de solo lectura a una OAI y a un OAC
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<S3 bucket name>/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<Cuenta de AWS ID>:distribution/<CloudFront distribution ID>" } } }, { "Sid": "AllowLegacyOAIReadOnly", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <origin access identity ID>" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<S3 bucket name>/*" } ] }

Después de actualizar la política de buckets del origen de S3 para permitir el acceso tanto a OAI como a OAC, puede actualizar la configuración de la distribución para utilizar OAC en lugar de OAI. Para obtener más información, consulte Creación de un nuevo control de acceso de origen.

Una vez implementada por completo la distribución, puede eliminar la declaración de la política de buckets que permite el acceso a la OAI. Para obtener más información, consulte Concesión del permiso de control de acceso de origen para acceder al bucket de S3.

Configuración avanzada para el control de acceso de origen

La función de control de acceso de CloudFront Origin incluye ajustes avanzados que están pensados únicamente para casos de uso específicos. Utilice la configuración recomendada a menos que tenga una necesidad específica de la configuración avanzada.

El control de acceso de origen contiene una configuración denominada Signing behavior (Comportamiento de firma) (en la consola) o SigningBehavior (en la API, CLI y AWS CloudFormation). Esta configuración proporciona las siguientes opciones:

Firmar siempre las solicitudes de origen (configuración recomendada)

Recomendamos utilizar esta configuración, denominada Sign requests (recommended) (Firmar solicitudes [recomendado]) en la consola o always en la API, la CLI y AWS CloudFormation. Con esta configuración, CloudFront siempre firma todas las solicitudes que envía al depósito de origen de S3.

Nunca firmar solicitudes de origen

Esta configuración se denomina Do not sign requests (No firmar solicitudes) en la consola o never en la API, la CLI y AWS CloudFormation. Utilice esta configuración para desactivar el control de acceso de origen para todos los orígenes en todas las distribuciones que utilizan este control de acceso de origen. Esto puede ahorrar tiempo y esfuerzo en comparación con la eliminación de un control de acceso de origen de todos los orígenes y distribuciones que lo utilizan, uno por uno. Con esta configuración, CloudFront no firma ninguna solicitud que envíe al origen del bucket de S3.

aviso

Para utilizar esta configuración, el origen de bucket de S3 debe ser de acceso público. Si utilizas esta configuración con un origen de bucket de S3 que no es de acceso público, CloudFront no podrás acceder al origen. El origen del bucket de S3 devuelve los errores CloudFront y los CloudFront transmite a los espectadores.

No anular el encabezado Authorization del lector (cliente)

Esta configuración se denomina Do not override authorization header (No anular el encabezado authorization en la consola o no-override en la API, la CLI y AWS CloudFormation. Usa esta configuración cuando desees CloudFront firmar las solicitudes de origen solo cuando la solicitud del espectador correspondiente no incluya un Authorization encabezado. Con esta configuración, CloudFront transfiere el Authorization encabezado de la solicitud del espectador cuando hay una, pero firma la solicitud de origen (añadiendo su propio Authorization encabezado) cuando la solicitud del espectador no incluye ningún Authorization encabezado.

aviso

Para pasar el encabezado Authorization de la solicitud del lector, debe agregar el encabezado Authorization a una política de caché para todos los comportamientos de caché que utilizan los orígenes de buckets de S3 asociados con este control de acceso de origen.

Uso de una identidad de acceso de origen (heredado, no recomendado)

CloudFront La identidad de acceso de origen (OAI) ofrece una funcionalidad similar a la del control de acceso de origen (OAC), pero no funciona en todos los escenarios. Por eso recomendamos usar OAC en su lugar. En concreto, OAI no admite:

  • Buckets de Amazon S3 en todas las Regiones de AWS, incluidas las regiones opcionales

  • Cifrado del servidor con AWS KMS de Amazon S3 (SSE-KMS)

  • Solicitudes dinámicas (PUT, POST o DELETE) en Amazon S3

  • Nuevos lanzamientos de Regiones de AWS después de diciembre de 2022

Para obtener información sobre cómo migrar de OAI a OAC, consulte Migración de la identidad de acceso de origen (OAI) al control de acceso de origen (OAC).

Al crear una OAI o añadir una a una distribución con la CloudFront consola, puede actualizar automáticamente la política de buckets de Amazon S3 para dar permiso a la OAI para acceder a su bucket. Como alternativa, puede elegir crear o actualizar manualmente la política del bucket. Sea cual sea el método que utilice, debe revisar los permisos para asegurarse de que:

  • Tu CloudFront OAI puede acceder a los archivos del depósito en nombre de los espectadores que los soliciten. CloudFront

  • Los espectadores no pueden usar las URL de Amazon S3 para acceder a tus archivos desde fuera de CloudFront.

importante

Si se configura CloudFront para aceptar y reenviar todos los métodos HTTP CloudFront compatibles, asegúrese de conceder a su CloudFront OAI los permisos necesarios. Por ejemplo, si te configuras CloudFront para aceptar y reenviar solicitudes que utilizan DELETE este método, configura tu política de bucket para que gestione DELETE las solicitudes de forma adecuada, de modo que los espectadores puedan eliminar solo los archivos que tú desees que eliminen.

Uso de las políticas de bucket de Amazon S3

Puede conceder a una CloudFront OAI acceso a los archivos de un bucket de Amazon S3 creando o actualizando la política de bucket de las siguientes maneras:

  • Mediante la pestaña Permissions (Permisos) del bucket de Amazon S3 en la consola de Amazon S3.

  • PutBucketPolicyUtilización en la API de Amazon S3.

  • Mediante la consola de CloudFront. Cuando añada una OAI a su configuración de origen en la CloudFront consola, puede seleccionar Sí, actualizar la política de bucket para solicitar que CloudFront actualice la política de bucket en su nombre.

Si actualiza la política del bucket manualmente, asegúrese de:

  • Especificar la OAI correcta como Principal en la política.

  • Conceder a la OAI los permisos que necesita para obtener acceso a los objetos en nombre de los lectores.

Para obtener más información, consulte las siguientes secciones.

Cómo especificar una OAI como Principal en una política de bucket

Para especificar una OAI como Principal en una política de bucket de Amazon S3, utilice el nombre de recurso de Amazon (ARN) de la OAI, que incluye el ID de la OAI. Por ejemplo:

"Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <origin access identity ID>" }

Busca el ID de la OAI en la CloudFront consola, en Seguridad, Acceso al origen e Identidades (antiguo). Como alternativa, úsalo ListCloudFrontOriginAccessIdentitiesen la CloudFront API.

Conceda permisos a una OAI

Para conceder a la OAI permisos para acceder a los objetos del bucket de Amazon S3, utilice acciones de la política relacionadas con operaciones específicas de la API de Amazon S3. Por ejemplo, la acción s3:GetObject permite a la OAI leer objetos del bucket. Para obtener más información, consulte los ejemplos de la siguiente sección o consulte acciones de Amazon S3 en la Guía del usuario de Amazon Simple Storage Service.

Ejemplos de políticas de bucket de Amazon S3

Los siguientes ejemplos muestran las políticas de bucket de Amazon S3 que permiten a CloudFront OAI acceder a un bucket de S3.

Busque el ID de la OAI en la CloudFront consola, en Seguridad, Acceso al origen e Identidades (antiguo). Como alternativa, úsalo ListCloudFrontOriginAccessIdentitiesen la CloudFront API.

ejemplo Política de bucket de Amazon S3 que concede acceso de lectura a la OAI

El siguiente ejemplo permite a la OAI leer objetos del bucket especificado (s3:GetObject).

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <origin access identity ID>" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<S3 bucket name>/*" } ] }
ejemplo Política de bucket de Amazon S3 que concede acceso de lectura y escritura a la OAI

El siguiente ejemplo permite a la OAI leer y escribir objetos en el bucket (s3:GetObject y s3:PutObject) especificado. Esto permite a los espectadores subir archivos a su bucket de Amazon S3 de forma automática CloudFront.

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <origin access identity ID>" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::<S3 bucket name>/*" } ] }

Uso de ACL de objetos de Amazon S3 (no recomendado)

importante

Recomendamos el uso de las políticas de bucket de Amazon S3 para conceder a una OAI acceso a un bucket de S3. Puede utilizar listas de control de acceso (ACL) como se describe en esta sección, pero no lo recomendamos.

Amazon S3 recomienda configurar Propiedad de objetos de S3 como propietario del bucket forzado, lo que significa que las ACL están desactivadas para el bucket y los objetos que contiene. Al aplicar esta configuración para Propiedad de objetos, debe utilizar políticas de bucket para dar acceso a la OAI (consulte la sección anterior).

La sección siguiente es solo para casos de uso heredados que requieren ACL.

Puede conceder a una CloudFront OAI acceso a los archivos de un bucket de Amazon S3 creando o actualizando la ACL del archivo de las siguientes maneras:

Cuando concede acceso a una OAI mediante una ACL, debe especificar la OAI mediante el ID de usuario canónico de Amazon S3. En la CloudFront consola, puede encontrar este ID en Seguridad, Origen, Acceso e Identidades (antiguo). Si utilizas la CloudFront API, usa el valor del S3CanonicalUserId elemento que se devolvió cuando creaste la OAI o llama a ListCloudFrontOriginAccessIdentitiesla CloudFront API.

Las regiones de Amazon S3 más recientes requieren que utilice Signature Version 4 para solicitudes autenticadas. (Para ver las versiones de firma admitidas en cada región de Amazon S3, consulte Puntos de conexión y cuotas de Amazon Simple Storage Service en la Referencia general de AWS). Si utiliza una identidad de acceso de origen y si su bucket se encuentra en una de las regiones que requiere firma versión 4, tenga en cuenta lo siguiente:

  • Las solicitudes DELETE, GET, HEAD, OPTIONS y PATCH se admiten sin cualificación.

  • Las solicitudes POST no están admitidas.