Como permito o acesso de clientes que não usam o TLS 1.2 ou superior aos buckets do Amazon S3 ?

9 minuto de leitura
0

Meus clientes não usam a versão 1.2 ou superior do TLS, então não podem acessar o conteúdo armazenado nos buckets do Amazon Simple Storage Service (Amazon S3). Como permito que esses clientes acessem o conteúdo em buckets do Amazon S3 usando o TLS 1.0 ou 1.1?

Breve descrição

A AWS está impondo o uso do TLS 1.2 ou superior em todos os endpoints de API da AWS. Para continuar se conectando aos serviços da AWS, você deve atualizar todo o software que usa o TLS 1.0 ou 1.1.

Resolução

O Amazon CloudFront permite o uso de versões mais antigas do TLS abstraindo os clientes do protocolo TLS que é usado entre a distribuição do CloudFront e o Amazon S3.

Criar uma distribuição do CloudFront com o OAC

Com o CloudFront, você tem compatibilidade com solicitações anônimas e públicas aos buckets do S3. Ou você pode tornar os buckets do S3 privados e acessíveis apenas por meio do CloudFront exigindo solicitações assinadas para acesso aos buckets do S3.

Compatibilidade com solicitações anônimas e públicas de acesso aos buckets do S3

Observação: o exemplo a seguir pressupõe que você já tenha um bucket do S3 em uso. Se você não tiver um bucket do S3, crie um.

Para criar a distribuição do CloudFront, siga estas etapas:

  1. Abra o console do CloudFront.
  2. Escolha Create Distribution (Criar distribuição).
  3. Em Origin (Origem), para Origin domain (Domínio de origem), escolha o endpoint da API REST do bucket do S3 na lista suspensa.
  4. Em Viewer Protocol Policy (Política de protocolo do visualizador), escolha Redirect HTTP to HTTPS (Redirecionar HTTP para HTTPS).
  5. Em Allowed HTTP endpoints (Endpoints HTTP permitidos), selecione GET, HEAD, OPTIONS (OBTER, CABEÇA, OPÇÕES) para ter compatibilidade com solicitações de leitura**.**
  6. Na seção Origin access (Acesso de origem), selecione Origin access control settings (recommended) (Configurações de controle de acesso de origem [recomendado]).
  7. Selecione Create control setting (Criar configuração de controle) e use o nome padrão. Para o comportamento de assinatura, selecione Sign requests (recommended) (Assinar solicitações [recomendado]) e depois selecione Create (Criar). As configurações recomendadas do OAC autenticam automaticamente a solicitação do visualizador.
  8. Selecione a identidade na lista suspensa**.** Depois que a distribuição for criada**,** atualize a política de bucket para restringir o acesso ao OAC.
  9. Em Default cache behavior (Comportamento padrão de cache), Viewer (Visualizador), selecione Redirect HTTP to HTTPS (Redirecionar HTTP para HTTPS) para a Viewer Protocol Policy (Política de Protocolo do Viewer) e deixe as outras configurações como o padrão.
  10. Em Cache key and origin requests (Chave de cache e solicitações de origem), escolha Cache policy and origin request policy (Política de cache e política de solicitação de origem). Em seguida, use CachingOptimized para a política de Cache e CORS-S3Origin para a política de solicitação de origem.
  11. Selecione Create distribution (Criar distribuição) e aguarde até que seu status seja atualizado para Enabled (Habilitado).

Exigir solicitações assinadas para acesso aos buckets do S3

Adicione segurança aos buckets do S3 aceitando apenas solicitações assinadas. Com solicitações assinadas, o OAC segue os seus parâmetros de autenticação e os encaminha para a origem do S3, que passa a negar solicitações anônimas.

