AWS S3 - Bucket Policies
Tags: aws, cloud, devops, security
Published: 2023-05-19 14:23:46

**Anotações sobre o AWS S3 Bucket Policies para ajudar na preparação das certificações AWS.**

Até o momento as anotações são para as certificações abaixo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/se0sqtegn424nami6rz8.png)

- [Link oficial](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html)

##**Anotações gerais**
- Suporta bucket policies maior que 20 kb
- **Deny explicito SEMPRE substitui um Allow**
- Aplicado a nível de Bucket
- AWS Policy Generator
- Liberar acesso a Internet, IP, VPC
- Sempre HTTPS
- **x-amz-region - Não é uma `condition` valida**


---
##**Elementos básicos de uma Policy**

**Resource:**

- Ex: `"Resource":["arn:aws:s3:::demo-bucket/*"]`
- Buckets, objetos, pontos de acesso e trabalhos são os recursos do Amazon S3 para os quais você pode permitir ou negar permissões. 
- Em uma Policy, você usa o ARN para identificar o recurso.

**Actions:**

- Ex: `"Action":["s3:GetObject"]`
- Para cada recurso, o Amazon S3 oferece suporte a um conjunto de operações. 
- Você identifica as operações de recursos que permitirão (ou negarão) usando palavras-chave de ação.
- Por exemplo, a permissão s3:ListBucket autoriza o usuário a empregar a operação GET Bucket (List Objects) do Amazon S3.

**Effect:**

- Ex: `"Effect":"Allow"`
- Qual será o efeito quando o usuário solicitar a ação específica - pode ser permitir ou negar.
- Se você não conceder (permitir) explicitamente acesso a um recurso, o acesso estará implicitamente negado. 
- Você também pode negar acesso explicitamente a um recurso. 
- Você poderia fazer isso para garantir que um usuário não possa acessar o recurso, mesmo se uma Policy diferente conceder acesso.

**Principal:**

- Ex: `"Principal": "*"`
- A conta ou usuário que tem permissão de acesso a ações e recursos na instrução. 
- Em uma Policy de bucket, o principal é o usuário, a conta, o serviço ou outra entidade que receba essa permissão.

**Condition:**

- Condições para quando uma `Policy `está em vigor. 
- Você pode usar chaves de toda a AWS e chaves específicas do Amazon S3 para especificar `Conditions `em uma `Policy `de acesso do Amazon S3.
- Ex:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mxivcuj1hwrw74pmejve.png)

---
##**Bucket Policy para liberar somente HTTPS**

-  "aws:SecureTransport": "true"

```
{
  "Id": "ExamplePolicy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowSSLRequestsOnly",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
    **  "Condition": {
        "Bool": {
          "aws:SecureTransport": "true"
        }**
      },
      "Principal": "*"
    }
  ]
}
```



---

##**Exemplo de bucket policy**

```
{
  "Id": "ExamplePolicy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowSSLRequests",
      "Action": "s3:GetObject",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::mykplabs-policy/*"
      ],
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "true"
        }
      },
      "Principal": "*"
    }
  ]
}
```
---
##**Restringir o acesso a um indicador HTTP específico**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/example-bucket-policies.html)

_Um site com nome de domínio (www.example.com ou example.com) com links para fotos e vídeos armazenados no bucket do Amazon S3, DOC-EXAMPLE-BUCKET. Por padrão, todos os recursos do Amazon S3 são privados e, portanto, somente a Conta da AWS que criou os recursos pode acessá-lo_
_Para permitir acesso de leitura a esses objetos em seu site, você pode adicionar uma política de bucket que conceda a permissão s3:GetObject com uma condição, usando a chave **aws:Referer**_

- use `aws:Referer`

**Exemplo**

```
{
  "Version":"2012-10-17",
  "Id":"HTTP referer policy example",
  "Statement":[
    {
      "Sid":"Allow GET requests originating from www.example.com and example.com.",
      "Effect":"Allow",
      "Principal":"*",
      "Action":["s3:GetObject","s3:GetObjectVersion"],
      "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Condition":{
        "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
      }
    }
  ]
}
```


---
##**Referências**

- [Exemplos de Policies de bucket](https://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/example-bucket-policies.html)