

# Restricción del acceso a un origen de AWS Elemental MediaStore
<a name="private-content-restricting-access-to-mediastore"></a>

CloudFront proporciona un *control de acceso de origen* (OAC) para restringir el acceso a un origen de AWS Elemental MediaStore.

**Topics**
+ [Creación de un nuevo control de acceso de origen](#create-oac-overview-mediastore)
+ [Configuración avanzada para el control de acceso de origen](#oac-advanced-settings-mediastore)

## Creación de un nuevo control de acceso de origen
<a name="create-oac-overview-mediastore"></a>

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

**Topics**
+ [Requisitos previos](#oac-prerequisites-mediastore)
+ [Concesión del permiso de CloudFront para acceder al origen de MediaStore](#oac-permission-to-access-mediastore)
+ [Creación del control de acceso de origen](#create-oac-mediastore)

### Requisitos previos
<a name="oac-prerequisites-mediastore"></a>

Antes de crear y configurar el control de acceso de origen (OAC), debe tener una distribución de CloudFront con un origen de MediaStore. 

### Concesión del permiso de CloudFront para acceder al origen de MediaStore
<a name="oac-permission-to-access-mediastore"></a>

Antes de crear un control de acceso de origen o configurarlo en una distribución de CloudFront, asegúrese de que CloudFront tiene permiso para acceder al origen de MediaStore. Realice esta acción después de crear una distribución de CloudFront, pero antes de agregar el OAC al origen de MediaStore en la configuración de distribución. 

Utilice una política de contenedor de MediaStore para permitir que la entidad principal del servicio de CloudFront (`cloudfront.amazonaws.com`) acceda al origen. Utilice un elemento `Condition` en la política para permitir que CloudFront acceda al contenedor de MediaStore solo cuando la solicitud sea en nombre de la distribución de CloudFront que contiene el origen de MediaStore. Esta es la distribución con el origen de MediaStore al que desea agregar OAC.

A continuación, se muestran ejemplos de políticas de contenedor de MediaStore que permiten a una distribución de CloudFront acceder a un origen de MediaStore.

**Example Política de contenedor de MediaStore que permite el acceso de solo lectura a una distribución de CloudFront con OAC habilitado**    
****  

```
{
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "AllowCloudFrontServicePrincipalReadOnly",
                "Effect": "Allow",
                "Principal": {
                  "Service": "cloudfront.amazonaws.com"
                },
                "Action": [ 
                  "mediastore:GetObject"
                ],
                "Resource": "arn:aws:mediastore:us-east-1:111122223333:container/<container name>/*",
                "Condition": {
                    "StringEquals": {
                      "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/CloudFront-distribution-ID"
                    },
                    "Bool": {
                      "aws:SecureTransport": "true"
                    }
                }
            }
        ]
}
```

**Example Política de contenedor de MediaStore que permite el acceso de lectura y escritura a una distribución de CloudFront con OAC habilitado**    
****  

```
{
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "AllowCloudFrontServicePrincipalReadWrite",
                "Effect": "Allow",
                "Principal": {
                  "Service": "cloudfront.amazonaws.com"
                },
                "Action": [ 
                  "mediastore:GetObject",
                  "mediastore:PutObject"
                ],
                "Resource": "arn:aws:mediastore:us-east-1:111122223333:container/container-name/*",
                "Condition": {
                    "StringEquals": {
                      "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/CloudFront-distribution-ID"
                    },
                    "Bool": {
                      "aws:SecureTransport": "true"
                    }
                }
            }
        ]
}
```

**nota**  
Para permitir el acceso de escritura, debe configurar los **Allowed HTTP methods** (Métodos HTTP permitidos) para incluir `PUT` en la configuración de comportamiento de la distribución de CloudFront.

### Creación del control de acceso de origen
<a name="create-oac-mediastore"></a>

Para crear un OAC, puede utilizar Consola de administración de AWS, CloudFormation, AWS CLI o la API de CloudFront.

------
#### [ Console ]

**Para crear un control de acceso de origen**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de CloudFront en [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

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

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

1. 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.

   1. 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](#oac-advanced-settings-mediastore).

1. Elija MediaStore en el menú desplegable de **Origin type** (Tipo de origen).

1. 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 MediaStore en una distribución**

1. Abra la consola de CloudFront en [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

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

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

1. Seleccione **HTTPS only** (Solo HTTP) para el **Protocol** (Protocolo) de origen.

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

1. Seleccione **Save changes (Guardar cambios)**.

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

------
#### [ CloudFormation ]

Para crear un control de acceso de origen (OAC) con CloudFormation, utilice el tipo de recurso `AWS::CloudFront::OriginAccessControl`. El siguiente ejemplo se muestra la sintaxis de plantilla de 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: mediastore
      SigningBehavior: always
      SigningProtocol: sigv4
```

Para obtener más información, consulte [AWS::CloudFront::OriginAccessControl](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-originaccesscontrol.html) en la *Guía del usuario de AWS CloudFormation*.

------
#### [ 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
   ```

1. 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](#oac-advanced-settings-mediastore).

1. 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 agregar el OAC a un origen de MediaStore en una distribución de CloudFront.

**Para adjuntar un OAC a un origen de MediaStore en una distribución existente (CLI con archivo de entrada)**

1. Utilice el comando siguiente para guardar la configuración de distribución de la distribución de CloudFront a la que desea agregar el OAC. La distribución debe tener un origen de MediaStore.

   ```
   aws cloudfront get-distribution-config --id <CloudFront distribution ID> --output yaml > dist-config.yaml
   ```

1. 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.

1. 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 periféricas de CloudFront. Cuando una ubicación periférica recibe la nueva configuración, firma todas las solicitudes que envía al origen de MediaStore.

------
#### [ API ]

Para crear un control de acceso de origen con la API de CloudFront, utilice [CreateOriginAccessControl](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateOriginAccessControl.html). 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 MediaStore en una distribución, mediante una de las siguientes llamadas a la API:
+ Para asociarlo a una distribución existente, utilice [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html).
+ Para asociarlo a una nueva distribución, utilice [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html).

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 [Referencia de toda la configuración de distribución](distribution-web-values-specify.md) y la documentación de referencia de la API para el SDK de AWS u otro cliente de la API.

------

## Configuración avanzada para el control de acceso de origen
<a name="oac-advanced-settings-mediastore"></a>

La característica de control de acceso de origen de CloudFront incluye configuraciones avanzadas que están pensadas solo 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 CloudFormation). Esta configuración proporciona las siguientes opciones:

**Firmar siempre las solicitudes de origen (configuración recomendada)**  
Recomendamos utilizar esta configuración, denominada **Firmar solicitudes (recomendado)** en la consola o `always` en la API, la CLI y CloudFormation. Con esta configuración, CloudFront siempre firma todas las solicitudes que envía al origen de MediaStore.

**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 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 las solicitudes que envía al origen de MediaStore.  
Para utilizar esta configuración, el origen de MediaStore debe ser de acceso público. Si utiliza esta configuración con un origen de MediaStore que no es de acceso público, CloudFront no podrá acceder al origen. El origen de MediaStore devuelve errores a CloudFront y CloudFront pasa esos errores a los lectores. Para obtener más información, consulte el ejemplo de política de contenedores de MediaStore para el [acceso público de lectura a través de HTTPS](https://docs.aws.amazon.com/mediastore/latest/ug/policies-examples-public-https.html).

**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 CloudFormation. Utilice esta configuración cuando desee que CloudFront firme las solicitudes de origen solo cuando la solicitud del lector correspondiente no incluya un encabezado `Authorization`. Con esta configuración, CloudFront pasa el encabezado `Authorization` de la solicitud del lector cuando hay uno, pero firma la solicitud de origen (agrega su propio encabezado `Authorization`) cuando la solicitud del lector no incluye un encabezado `Authorization`.  
Para pasar el encabezado `Authorization` de la solicitud del lector, *debe* agregar el encabezado `Authorization` a una [política de caché](controlling-the-cache-key.md) para todos los comportamientos de caché que utilizan los orígenes de MediaStore asociados con este control de acceso de origen.