Especificar os assinantes que podem criar URLs e cookies assinados - Amazon CloudFront

Especificar os assinantes que podem criar URLs e cookies assinados

Para criar signed URLs ou cookies, é necessário um assinante. Um assinante é um grupo de chaves confiável criado no CloudFront ou uma conta da AWS que contenha um par de chaves do CloudFront. Recomendamos que você use grupos de chaves confiáveis com signed URLs e cookies. Para obter mais informações, consulte Escolher entre grupos de chaves confiáveis (recomendado) e Contas da AWS.

O assinante tem duas finalidades:

  • Assim que você adicionar o assinante à sua distribuição, o CloudFront começará a exigir que os visualizadores usem signed URLs ou signed cookies para acessar seus arquivos.

  • Ao criar signed URLs ou cookies, você usa a chave privada do par de chaves do assinante para assinar uma parte do URL ou do cookie. Quando alguém solicita um arquivo restrito, o CloudFront compara a assinatura no URL ou cookie com o URL ou cookie não assinado, para verificar se ele não foi adulterado. O CloudFront também verifica se o URL ou cookie é válido, ou seja, se a data e hora de expiração não passou, por exemplo.

Ao especificar um assinante, você também especifica indiretamente os arquivos que exigem signed URLs ou cookies adicionando o assinante a um comportamento de cache. Caso sua distribuição tenha somente um comportamento de cache, os visualizadores deverão usar signed URLs ou cookies para acessar qualquer arquivo na distribuição. Se criar vários comportamentos de cache e adicionar assinantes a alguns deles, mas não a outros, você poderá solicitar que os visualizadores usem signed URLs ou cookies para acessar alguns arquivos e não outros.

Para especificar os assinantes (as chaves privadas) com permissão para criar signed URLs ou signed cookies e adicionar os assinantes à sua distribuição do CloudFront, execute as seguintes tarefas:

  1. Decida se pretende utilizar um grupo de chaves confiável ou uma Conta da AWS como assinante. Recomendamos o uso de um grupo de chaves confiável. Para obter mais informações, consulte Escolher entre grupos de chaves confiáveis (recomendado) e Contas da AWS.

  2. Para o assinante que você escolheu na etapa 1, crie um par de chaves pública/privada. Para obter mais informações, consulte Criar pares de chaves para os assinantes.

  3. Se você estiver usando .NET ou Java para criar signed URLs ou cookies, reformate a chave privada. Para obter mais informações, consulte Reformatar a chave privada (somente .NET e Java).

  4. Na distribuição para a qual você está criando signed URLs ou cookies, especifique o assinante. Para ter mais informações, consulte Adicionar um assinante a uma distribuição.

Escolher entre grupos de chaves confiáveis (recomendado) e Contas da AWS

Para usar signed URLs ou cookies, é necessário um assinante. Um assinante é um grupo de chaves confiável criado no CloudFront ou uma Conta da AWS que contenha um par de chaves do CloudFront. Recomendamos que você use grupos de chaves confiáveis, pelos seguintes motivos:

  • Com os grupos de chaves do CloudFront, não é necessário usar o usuário root da conta da AWS para gerenciar as chaves públicas para URLs assinados e cookies do CloudFront. As práticas recomendadas da AWS aconselham não usar o usuário root, exceto quando estritamente necessário.

  • Com os grupos de chaves do CloudFront, é possível gerenciar chaves públicas, grupos de chaves e assinantes confiáveis usando a API do CloudFront. É possível usar a API para automatizar a criação de chaves e a alternância de chaves. Quando você usa o usuário-raiz da AWS, é necessário usar o AWS Management Console para gerenciar pares de chaves do CloudFront, por isso o processo não pode ser automatizado.

  • Como você pode gerenciar grupos de chaves com a API do CloudFront, também é possível usar as políticas de permissões do AWS Identity and Access Management (IAM) para limitar as ações permitidas aos diferentes usuários. Por exemplo, é possível permitir que os usuários façam upload de chaves públicas, mas não excluí-las. Ou, é possível permitir que os usuários excluam chaves públicas, mas somente quando determinadas condições forem atendidas, como usar autenticação multifator, enviar a solicitação de uma determinada rede ou enviar a solicitação dentro de um determinado intervalo de data e hora.

  • Com grupos de chaves do CloudFront, é possível associar um número maior de chaves públicas à sua distribuição do CloudFront, proporcionando mais flexibilidade na forma como você usa e gerencia as chaves públicas. Por padrão, é possível associar até quatro grupos de chaves a uma única distribuição e ter até cinco chaves públicas em um grupo de chaves.

    Ao usar a conta da AWS do usuário-raiz para gerenciar pares de chaves do CloudFront, você só poderá ter até dois pares de chaves ativos do CloudFront por conta da AWS.

