Comment mettre en liste blanche des adresses IP pour accéder à un compartiment AWS S3
Si vous souhaitez autoriser les serveurs de votre réseau à accéder aux compartiments S3 internes, sans ouvrir les objets qu'ils contiennent à Internet, l'accès à la liste blanche avec une stratégie de compartiment est une solution simple pour permettre le téléchargement de fichiers à partir d'un compartiment interne.
Accéder à un compartiment S3 sur Internet
La méthode la plus idéale pour l'interfaçage avec S3 à partir de Linux consiste simplement à installer l'AWS CLI et à exécuter des commandes telles que get-object
pour récupérer des fichiers directement, ou utilisez l'API ou le SDK pour la langue de votre choix. Si vous utilisez EC2, il est assez simple de mettre à jour le rôle IAM de l'instance EC2 et d'associer une stratégie lui donnant accès au bucket. Tant que l'AWS CLI est installée, vous pouvez l'utiliser avec le rôle d'instance sans gérer les clés.
Toutefois, si vous n'accédez pas à S3 depuis EC2 ou depuis une autre ressource AWS pouvant assumer un rôle, vous devrez gérer les clés. L'AWS CLI aura besoin d'un ID et d'un secret pour s'authentifier, ce qui, selon la complexité de votre déploiement, peut être un problème. Vous pourriez être tenté de le coder en dur dans votre script de compilation, mais c'est une solution compliquée que nous ne conseillons pas. Vous pouvez simplement définir le bucket ou l'objet comme public, mais cela ne fonctionnera pas pour les données sensibles que vous ne voulez pas que d'autres téléchargent.
La meilleure option consiste alors simplement à ajouter des adresses IP à la liste blanche. Cela gère l'accès implicitement – si la demande provient de l'adresse IP de votre serveur, elle sera autorisée. Cela peut être utilisé pour permettre très facilement de télécharger des fichiers à partir de leur URL de point de terminaison, comme si le bucket s'exécutait dans un sous-réseau privé (bien qu'il passe toujours sur Internet).
https://s3.amazonaws.com/bucketname/object.zip
Cependant, sans politique de compartiment, vous obtiendrez une erreur 403. Accédez aux paramètres du compartiment et recherchez l'éditeur de stratégie de compartiment sous Autorisations> Stratégie de compartiment.
Cela permet simplement le téléchargement de fichiers à partir du bucket (GetObject). Si vous souhaitez activer d'autres actions d'API, vous pouvez soit le définir sur quelque chose de spécifique avec le générateur de politique de bucket d'AWS, soit autoriser chaque action sur le bucket avec un caractère générique (probablement une mauvaise idée):
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": ( { "Sid": "IPAllow", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::bucketname/*", "Condition": { "IpAddress": { "aws:SourceIp": ( "192.168.1.1", "192.168.1.2", "192.168.1.3" ) } } } ) }