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:
Para validar iremos acessar a URL de objeto, que pode ser obtida através do portal:
O acesso ao objeto utilizando HTTPS funcionou normalmente
Ao acessar a URL utilizando HTTP nosso acesso foi negado, ou seja, nossa política foi aplicada conforme esperado.
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":
Devemos lembrar que essa é uma política de bucket que é aplicada apenas nesse bucket e a seus objetos.