Comment puis-je restreindre l'accès à mon compartiment Amazon S3 en utilisant des points de terminaison d'un VPC ou des adresses IP spécifiques ?

Dernière mise à jour le 14/07/2022

Je souhaite bloquer tout le trafic qui ne provient pas d'un point de terminaison d'un Amazon Virtual Private Cloud (VPC) spécifique ou de certaines adresses IP. Ou bien, j'utilise un compartiment Amazon Simple Storage Service (Amazon S3) pour héberger un site web statique. Le site web doit être accessible à partir de points de terminaison d'un VPC ou d'adresses IP spécifiques. Comment dois-je procéder ?

Résolution

Avertissement : les exemples de politiques de compartiment dans cet article refusent explicitement l'accès à toutes les requêtes en dehors des points de terminaison d'un VPC ou des adresses IP autorisés. Veillez à examiner attentivement la politique de compartiment avant de l'enregistrer.

Utilisez une politique de compartiment pour indiquer les points de terminaison d'un VPC, les adresses IP source d'un VPC ou les adresses IP externes qui peuvent accéder au compartiment S3.

Remarque : une adresse IP source de VPC est une adresse IP privée provenant d'un VPC. Les adresses privées ne sont pas accessibles sur Internet et peuvent être utilisées pour la communication entre les instances de votre VPC. Par exemple, une adresse IP privée peut être l'adresse IP privée d'une instance Amazon Elastic Compute Cloud (Amazon EC2).

Une adresse IP externe est une adresse IP publique qui peut être située dans ou en dehors d'un VPC. Par exemple, une adresse IP externe peut être l'adresse IP Elastic ou publique d'une instance Amazon Elastic Compute Cloud (Amazon EC2). Ou bien, l'adresse IP externe peut être l'adresse IP de la passerelle NAT ou du serveur proxy d'un VPC.

Par exemple, la politique de compartiment suivante bloque tout le trafic vers le compartiment, sauf si la demande provient de points de terminaison d'un VPC (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": "*"
    }
  ]
}

Remarque :

L'exemple de politique de compartiment suivant bloque le trafic vers le compartiment à moins que la demande ne provienne d'adresses IP privées spécifiées (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": "*"
    }
  ]
}

Remarque : pour utiliser cette politique avec la condition aws:VpcSourceIP, vous devez attacher un point de terminaison d'un VPC pour Amazon S3. Le point de terminaison d'un VPC doit être attaché à la table de routage du sous-réseau de l'instance EC2 et se trouver dans la même région AWS que le compartiment.

L'exemple suivant de politique de compartiment bloque le trafic vers le compartiment à moins que la demande ne provienne d'adresses IP externes spécifiées (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": "*"
    }
  ]
}

Avertissement : ces stratégies de compartiment citées à titre d’exemples refusent explicitement l'accès à toutes les demandes en dehors des points de terminaison d'un VPC ou des adresses IP autorisés. Même l'utilisateur qui a saisi la politique de compartiment peut se voir refuser l'accès au compartiment s'il ne répond pas aux conditions. Par conséquent, veillez à examiner attentivement la politique de compartiment avant de l'enregistrer. Si vous êtes bloqué par erreur, veuillez consulter la section J'ai accidentellement refusé à tout le monde l'accès à mon compartiment Amazon S3. Comment puis-je rétablir l'accès ?

Si vous devez autoriser des utilisateurs spécifiques (dans le même compte AWS) à accéder au compartiment, incluez l'instruction suivante dans le bloc Condition :

  • AROAEXAMPLEID est l'ID d'un rôle IAM que vous voulez autoriser
  • AIDAEXAMPLEID est l'ID d'un utilisateur IAM que vous voulez autoriser.
  • 111111111111 est l'ID de compte AWS du compartiment, qui représente les informations d'identification de l'utilisateur racine du compte AWS.

Par exemple :

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

Pour plus d'informations sur l'octroi d'accès à des rôles IAM spécifiques, consultez Comment limiter l'accès à un compartiment Amazon S3 à un rôle IAM donné.


Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?