Il est assez courant de rendre certains éléments de votre compartiment S3 publics sur Internet, afin que tout le monde puisse y accéder et les télécharger. Cependant, il existe plusieurs façons de procéder, qui présentent leurs propres problèmes de sécurité.
Devez-vous rendre public un compartiment S3?
La réponse courte est: probablement pas, et certainement pas si vous avez des données sensibles. Dans la plupart des cas, il est préférable d'avoir quelque chose devant le bucket, comme un serveur API, qui peut répondre aux demandes et gérer l'authentification plutôt que de simplement rendre tous les objets publics.
L'exception est si vous diffusez spécifiquement du contenu Web à partir du bucket. Les compartiments S3 peuvent être configurés pour héberger du contenu statique, ce qui est idéal pour héberger des médias volumineux tels que des images et des vidéos. Vous devrez bien sûr vous assurer que le bucket n’héberge pas de contenu censé être privé, mais que les autorisations peuvent être définies pour chaque objet. Il s’agit donc d’un élément à garder à l’esprit lors de l’importation.
Une autre configuration est l'accès «public», mais avec une liste blanche d'adresses IP via la stratégie de compartiment pour le verrouiller uniquement à vos serveurs. Cela ne bat pas la sécurité de la simple utilisation des clés d'accès IAM, mais cela vous évite de gérer les clés et fait que le bucket fonctionne comme dans votre sous-réseau privé. Si vous utilisez EC2, vous souhaiterez simplement donner au rôle IAM de l'instance l'autorisation d'accéder aux buckets.
EN RELATION: Comment mettre en liste blanche les adresses IP pour accéder à un compartiment AWS S3
La seule chose que vous ne voudrez jamais activer est l'accès public en écriture. Cela donne à n'importe qui dans le monde le pouvoir d'écrire dans votre bucket, de supprimer des éléments ou de le remplir d'objets volumineux et coûteux. Il y a très peu de cas d'utilisation où vous souhaitez faire cela plutôt que d'avoir un serveur API devant pour gérer les demandes pour vous, mais si vous voulez une forme d'écriture publique, vous devriez au moins activer uniquement s3: PutObject
autorisations, plutôt qu'une «écriture» complète.
Configuration de l'accès public
Il existe différentes manières de gérer l'accès public sur les buckets. Par défaut, S3 active toutes les protections, rendant l'ensemble du compartiment non public. Vous pouvez les désactiver de manière sélective pour activer différents niveaux de données publiques.
Sous l'onglet "Autorisations" des paramètres des buckets, vous trouverez les commandes permettant d'activer l'accès public. Par défaut, tous ces éléments sont cochés. Les deux premiers traitent du blocage de l'accès public accordé aux listes de contrôle d'accès attachées aux objets. Si vous ne cochez pas ces cases, vous pourrez importer des objets avec des autorisations de lecture publiques et les rendre publics. Les deux derniers bloquent l'accès public via la stratégie du bucket, ce qui garantit simplement que votre stratégie ne peut pas activer l'accès public sur l'ensemble du bucket sans le désactiver.
Si vous les décochez tous, le bucket s'affichera comme "Les objets peuvent être publics". Même avec tous ces éléments désactivés, vous devrez toujours activer l'accès public avec une ACL sur l'objet lui-même, lorsque vous le téléchargez. Cela se fait généralement avec le lecture publique
ACL:
--acl public-read
Vous pouvez vérifier que cela fonctionne en cliquant sur les paramètres d’un objet et en vérifiant si «Lire l’objet» sous «Accès public» est défini sur vrai.
Ceci est cependant facultatif et est défini au niveau de l'objet. Si vous souhaitez avoir des objets publics et privés dans un même compartiment, vous pouvez le faire, bien que vous souhaitiez peut-être envisager d'utiliser des compartiments séparés pour atténuer toute confusion.
Accorder un accès à l'échelle du bucket
Pour être clair ici encore, les compartiments S3 entièrement publics sont destinés à l'hébergement de contenu Web statique, où chaque objet du compartiment est destiné à être exposé à l'Internet ouvert. Pour tout autre élément nécessitant un accès public, vous devez le gérer au niveau de l'objet avec une liste de contrôle d'accès.
Toutefois, si vous souhaitez activer l'accès public à l'échelle du bucket, vous devrez le faire avec une stratégie de bucket, comme la suivante, qui active getObject
autorisations pour tout le monde.
{ "Version": "17/10/2012", "Id": "S3PolicyId1", "Déclaration": ( { "Sid": "IPAllow", "Effet": "Autoriser", "Principal": "*", "Action": "s3: getObject", "Ressource": "arn: aws: s3 ::: test-bucket-csit / *" } ) }
AWS, bien sûr, vous donnera de nombreux avertissements indiquant que ce compartiment a un accès public général. Ce n’est pas en soi une mauvaise chose, mais il est probablement préférable de gérer cela au niveau de l’objet, à moins que ce ne soit spécifiquement pour héberger un site Web à partir de.
Malgré cet avertissement, de nombreuses entreprises commettront l'erreur de stocker des données sensibles dans des seaux S3 publics.