Para criar uma distribuição do CloudFront que exija solicitações assinadas para acesso aos buckets do S3, siga estas etapas:

  1. Abra o console do CloudFront.
  2. Escolha Create Distribution (Criar distribuição).
  3. Em Origin (Origem), para Origin domain (Domínio de origem), escolha o endpoint da API REST do bucket do S3 na lista suspensa.
  4. Em Viewer Protocol Policy (Política de protocolo do visualizador), escolha Redirect HTTP to HTTPS (Redirecionar HTTP para HTTPS).
  5. Em Allowed HTTP endpoints (Endpoints HTTP permitidos), selecione GET, HEAD, OPTIONS (OBTER, CABEÇA, OPÇÕES) para ter compatibilidade com solicitações de leitura**.**
  6. Na seção Origin access (Acesso de origem), selecione Origin access control settings (recommended) (Configurações de controle de acesso de origem [recomendado]).
  7. Bloqueie todas as solicitações não assinadas marcando a opção Do not sign requests (Não assinar solicitações).
    Observação: o bloqueio de solicitações não assinadas exige que todo cliente assine suas solicitações para que a origem do S3 possa avaliar as permissões.
  8. Crie uma política de cache personalizada para encaminhar o cabeçalho da autorização do cliente para a origem.
  9. Em Cache key and origin requests (Chave de cache e solicitações de origem), selecione Cache policy and origin request policy (recommended) (Política de cache e política de solicitação de origem {recomendado]).
  10. Selecione Create Policy (Criar política).
  11. Insira um nome para a política de cache na seção Name (Nome).
  12. Em Cache key settings (Configurações da chave de cache), vá para Headers (Cabeçalhos) e selecione Include the following headers (Incluir os seguintes cabeçalhos).
  13. Em Add Header (Adicionar cabeçalho), selecione Authorization (Autorização).
  14. Selecione Create (Criar).

Controlar a política de segurança do cliente

Para controlar uma política de segurança no CloudFront, você deve ter um domínio personalizado. É uma prática recomendada especificar um nome de domínio alternativo para a distribuição. Também é uma prática recomendada usar um certificado SSL personalizado configurado no AWS Certificate Manager (ACM). Isso dá a você mais controle sobre a política de segurança e permite que os clientes continuem usando o TLS 1.0. Para obter mais informações, consulte Supported protocols and ciphers between viewers and CloudFront (Protocolos e cifras compatíveis entre os visualizadores e o CloudFront).

Se você usar o nome de domínio *.cloudfront.net padrão, o CloudFront provisionará automaticamente um certificado e definirá a política de segurança para permitir o TLS 1.0 e 1.1. Para obter mais informações, consulte Configurações de distribuição.

Para configurar um nome de domínio alternativo para a distribuição do CloudFront, siga estas etapas:

  1. Faça login no Console de Gerenciamento da AWS e abra o console do CloudFront.
  2. Escolha o ID da distribuição que você deseja atualizar.
  3. Na guia General (Geral), escolha Edit (Editar).
  4. Em Alternate Domain Names (CNAMEs) (Nomes de domínio alternativos [CNAMEs]), escolha Add item (Adicionar item) e insira o nome do domínio.
    Observação: é uma prática recomendada usar um registro de nome canônico (CNAME) personalizado para acessar os recursos. Usar um CNAME dá a você mais controle sobre o roteamento e permite uma transição melhor para seus clientes.
  5. Em Custom SSL Certificate (Certificado SSL personalizado), escolha o certificado SSL personalizado na lista suspensa que inclui seu CNAME para atribuí-lo à distribuição.
    Observação: para obter mais informações sobre a instalação de um certificado, consulte Como configuro a distribuição do CloudFront para usar um certificado SSL/TLS?
  6. Escolha Create distribution (Criar distribuição) e aguarde até que seu status seja atualizado para Enabled (Habilitado).

Depois de criar a distribuição, você deve permitir que o OAC acesse seu bucket. Conclua as seguintes etapas:

  1. Navegue até a página do console do CloudFront e abra a distribuição do CloudFront.
  2. Selecione a guia Origins (Origens), selecione a origem e clique em Edit (Editar).
  3. Escolha Copy policy (Copiar política), abra a permissão do bucket e atualize a política de bucket.
  4. Abra a página Go to S3 bucket permissions(Ir para permissões do bucket do S3).
  5. Em Bucket policy (Política de bucket), escolha Edit (Editar). Cole a política que você copiou anteriormente e escolha Save (Salvar). Se a política de bucket exigir mais do que ler no S3, você poderá adicionar as APIs necessárias.