Criar pares de chaves para os assinantes

Cada assinante usado para criar signed URLs ou signed cookies do CloudFront deve ter um par de chaves pública/privada. O assinante usa sua chave privada para assinar o URL ou os cookies e o CloudFront usa a chave pública para verificar a assinatura.

A maneira como você cria um par de chaves depende se você usa um grupo de chaves confiável como assinante (recomendado) ou um par de chaves do CloudFront. Para obter mais informações, consulte as seções a seguir. O par de chaves que criar deve atender aos seguintes requisitos:

  • Deve ser um par de chaves SSH-2 RSA.

  • Ele deve estar no formato PEM codificado em base64.

  • Deve ser um par de chaves de 2048 bits.

Para ajudar a proteger sias aplicações, recomendamos que você alterne os pares de chaves periodicamente. Para obter mais informações, consulte Alternar pares de chaves.

Criar um par de chaves para um grupo de chaves confiável (recomendado)

Para criar um par de chaves para um grupo de chaves confiável, execute as seguintes etapas:

  1. Crie o par de chaves pública/privada.

  2. Faça upload da chave pública no CloudFront.

  3. Adicione a chave pública a um grupo de chaves do CloudFront.

Para obter mais informações, consulte os procedimentos a seguir.

Para criar um par de chaves
nota

As etapas a seguir usam OpenSSL como um exemplo de uma maneira de criar um par de chaves. Há várias outras maneiras de criar um par de chaves RSA.

  1. O comando de exemplo a seguir usa OpenSSL para gerar um par de chaves RSA com um tamanho de 2.048 bits e salvar no arquivo chamado private_key.pem.

    openssl genrsa -out private_key.pem 2048
  2. O arquivo resultante contém a chave pública e a privada. O comando de exemplo a seguir extrai a chave pública do arquivo chamado private_key.pem.

    openssl rsa -pubout -in private_key.pem -out public_key.pem

    Faça upload da chave pública (no arquivo public_key.pem) posteriormente, no procedimento a seguir.

Como carregar a chave pública no CloudFront
  1. Faça login no AWS Management Console e abra o console do CloudFront em https://console.aws.amazon.com/cloudfront/v4/home.

  2. No menu de navegação, escolha Public keys (Chaves públicas).

  3. Selecione Create public key (Criar chave pública).

  4. Na janela Create public key (Criar chave pública), faça o seguinte:

    1. Em Key name (Nome da chave), digite um nome para identificar a chave pública.

    2. Em Key value (Valor da chave), cole a chave pública. Se você seguiu as etapas no procedimento anterior, a chave pública está no arquivo chamado public_key.pem. Para copiar e colar o conteúdo da chave pública, é possível:

      • Usar o comando cat na linha de comando do macOS ou do Linux, da seguinte forma:

        cat public_key.pem

        Copie a saída desse comando e cole-a no campo Key value (Valor da chave).

      • Abra o arquivo public_key.pem com um editor de texto simples, como o Notepad (no Windows) ou o TextEdit (no macOS). Copie o conteúdo do arquivo e cole-o no campo Key value (Valor da chave).

    3. (Opcional) Em Comment (Comentário), adicione um comentário para descrever a chave pública.

    Quando terminar, escolha Add (Adicionar).

  5. Registre o ID da chave pública. Ele será usado posteriormente quando você criar signed URLs ou cookies como o valor do campo Key-Pair-Id.

Como adicionar a chave pública a um grupo de chaves
  1. Abra o console do CloudFront em https://console.aws.amazon.com/cloudfront/v4/home.

  2. No menu de navegação, escolha Key groups (Grupos de chaves).

  3. Escolha Add key group (Adicionar grupo de chaves).

  4. Na página Create key group (Criar grupo de chaves) faça o seguinte:

    1. Em Key group name (Nome do grupo de chaves), digite um nome para identificar o grupo de chaves.

    2. (Opcional) Em Comment (Comentário), digite um comentário para descrever o grupo de chaves.

    3. Em Public keys (Chaves públicas), selecione a chave pública a ser adicionada ao grupo de chaves e escolha Add (Adicionar). Repita essa etapa para cada chave pública que você deseja adicionar ao grupo de chaves.

  5. Escolha Create key group (Criar grupo de chaves).

  6. Registre o nome do grupo de chaves. Ele será usado posteriormente para associar o grupo de chaves a um comportamento de cache em uma distribuição do CloudFront. (Na API do CloudFront, use o ID do grupo de chaves para associar o grupo de chaves a um comportamento de cache.)

