

# Restringir o acesso a uma origem da AWS Elemental MediaStore
<a name="private-content-restricting-access-to-mediastore"></a>

O CloudFront fornece *controle de acesso à origem* (OAC) para restringir o acesso a uma origem do AWS Elemental MediaStore.

**Topics**
+ [Criar um controle de acesso à origem](#create-oac-overview-mediastore)
+ [Configurações avançadas para controle de acesso à origem](#oac-advanced-settings-mediastore)

## Criar um controle de acesso à origem
<a name="create-oac-overview-mediastore"></a>

Conclua as etapas descritas nos tópicos a seguir para configurar um novo controle de acesso à origem no CloudFront.

**Topics**
+ [Pré-requisitos](#oac-prerequisites-mediastore)
+ [Conceder permissão ao CloudFront para acessar a origem do MediaStore](#oac-permission-to-access-mediastore)
+ [Criar o controle de acesso à origem](#create-oac-mediastore)

### Pré-requisitos
<a name="oac-prerequisites-mediastore"></a>

Antes de criar e configurar o controle de acesso à origem, você deve ter uma distribuição do CloudFront com uma origem do MediaStore. 

### Conceder permissão ao CloudFront para acessar a origem do MediaStore
<a name="oac-permission-to-access-mediastore"></a>

Antes de criar um controle de acesso à origem ou configurá-lo em uma distribuição do CloudFront, este deve ter permissão para acessar a origem do MediaStore. Faça isso depois de criar uma distribuição do CloudFront, mas antes de adicionar o OAC à origem do MediaStore na configuração de distribuição. 

Use uma política de contêiner do MediaStore para permitir que a entidade principal do serviço do CloudFront (`cloudfront.amazonaws.com`) acesse a origem. Use um elemento `Condition` na política para permitir que o CloudFront acesse o contêiner do MediaStore somente quando a solicitação for em nome da distribuição do CloudFront que contém a origem do MediaStore. Essa é a distribuição com a origem do MediaStore à qual você deseja adicionar o OAC.

Veja a seguir exemplos de políticas de contêiner do MediaStore que permitem que uma distribuição do CloudFront acesse uma origem do MediaStore.

**Example Política de contêiner do MediaStore que permite acesso somente leitura a uma distribuição do CloudFront com 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 contêiner do MediaStore que permite acesso de leitura e gravação a uma distribuição do CloudFront com 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 o acesso de gravação, você deve configurar **Allowed HTTP methods** (Métodos HTTP permitidos) para incluir`PUT` nas configurações de comportamento de sua distribuição do CloudFront.

### Criar o controle de acesso à origem
<a name="create-oac-mediastore"></a>

Para criar um OAC, você pode usar o Console de gerenciamento da AWS, o CloudFormation, a AWS CLI ou a API do CloudFront.

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

**Como criar um controle de acesso à origem**

1. Faça login no Console de gerenciamento da AWS e abra o console do CloudFront em [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. No painel de navegação, selecione **Origem access** (Acesso à origem).

1. Selecione **Create control setting** (Criar configuração de controle).

1. No formulário **Create control setting** (Criar configuração de controle), faça o seguinte:

   1. No painel **Details** (Detalhes), insira um **Name** (Nome) e (opcionalmente) uma **Description** (Descrição) para o controle de acesso à origem.

   1. No painel **Settings** (Configurações), recomendamos que você deixe a configuração padrão (**Sign requests (recommended)** [Solicitações de assinatura (recomendado)]. Para obter mais informações, consulte [Configurações avançadas para controle de acesso à origem](#oac-advanced-settings-mediastore).

1. Selecione MediaStore no menu suspenso **Origin type** (Tipo de origem).

1. Escolha **Criar**.

   Depois que o OAC for criado, anote o **Name** (Nome). Você precisará dele no procedimento a seguir.

**Como adicionar um controle de acesso à origem a uma origem do MediaStore em uma distribuição**

1. Abra o console do CloudFront em [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Escolha uma distribuição com uma origem do MediaStore à qual você deseja adicionar o OAC e, depois, selecione a guia **Origins** (Origens).

1. Selecione a origem do MediaStore à qual você deseja adicionar o OAC e, depois, **Edit** (Editar).

1. Selecione **HTTPS only** (Somente HTTPS) para o **Protocol** (Protocolo) de sua origem.

1. No menu suspenso **Origin access control** (Controle de acesso à origem), selecione o OAC que você deseja usar.

1. Escolha **Salvar alterações**.

A distribuição começa a ser implantada em todos os locais da borda do CloudFront. Quando um local da borda recebe a nova configuração, ele assina todas as solicitações enviadas à origem de bucket do MediaStore.

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

Para criar um controle de acesso à origem (OAC) com o CloudFormation, use o tipo de recurso `AWS::CloudFront::OriginAccessControl`. O exemplo a seguir mostra a sintaxe do modelo CloudFormation no formato YAML, para criar um controle de acesso à origem.

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

Para obter mais informações, consulte [AWS::CloudFront::OriginAccessControl](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-originaccesscontrol.html) no *Guia do usuário do AWS CloudFormation*.

------
#### [ CLI ]

Para criar um controle de acesso à origem com a AWS Command Line Interface (AWS CLI), use o comando **aws cloudfront create-origin-access-control**. É possível usar um arquivo de entrada para fornecer os parâmetros de entrada do comando, em vez de especificar cada parâmetro individual como entrada na linha de comando.

**Como criar um controle de acesso à origem (CLI com arquivo de entrada)**

1. Use o comando a seguir para criar um arquivo chamado `origin-access-control.yaml`. Esse arquivo contém todos os parâmetros de entrada para o comando **create-origin-access-control**.

   ```
   aws cloudfront create-origin-access-control --generate-cli-skeleton yaml-input > origin-access-control.yaml
   ```

1. Abra o arquivo `origin-access-control.yaml` que você acabou de criar. Edite o arquivo para adicionar um nome para o OAC, uma descrição (opcional) e alterar `SigningBehavior` para `always`. Salve o arquivo.

   Para obter mais informações sobre outras configurações de OAC, consulte [Configurações avançadas para controle de acesso à origem](#oac-advanced-settings-mediastore).

1. Use o comando a seguir para criar o controle de acesso à origem usando parâmetros de entrada do arquivo `origin-access-control.yaml`.

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

   Anote o valor do `Id` na saída do comando. Você precisa dele para adicionar o OAC a uma origem do MediaStore em uma distribuição do CloudFront.

**Como anexar um OAC a uma origem do MediaStore em uma distribuição existente (CLI com arquivo de entrada)**

1. Use o comando a seguir para salvar a configuração da distribuição do CloudFront à qual você deseja adicionar o OAC. A distribuição deve ter uma origem do MediaStore.

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

1. Abra o arquivo chamado `dist-config.yaml` que você acabou de criar. Edite o arquivo fazendo as seguintes alterações:
   + No objeto `Origins`, adicione o ID do OAC ao campo chamado `OriginAccessControlId`.
   + Remova o valor do campo chamado `OriginAccessIdentity`, se houver.
   + Renomeie o campo `ETag` para `IfMatch`, mas não altere o valor do campo.

   Ao concluir, salve o arquivo.

1. Use o comando a seguir para atualizar a distribuição para usar o controle de acesso à origem.

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

A distribuição começa a ser implantada em todos os locais da borda do CloudFront. Quando um local da borda recebe a nova configuração, ele assina todas as solicitações enviadas à origem do MediaStore.

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

Para criar um controle de acesso à origem com a API do CloudFront, use [CreateOriginAccessControl](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateOriginAccessControl.html). Para obter mais informações sobre os campos especificados nessa chamada de API, consulte a documentação de referência de API do seu AWS SDK ou de outro cliente de API.

Assim que criar um controle de acesso à origem, você pode anexá-lo a uma origem do MediaStore em uma distribuição usando uma das seguintes chamadas de API:
+ Para anexá-lo a uma distribuição existente, use [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html).
+ Para anexá-lo a uma nova distribuição, use [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html).

Para as duas chamadas de API, forneça o ID de controle de acesso à origem no campo `OriginAccessControlId`, dentro de uma origem. Para mais informações sobre os outros campos especificados nessas chamadas de API, consulte [Referência de configurações de todas as distribuições](distribution-web-values-specify.md) e a documentação de referência da API do AWS SDK ou de outro cliente de API.

------

## Configurações avançadas para controle de acesso à origem
<a name="oac-advanced-settings-mediastore"></a>

O recurso de controle de acesso à origem do CloudFront inclui configurações avançadas destinadas somente a casos de uso específicos. Use as configurações recomendadas, a menos que você precise usar as configurações avançadas para uma necessidade específica.

O controle de acesso à origem contém uma configuração chamada **Signing behavior** (Comportamento de assinatura) (no console) ou `SigningBehavior` (na API, na CLI e no CloudFormation). Essa configuração fornece as seguintes opções:

**Always sign origin requests (recommended setting) [Sempre assinar solicitações de origem (configuração recomendada)]**  
Recomendamos usar essa configuração, chamada **Sign requests (recommended)** [Assinar solicitações (recomendado)] no console, ou `always` na API, na CLI e no CloudFormation. Com essa configuração, o CloudFront sempre assina todas as solicitações enviadas à origem do MediaStore.

**Never sign origin requests (Nunca assinar solicitações de origem)**  
Essa configuração é chamada **Do not sign requests** (Não assinar solicitações) no console ou `never` na API, na CLI e no CloudFormation. Use essa configuração para desativar o controle de acesso à origem para todas as origens em todas as distribuições que usam esse controle. Isso pode economizar tempo e esforço em comparação com a remoção individual de um controle de acesso à origem de todas as origens e distribuições que o usam. Com essa configuração, o CloudFront não assina nenhuma solicitação enviada à origem do MediaStore.  
Para usar essa configuração, a origem do MediaStore deve estar acessível ao público. Se você usar essa configuração com uma origem do MediaStore que não esteja acessível ao público, o CloudFront não poderá acessar a origem. A origem do MediaStore retorna erros ao CloudFront e o CloudFront transmite esses erros aos visualizadores. Para ter mais informações, consulte o exemplo de política de contêiner do MediaStore para [acesso público de leitura por HTTPS](https://docs.aws.amazon.com/mediastore/latest/ug/policies-examples-public-https.html).

**Não substituir o cabeçalho `Authorization` do visualizador (cliente)**  
Essa configuração é chamada **Do not override authorization header** (Não substituir o cabeçalho de autorização) no console ou `no-override` na API, na CLI e no CloudFormation. Use essa configuração quando quiser que o CloudFront assine solicitações de origem somente quando a solicitação do visualizador correspondente não incluir um cabeçalho `Authorization`. Com essa configuração, o CloudFront transmite o cabeçalho `Authorization` da solicitação do visualizador quando houver, mas assina a solicitação de origem (adicionando seu próprio cabeçalho `Authorization`) quando a solicitação do visualizador não inclui um cabeçalho `Authorization`.  
Para transmitir o cabeçalho `Authorization` da solicitação do visualizador, você *deve* adicionar o cabeçalho `Authorization` a uma [política de cache](controlling-the-cache-key.md) para todos os comportamentos de cache que usam origens do MediaStore associadas a esse controle de acesso à origem.