É muito comum um Bucket na AWS S3 ter restrições de acesso específicas, afinal, nem tudo deve ter acesso público. Em alguns casos é possível criar uma URL pré-assinada, que fornece uma nova URL pública com tempo de expiração.
A seguir a gente vai ver como criar regras para restrição de recursos via IP e domínio. Ambos os casos podem ter infinitas utilidades, como permitir que apenas um serviços faça solicitação a recursos ou liberar um PDF apenas a usuários de um site.
Primeiramente, acesse o Bucket que você deseja criar a nova regra, por fim, clique na aba Permission. Agora você deve rolar a página até encontrar a seção Política do Bucket (Policy Bucket) e clicar no botão editar.
Agora você deve entrar com o JSON fornecido abaixo, alterando os campos listados para as suas configurações.
{
"Version": "2012-10-17",
"Id": "Policy1700226459732",
"Statement": [
{
"Sid": "Stmt1700226438722",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::YOUR_BUCKET_HERE/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"173.245.48.0/20",
"103.21.244.0/22"
]
}
}
}
]
}
Por outro lado, a gente também pode fazer restrições a nível de domínio, ou seja, o recurso vai estar disponível apenas dentro do nosso site. Acessos direto ao recurso serão negados.
Seguindo o mesmo passo anterior, edite e insira a política abaixo, alterando os campos necessários.
Actions - Quais são as ações que poderão ser executadas;
Resource - Forneça o Arn do seu Bucket;
StringLike/aws:Referer - Um array contendo um ou vários domínios autorizados.
{
"Version": "2012-10-17",
"Id": "HTTPS Policy allow",
"Statement": [
{
"Sid": "Allow get requests originating from www.satellasoft.com.",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::video-player-test-satellasoft/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"https://satellasoft.com"
]
}
}
}
]
}
Para aplicar a regra acima, em alguns casos pode ser necessário revisar as políticas do Bucket.