Comment autoriser un utilisateur à accéder à un dossier donné dans mon compartiment Amazon S3 ?

Dernière mise à jour : 05/11/2020

Je veux autoriser un utilisateur AWS Identity and Access Management (IAM) à accéder à un dossier spécifique dans mon compartiment Amazon Simple Storage Service (Amazon S3). Comment dois-je procéder ?

Résolution

Si l'utilisateur IAM et le compartiment S3 appartiennent au même compte AWS, vous pouvez accorder à l'utilisateur l'accès à un dossier spécifique du compartiment à l'aide d'une stratégie IAM. Tant que la stratégie de compartiment ne refuse pas explicitement l'accès de l'utilisateur au dossier, vous n'avez pas besoin de mettre à jour la stratégie de compartiment si l'accès est accordé par la stratégie IAM. Vous pouvez ajouter la stratégie IAM à différents utilisateurs IAM ou attacher la stratégie IAM à un rôle IAM vers lequel plusieurs utilisateurs peuvent basculer.

Si l'identité IAM (utilisateur ou rôle) et le compartiment S3 appartiennent à des comptes AWS différents, vous devez accorder l'accès à la fois à la stratégie IAM et à la stratégie de compartiment. Pour plus d'informations sur l'accès inter-comptes, voir Comment autoriser un utilisateur d'un autre compte AWS à charger des objets dans mon compartiment Amazon S3 ?

Par exemple, la stratégie IAM suivante permet à un utilisateur de télécharger des objets à partir du dossier DOC-EXAMPLE-BUCKET/media en utilisant la console Amazon S3. La stratégie inclut les instructions suivantes :

  • AllowStatement1 : permet à l'utilisateur de répertorier les compartiments qui appartiennent à son compte AWS. L'utilisateur doit disposer de cette autorisation pour pouvoir accéder au compartiment en utilisant la console.
  • AllowStatement2A permet à l'utilisateur de répertorier les dossiers dans DOC-EXAMPLE-BUCKET, où l'utilisateur doit pouvoir accéder au dossier en utilisant la console. L'instruction permet également à l'utilisateur d'effectuer une recherche sur le préfixe media/ en utilisant console.
  • AllowStatement3 permet à l'utilisateur de répertorier le contenu dans DOC-EXAMPLE-BUCKET/media.
  • AllowStatement4A permet à l'utilisateur de télécharger des objets (s3:GetObject) à partir du dossier DOC-EXAMPLE-BUCKET/media.
{
 "Version":"2012-10-17",
 "Statement": [
   {
     "Sid": "AllowStatement1",
     "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::*"]
   },
  {
     "Sid": "AllowStatement2A",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"],
     "Condition":{"StringEquals":{"s3:prefix":["","media"]}}
    },
  {
     "Sid": "AllowStatement3",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"],
     "Condition":{"StringLike":{"s3:prefix":["media/*"]}}
    },    
   {
     "Sid": "AllowStatement4A",
     "Effect": "Allow",
     "Action": ["s3:GetObject"],
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/media/*"]
   }
 ]
}

Autre exemple : la stratégie IAM suivante permet à l'utilisateur de télécharger des objets de et vers le dossier DOC-EXAMPLE-BUCKET/media en utilisant la console ou des méthodes de programmation telles que l'interface de ligne de commande (CLI) AWS ou l'API Amazon S3. Les différences par rapport à la stratégie IAM précédente sont les suivantes :

  • AllowStatement2B inclut "s3:delimiter":["/"] qui spécifie la barre oblique (/) comme délimiteur pour les dossiers dans le chemin d'accès à un objet. Il est recommandé de spécifier le délimiteur si l'utilisateur envoie des requêtes en utilisant l’interface CLI AWS ou l’API Amazon S3.
  • AllowStatement4B permet à l'utilisateur de télécharger des objets de (S3:getObject) et vers (S3:putObject) le dossier DOC-EXAMPLE-BUCKET/media.
{
 "Version":"2012-10-17",
 "Statement": [
   {
     "Sid": "AllowStatement1",
     "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::*"]
   },
  {
     "Sid": "AllowStatement2B",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"],
     "Condition":{"StringEquals":{"s3:prefix":["","media"],"s3:delimiter":["/"]}}
    },
  {
     "Sid": "AllowStatement3",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"],
     "Condition":{"StringLike":{"s3:prefix":["media/*"]}}
    },
   {
     "Sid": "AllowStatement4B",
     "Effect": "Allow",
     "Action": ["s3:GetObject", "s3:PutObject"],
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/media/*"]
   }
 ]
}

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


Besoin d'aide pour une question technique ou de facturation ?