Importante

Recomendamos que você crie uma chave pública para um grupo de chaves confiável em vez de seguir estas etapas. Para a maneira recomendada de criar chaves públicas para signed URLs e signed cookies, consulte Criar um par de chaves para um grupo de chaves confiável (recomendado).

É possível criar um par de chaves do CloudFront das seguintes maneiras:

  • Crie um par de chaves no AWS Management Console e faça download da chave privada. Consulte o procedimento a seguir.

  • Crie um par de chaves RSA usando uma aplicação, como o OpenSSL, e faça upload da chave pública no AWS Management Console. Para mais informações sobre como criar um par de chaves RSA, consulte Criar um par de chaves para um grupo de chaves confiável (recomendado).

Para criar pares de chaves do CloudFront no AWS Management Console
  1. Faça login no AWS Management Console usando as credenciais do usuário-raiz da conta da AWS.

    Importante

    Usuários do IAM não podem criar pares de chaves do CloudFront. É necessário fazer login usando as credenciais de usuário-raiz para criar pares de chaves.

  2. Escolha o nome da sua conta e selecione My Security Credentials (Minhas credenciais de segurança).

  3. Escolha CloudFront key pairs (Pares de chaves do CloudFront).

  4. Confirme se você não têm mais de um par de chaves ativo. Não será possível criar um par de chaves se você já tiver dois pares de chaves ativos.

  5. Selecione Create a new key pair (Criar um par de chaves).

    nota

    Também é possível criar um par de chaves próprio e fazer upload da chave pública. Os pares de chaves do CloudFront são compatíveis com chaves de 1024, 2048 ou 4096 bits.

  6. Na caixa de diálogo Create Key Pair (Criar par de chaves), escolha Download Private Key File (Fazer download do arquivo de chave privada) e salve o arquivo no computador.

    Importante

    Salve a chave privada do par de chaves do CloudFront em um local seguro e defina as permissões no arquivo para que somente os usuários administradores desejados possam lê-lo. Se alguém obtiver sua chave privada, poderá gerar signed URLs e cookies válidos e fazer download do seu conteúdo. Não é possível gerar a chave privada novamente. Portanto, se perder ou excluí-la, crie outro par de chaves do CloudFront.

  7. Anote o ID do seu par de chaves. (No AWS Management Console, ele é chamado de ID de chave de acesso.) Ele será usado quando você criar signed URLs ou cookies.

Reformatar a chave privada (somente .NET e Java)

Se estiver usando .NET ou Java para criar signed URLs ou cookies, você não poderá usar a chave privada do par de chaves no formato padrão PEM para criar a assinatura. Em vez disso, faça o seguinte:

  • Framework .NET: converta a chave privada no formato XML usado pelo framework .NET. Várias ferramentas estão disponíveis.

  • Java: converta a chave privada no formato DER. Uma maneira de fazer isso é com o comando OpenSSL a seguir. No comando a seguir, private_key.pem é o nome do arquivo que contém a chave privada formatada em PEM e private_key.der é o nome do arquivo que contém a chave privada formatada em DER depois que o comando é executado.

    openssl pkcs8 -topk8 -nocrypt -in private_key.pem -inform PEM -out private_key.der -outform DER

    Para garantir que o codificador funcione corretamente, adicione o JAR para as APIs de criptografia Java Bouncy Castle do seu projeto e adicione o provedor do Bouncy Castle.

Adicionar um assinante a uma distribuição

Um assinante é o grupo de chaves confiável (recomendado) ou o par de chaves do CloudFront que pode criar signed URLs e signed cookies para uma distribuição. Para usar signed URLs ou signed cookies com uma distribuição do CloudFront, é necessário especificar um assinante.

Os assinantes estão associados a comportamentos de cache. Isso permite exigir signed URLs ou cookies para alguns arquivos e não para outros na mesma distribuição. Uma distribuição requer signed URLs ou cookies somente para arquivos associados aos comportamentos de cache correspondentes.

Da mesma forma, um assinante só pode assinar URLs ou cookies para arquivos associados aos comportamentos de cache correspondentes. Por exemplo, se você tiver um assinante para um comportamento de cache e um assinante diferente para outro comportamento de cache, nenhum dos dois assinantes poderão criar signed URLs ou cookies para arquivos associados ao outro comportamento de cache.

