Como limito o acesso ao meu bucket do Amazon S3 a um certo endpoint da VPC ou a um endereço IP em específico?

5 minuto de leitura
0

Quero bloquear todo tráfego que não venha de um determinado endpoint da Amazon Virtual Private Cloud (Amazon VPC) ou de certos endereços IP. Também estou usando um bucket do Amazon Simple Storage Service (Amazon S3) para hospedar um site estático. Só deve ser possível acessar o site a partir de alguns endpoints da VPC ou de alguns endereços IP em específico.

Resolução

Atenção: os exemplos das políticas de bucket neste artigo bloqueiam expressamente o acesso a qualquer solicitação que não venha dos endpoints da VPC ou dos endereços IP permitidos. Revise a política do bucket cuidadosamente antes de salvá‑la.

Use uma política de bucket para definir quais endpoints da VPC, endereços IP de origem na VPC ou endereços IP externos podem acessar o bucket do S3.

Observação: um endereço IP de origem na VPC é um endereço IP privado de dentro de uma VPC. Não é possível acessar endereços privados pela internet. Por isso, eles podem ser usados na comunicação entre as instâncias da sua VPC. Por exemplo, um endereço IP privado pode ser o endereço privado de uma instância do Amazon Elastic Compute Cloud (Amazon EC2).

Um endereço IP externo é um endereço IP público que pode vir de dentro ou de fora de uma VPC. Por exemplo, um endereço IP externo pode ser o endereço IP público ou elástico de uma instância do Amazon Elastic Compute Cloud (Amazon EC2). O endereço IP externo também pode ser o endereço IP do gateway NAT de uma VPC ou do servidor de proxy da VPC.

O exemplo da política de bucket a seguir bloqueia o tráfego direcionado ao bucket a não ser que a solicitação venha dos endpoints da VPC especificados (aws:sourceVpce):

{
  "Id": "VPCe",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VPCe",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": [
            "vpce-1111111",
            "vpce-2222222"
          ]
        }
      },
      "Principal": "*"
    }
  ]
}

Observação:

O exemplo da política de bucket a seguir bloqueia o tráfego direcionado ao bucket a não ser que a solicitação venha dos endereços IP privados especificados (aws:VpcSourceIp):

{
  "Id": "VpcSourceIp",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VpcSourceIp",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "NotIpAddress": {
          "aws:VpcSourceIp": [
            "10.1.1.1/32",
            "172.1.1.1/32"
          ]
        }
      },
      "Principal": "*"
    }
  ]
}

Observação: para conseguir usar a política com a condição aws:VpcSourceIP você precisa associar um endpoint da VPC ao Amazon S3. O endpoint da VPC deve estar conectado à tabela de rotas da sub‑rede da instância do EC2 e estar na mesma região da AWS que o bucket.

O exemplo da política de bucket a seguir bloqueia o tráfego direcionado ao bucket a não ser que a solicitação venha dos endereços IP externos especificados (aws:SourceIp):

{
  "Id": "SourceIP",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SourceIP",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "11.11.11.11/32",
            "22.22.22.22/32"
          ]
        }
      },
      "Principal": "*"
    }
  ]
}

Atenção: esses exemplos de políticas de bucket negam explicitamente o acesso a qualquer solicitação fora dos endpoints da VPC ou endereços IP permitidos. Até o usuário que inseriu a política pode ter o acesso negado ao bucket caso não cumpra as condições especificadas. Portanto, revise a política do bucket cuidadosamente antes de salvá‑la. Se você ficar bloqueado por acidente, consulte Neguei o acesso ao meu bucket do Amazon S3 para todos acidentalmente. Como faço para recuperá‑lo?

Se precisar permitir que algum usuário da mesma conta da AWS acesse o bucket, inclua a seguinte instrução no bloco Condition:

  • AROAEXAMPLEID é o ID do perfil do IAM que você deseja permitir
  • AIDAEXAMPLEID é o ID do usuário do IAM que você deseja permitir
  • 111111111111 é o ID da conta da AWS associada ao bucket, e representa as credenciais do usuário raiz da conta

Por exemplo:

"Condition": {
            "StringNotLike": {
                "aws:userId": [
                    "AROAEXAMPLEID:*",
                    "AIDAEXAMPLEID",
                    "111111111111"
                ]
            }
        }

Para mais informações sobre como conceder acesso a determinados perfis do IAM, consulte Como restringir o acesso a buckets do Amazon S3 para um perfil do IAM específico.

Informações relacionadas

Endpoints da VPC

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos