AWS S3: Criar política de proteção por IP ou Domínio

As políticas proverão uma camada de proteção de acordo com as configurações especificadas. 

 Escrevendo testes automatizados com PHPUnit

É 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.

Restrição ao S3 por range de IP

Agora você deve entrar com o JSON fornecido abaixo, alterando os campos listados para as suas configurações.

  • Id - (Identificador) Um identificador opcional para a sua política;
  • Sid - (Statement ID) é usado para atribuir um identificador exclusivo a uma declaração dentro da política. Cada declaração (Statement) em uma política precisa ter um Sid único. O Sid é útil quando você deseja referenciar ou modificar uma declaração específica em uma política;
  • Resource - Forneça o Arn do seu Bucket;
  • aws:SourceIp - Um array com range de IP. Caso necessário você pode colocar um ou vários.
{
	"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"
					]
				}
			}
		}
	]
}

Restrição ao S3 a nível de domínio

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.