Importante

Antes de adicionar um assinante à sua distribuição, faça o seguinte:

  • Defina os padrões de caminho nos comportamentos de cache e a sequência de comportamentos de cache cuidadosamente para que você não dê aos usuários acesso indesejado ao seu conteúdo ou impeça que eles acessem o conteúdo que você deseja que esteja disponível para todos.

    Por exemplo, imagine que uma solicitação corresponda ao padrão de caminho de dois comportamentos de cache. O primeiro comportamento de cache não requer signed URLs ou cookies, mas o segundo comportamento de cache, sim. Os usuários poderão acessar os arquivos sem usar signed URLs ou signed cookies porque o CloudFront processa o comportamento de cache associado à primeira correspondência.

    Para obter mais informações sobre padrões de caminho, consulte Padrão de caminho.

  • Para uma distribuição que você já esteja usando para distribuir conteúdo, certifique-se de que esteja pronto para começar a gerar signed URLs e cookies antes de adicionar um assinante. Quando você adiciona um assinante, o CloudFront rejeita as solicitações que não incluam um signed URL ou signed cookie válido.

É possível adicionar assinantes à sua distribuição usando o console ou a API do CloudFront.

Console

As etapas a seguir mostram como adicionar um grupo de chaves confiável como assinante. Também é possível adicionar uma Conta da AWS como signatário confiável, mas isso não é recomendado.

Como adicionar um assinante a uma distribuição usando o console
  1. Registre o ID do grupo de chaves que você deseja usar como signatário confiável. Para obter mais informações, consulte Criar um par de chaves para um grupo de chaves confiável (recomendado).

  2. Abra o console do CloudFront em https://console.aws.amazon.com/cloudfront/v4/home.

  3. Escolha a distribuição com os arquivos você deseja proteger com signed URLs ou cookies.

    nota

    Para adicionar um assinante a uma nova distribuição, especifique as mesmas configurações descritas na etapa 6 ao criar a distribuição.

  4. Escolha a guia Behaviors.

  5. Selecione o comportamento de cache com o padrão de caminho corresponde aos arquivos que você deseja proteger com signed URLs ou cookies e escolha Edit (Editar).

  6. Na página Edit Behavior (Editar Comportamento) faça o seguinte:

    1. Em Restrict Viewer Access (Use Signed URLs or Signed Cookies) (Restringir acesso do visualizador (Usar signed URLs ou signed Cookies)), escolha Yes (Sim).

    2. Em Trusted Key Groups or Trusted Signer (Grupos de chaves confiáveis ou signatário confiável), escolha Trusted Key Groups (Grupos de chaves confiáveis).

    3. Em Trusted Key Groups (Grupos de chaves confiáveis), escolha o grupo de chaves a ser adicionado e escolha Add (Adicionar). Repita se quiser adicionar mais de um grupo de chaves.

  7. Escolha Yes, Edit (Sim, editar) para atualizar o comportamento do cache.

API

É possível usar a API do CloudFront para adicionar um grupo de chaves confiável como assinante. É possível adicionar um assinante a uma distribuição existente ou a uma nova distribuição. Em qualquer caso, especifique os valores no elemento TrustedKeyGroups.

Também é possível adicionar uma Conta da AWS como signatário confiável, mas isso não é recomendado.

Consulte os seguintes tópicos na Referência da API do Amazon CloudFront:

Alternar pares de chaves

Recomendamos que você alterne (mude) periodicamente seus pares de chaves para signed URLs e cookies. Para alternar os pares de chaves que você estiver usando para criar signed URLs ou cookies sem invalidar os URLs ou os cookies que ainda não expiraram, execute as seguintes tarefas:

  1. Crie um par de chaves e adicione a chave pública a um grupo de chaves. Para obter mais informações, consulte Criar um par de chaves para um grupo de chaves confiável (recomendado).

  2. Se você criou um grupo de chaves na etapa anterior, adicione-o à distribuição como assinante.

    Importante

    Não remova nenhuma chave pública existente do grupo de chaves ou nenhum grupo de chaves da distribuição ainda. Somente adicione os novos.

  3. Atualize sua aplicação para criar assinaturas usando a chave privada do novo par de chaves. Confirme se os signed URLs ou cookies com as novas chaves privadas estão funcionando.

  4. Espere passar a data de expiração dos URLs ou cookies que foram assinados usando a chave privada antiga. Depois, remova a chave pública antiga do grupo de chaves. Se você criou um grupo de chaves na etapa 2, remova o grupo de chaves antigo da sua distribuição.