Se você usar um nome de domínio personalizado, altere as entradas do DNS para usar a nova URL de distribuição do CloudFront. Se você não usar um nome de domínio personalizado, deverá fornecer a nova URL de distribuição do CloudFront aos usuários. Além disso, você deverá atualizar qualquer software de cliente ou dispositivo que use a URL antiga.

Se você estiver usando um SDK da AWS para acessar objetos do Amazon S3, deverá alterar o código para usar endpoints HTTPS regulares. Além disso, certifique-se de usar a nova URL do CloudFront. Se os objetos não forem públicos e exigirem mais controle, você poderá oferecer conteúdo privado com URLs assinadas e cookies assinados.

Usar URLs pré-assinadas do S3 para acessar objetos

Se o fluxo de trabalho depender de URLs pré-assinadas do S3, use uma distribuição do CloudFront para retransmitir a consulta para a origem do S3. Primeiro, gere uma URL pré-assinada para o objeto que você deseja. Em seguida, substitua o host na URL pelo endpoint do CloudFront para entregar a chamada por meio do CloudFront e atualizar automaticamente o protocolo de criptografia. Para testar e gerar uma URL pré-assinada, execute o seguinte comando da CLI:

aws s3 presign s3://BUCKET_NAME/test.jpg

Exemplo de saída:

https://bucket_name.s3.us-east-1.amazonaws.com/test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=%5b...%5d%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=%5b...%5d&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature">https://BUCKET_NAME.s3.us-east-1.amazonaws.com/test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=[...]%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=[...]&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature    =[...]

Agora, altere a URL do S3 para o novo endpoint do CloudFront. Por exemplo, substitua esta URL do S3:

BUCKET_NAME.s3.eu-west-1.amazonaws.com

por este endpoint:

https://DISTRIBUTION_ID.cloudfront.net.

Exemplo de saída:

https://<DISTRIBUTION_ID>.cloudfront.net /test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=[...]%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=[...]&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=[...]

Para usar URLs pré-assinadas, aplique as seguintes configurações do CloudFront:

  1. Defina o comportamento de assinatura do OAC como Do not sign requests (Não assinar solicitações).
  2. Defina a política de solicitação de origem de distribuição do CloudFront como Origin request settings (Configurações de solicitação de origem): Headers – None; Cookies – None; Query strings – All (Cabeçalhos: nenhum; Cookies: nenhum; Strings de consulta: todas).
  3. Defina a política de cache como Headers – None; Cookies – None; Query strings – All (Cabeçalhos: nenhum; Cookies: nenhum; Strings de consulta: nenhuma).

No AWS CloudTrail, a solicitação GET para baixar uma URL pré-assinada do S3 aparece como a identidade que gerou a URL pré-assinada.

Se você estiver usando um SDK da AWS para acessar objetos do S3, deverá alterar o código para usar a URL preassinada. Ou então, use uma solicitação HTTPS normal e use a nova URL do CloudFront.

Confirme que está usando protocolos de criptografia modernos para o Amazon S3

Para testar a nova política, use o seguinte exemplo de comando curl para fazer solicitações HTTPS usando um protocolo legado específico:

curl https://${CloudFront_Domain}/image.png -v --tlsv1.0 --tls-max 1.0

O exemplo de comando curl faz uma solicitação ao CloudFront usando o TLS 1.0. Isso faz a conexão com a origem do S3 usando o TLS 1.2 e baixa o arquivo com êxito.

É uma prática recomendada usar o AWS CloudTrail Lake para identificar conexões TLS mais antigas com endpoints de serviços da AWS. Você pode configurar o armazenamento de dados de eventos do CloudTrail Lake para capturar eventos de gerenciamento ou eventos de dados. O evento do CloudTrail correspondente no CloudTrail Lake mostra o TLS versão 1.2, confirmando que os clientes usam uma política de segurança moderna para se conectar ao Amazon S3.


AWS OFICIAL
AWS OFICIALAtualizada há 5 meses