Forçando a utilização de HTTPS no acesso a um bucket S3 da AWS

Forçando a utilização de HTTPS no acesso a um bucket S3 da AWS

O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos que oferece escalabilidade, disponibilidade de dados, segurança e performance. Clientes de todos os portes e setores podem armazenar e proteger qualquer quantidade de dados de praticamente qualquer caso de uso, como data lakes, aplicações nativas da nuvem e aplicações móveis. Com classes de armazenamento econômicas e recursos de gerenciamento fáceis de usar, você pode otimizar custos, organizar dados e configurar controles de acesso ajustados para atender a requisitos específicos de negócios, organizacionais e de conformidade.

Quando acessamos uma URL do S3 podemos garantir que o acesso seja realizado utilizando o protocolo seguro HTTPS e não o HTTP. Para isto, podemos utilizar a políticas de bucket.

Neste exemplo teremos um bucket público compartilhando objetos mas forçando que o acesso seja feito utilizando o protocolo seguro HTTPS (Hyper Text Transfer Protocol Secure).

Para realizar essa configuração precisamos:

  • Acessar o portal da AWS e realizar o login
  • Navegar até o serviço S3
  • Clicar no Bucket que deseja aplicar a politica
  • Clicar na opção Permissões (Permissions)
  • Em Politica do Bucket (Bucket policy) clicar em Editar (Edit)
  • Adicionar a política:

    {"Version": "2012-10-17",
      "Statement": [
          {
              "Sid": "PublicReadGetObject",
              "Effect": "Allow",
              "Principal": {
                  "AWS": "*"
              },
              "Action": "s3:GetObject",
              "Resource": "arn:aws:s3:::ONomeDoSeuBucket/*"
          },
          {
              "Sid": "PublicReadGetObject",
              "Effect": "Deny",
              "Principal": {
                  "AWS": "*"
              },
              "Action": "s3:GetObject",
              "Resource": "arn:aws:s3:::ONomeDoSeuBucket/*",
              "Condition":{
                  "Bool":
                  { "aws:SecureTransport": false } 
              } 
          } 
      ]
    }
    

    Obs.: Alterar na politica a palavra ONomeDoSeuBucket pelo nome real do seu Bucket

  • Clicar em Salvar mudanças (Save changes)

A minha configuração ficou da seguinte forma:

buck2.png

Para validar iremos acessar a URL de objeto, que pode ser obtida através do portal:

buck5.png

O acesso ao objeto utilizando HTTPS funcionou normalmente

buck3.png

Ao acessar a URL utilizando HTTP nosso acesso foi negado, ou seja, nossa política foi aplicada conforme esperado.

buck4.png

Na nossa política temos uma condição Boolean que verifica se o retorno da chave SecureTransport é verdadeira ou falsa. Quando essa chave for verdadeira, a solicitação será enviada por meio de HTTPS.

O trecho da política de bucket a seguir que utilizamos no nosso exemplo nega explicitamente todas as ações no bucket e nos objetos quando a solicitação atende à condição "aws:SecureTransport": "false":

image.png

Devemos lembrar que essa é uma política de bucket que é aplicada apenas nesse bucket e a seus objetos.