Contrôle de l'accès à un compartiment avec des stratégies d'utilisateur - Amazon Simple Storage Service

Contrôle de l'accès à un compartiment avec des stratégies d'utilisateur

Cette démonstration explique comment les autorisations utilisateur fonctionnent avec Amazon S3. Dans cet exemple, vous créez un compartiment avec des dossiers. Vous allez ensuite créer des utilisateurs AWS Identity and Access Management (IAM) dans votre Compte AWS, et leur octroyer des autorisations incrémentielles sur votre compartiment Amazon S3 et les dossiers qu'il contient.

Principes de base des compartiments et des dossiers

Le modèle de données Amazon S3 est une structure horizontale : vous créez un compartiment et ce compartiment stocke des objets. Il n'existe aucune hiérarchie de sous-compartiments ou de sous-dossiers, mais vous pouvez émuler une hiérarchie de dossiers. Des outils tels que la console Amazon S3 peuvent présenter une vue de ces dossiers et sous-dossiers logiques dans votre compartiment, comme illustré dans l'image suivante.


                Capture d'écran de la console montrant une hiérarchie de compartiments, de dossiers et d'objets.

La console montre qu'un compartiment nommé companybucket comporte trois dossiers, Private, Development et Finance, ainsi qu'un objet, s3-dg.pdf. La console utilise les noms d'objet (clés) pour créer une hiérarchie logique avec des dossiers et des sous-dossiers. Considérez les exemples suivants :

  • Lorsque vous créez le dossier Development, la console crée un objet avec la clé Development/. Notez la barre oblique de fin (/) comme délimiteur.

  • Lorsque vous chargez un objet nommé Projects1.xls dans le dossier Development, la console charge l'objet et lui fournit la clé Development/Projects1.xls.

    Dans la clé, Development est le préfixe et / le délimiteur. L'API Amazon S3 prend en charge les préfixes et les délimiteurs dans ses opérations. Par exemple, vous pouvez obtenir la liste de tous les objets d'un compartiment avec un préfixe et un délimiteur spécifiques. Dans la console, quand ouvrez le dossier Development, la console répertorie les objets de ce dossier. Dans l'exemple suivant, le dossier Development contient un seul objet.

     

    
                        Capture d'écran de la console montrant une hiérarchie de compartiments, de dossiers et d'objets.

     

    Lorsque la console répertorie le dossier Development dans le compartiment companybucket, elle envoie une demande à Amazon S3 dans laquelle elle spécifie le préfixe Development et le délimiteur /. La réponse de la console ressemble à une liste de dossiers du système de fichiers de votre ordinateur. L'exemple précédent montre que le compartiment companybucket possède un objet doté de la clé Development/Projects1.xls.

La console utilise des clés d'objet pour déduire une hiérarchie logique. Amazon S3 n'a pas de hiérarchie physique ; il n'a que des compartiments contenant des objets dans une structure de fichier plat. Lorsque vous créez des objets à l'aide de l'API Amazon S3, vous pouvez utiliser des clés d'objet qui impliquent une hiérarchie logique. Lorsque vous créez une hiérarchie logique d'objets, vous pouvez gérer l'accès aux dossiers individuels, comme le montre cette procédure détaillée.

Avant de commencer, veillez à vous familiariser avec le concept de contenu du compartiment de niveau racine. Supposez que votre compartiment companybucket contienne les objets suivants :

  • Private/privDoc1.txt

  • Private/privDoc2.zip

  • Development/project1.xls

  • Development/project2.xls

  • Finance/Tax2011/document1.pdf

  • Finance/Tax2011/document2.pdf

  • s3-dg.pdf

Ces clés d'objet créent une hiérarchie logique avec Private, Development et Finance comme dossiers de niveau racine et s3-dg.pdf comme objet de niveau racine. Lorsque vous choisissez le nom du compartiment dans la console Amazon S3, les éléments de niveau racine apparaissent comme illustré dans l'image suivante. La console montre les préfixes de niveau supérieur (Private/, Development/ et Finance/) sous la forme de dossiers de niveau racine. La clé d'objet s3-dg.pdf n'a pas de préfixe et apparaît donc en tant qu'élément de niveau racine.


                Capture d'écran de l'onglet des objets avec l'objet s3-dg.pdf dans la liste.

Résumé de la procédure détaillée

Dans cette procédure détaillée, vous créez un compartiment avec trois dossiers (Private, Development et Finance) dans celui-ci.

Vous avez deux utilisateurs, Alice et Bob. Vous souhaitez qu'Alice accède uniquement au dossier Development et que Bob accède uniquement au dossier Finance. Vous souhaitez garder le contenu du dossier Private privé. Dans cette démonstration, vous gérez l'accès en créant des utilisateurs IAM (l'exemple utilise les noms d'utilisateur Alice et Bob) et vous leur octroyez les autorisations nécessaires.

IAM prend également en charge la création de groupes d'utilisateurs et l'octroi d'autorisations au niveau du groupe, qui s'appliquent à tous les utilisateurs du groupe. Cela vous aide à mieux gérer les autorisations. Pour cet exercice, Alice et Bob ont besoin de certaines autorisations communes. Vous allez donc créer un groupe nommé Consultants et ajouter Alice et Bob à ce groupe. Vous commencerez par octroyer des autorisations en attachant une stratégie de groupe à ce groupe. Ensuite, vous ajouterez des autorisations spécifiques aux utilisateurs en attachant des stratégies aux utilisateurs spécifiques.

Note

Cette démonstration utilise companybucket comme nom de compartiment, Alice et Bob comme utilisateurs IAM, et Consultants comme nom de groupe. Comme Amazon S3 exige que les noms de compartiment soient uniques à l'échelle mondiale, vous devez remplacer le nom du compartiment par un nom de votre création.

Préparation de la procédure détaillée

Dans cet exemple, vous utilisez les informations d’identification de votre Compte AWS pour créer des utilisateurs IAM. Initialement, ces utilisateurs n'ont aucune autorisation. Vous octroyez de façon incrémentielle des autorisations à ces utilisateurs pour leur permettre d'effectuer des actions Amazon S3 spécifiques. Pour tester ces autorisations, vous vous connectez à la console avec les autorisations de chaque utilisateur. Lorsque vous octroyez de façon incrémentielle les autorisations en tant que propriétaire de Compte AWS et testez les autorisations en tant qu'utilisateur IAM, vous devez vous connecter et vous déconnecter, en utilisant chaque fois des informations d’identification différentes. Vous pouvez effectuer ce test dans un seul navigateur, mais le processus sera accéléré si vous pouvez utiliser deux navigateurs différents. Utilisez un navigateur pour vous connecter à la AWS Management Console avec les informations d'identification de votre Compte AWS, et un autre navigateur pour vous connecter avec les autorisations d'utilisateur IAM.

Pour vous connecter à la AWS Management Console avec les informations d'identification de votre Compte AWS, accédez à la page https://console.aws.amazon.com/. Un utilisateur IAM ne peut pas se connecter en utilisant le même lien. Un utilisateur IAM doit utiliser une page de connexion prenant en charge IAM. En tant que propriétaire du compte, vous pouvez fournir ce lien à vos utilisateurs.

Pour de plus amples informations sur IAM, veuillez consulter la page connexion à la AWS Management Console dans le Guide de l'utilisateur IAM.

Pour fournir un lien de connexion pour les utilisateurs IAM

  1. Connectez-vous à la AWS Management Console et ouvrez la console IAM à l'adresse https://console.aws.amazon.com/iam/.

  2. Dans le panneau Navigation (Navigation), choisissez IAM Dashboard (Tableau de bord IAM).

  3. Notez l'URL sous IAM users sign in link: (Lien de connexion des utilisateurs IAM). Vous donnerez ce lien aux utilisateurs IAM pour qu'ils se connectent à la console avec leur nom d'utilisateur et leur mot de passe IAM.

Étape 1 : Créer un compartiment

Dans cette étape, vous allez vous connecter à la console Amazon S3 avec les informations d'identification de votre Compte AWS, créer un compartiment, ajouter des dossiers (Development, Finance et Private) au compartiment, et télécharger un ou deux exemples de document dans chaque dossier.

  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon S3 à la page https://console.aws.amazon.com/s3/.

  2. Créez un compartiment.

    Pour obtenir des instructions détaillées, consultez Créer un compartiment.

  3. Chargez un document dans le compartiment.

    Cet exercice suppose que vous disposez du document s3-dg.pdf au niveau racine de ce compartiment. Si vous chargez un autre document, inscrivez son nom de fichier à la place de s3-dg.pdf.

  4. Ajoutez trois dossiers nommés Private, Finance et Development au compartiment.

    Pour obtenir des instructions détaillées sur la création d'un dossier, veuillez consulter Organisation des objets dans la console Amazon S3 à l'aide de dossiers> dans le Guide de l'utilisateur Amazon Simple Storage Service.

  5. Chargez un ou deux documents dans chaque dossier.

    Pour cet exercice, supposons que vous avez chargé deux documents dans chaque dossier, de sorte que le compartiment possède des objets avec les clés suivantes :

    • Private/privDoc1.txt

    • Private/privDoc2.zip

    • Development/project1.xls

    • Development/project2.xls

    • Finance/Tax2011/document1.pdf

    • Finance/Tax2011/document2.pdf

    • s3-dg.pdf

    Pour obtenir des instructions détaillées, consultez Chargement d'objets.

Étape 2 : Créer des utilisateurs IAM et un groupe

À présent, utilisez la console IAM pour ajouter deux utilisateurs IAM, Alice et Bob, à votre Compte AWS. Créez également un groupe d'administration nommé Consultants, puis ajoutez les deux utilisateurs à ce groupe.

Avertissement

Lorsque vous ajoutez des utilisateurs et un groupe, n'attachez aucune stratégie octroyant des autorisations à ces utilisateurs. Au début, les utilisateurs n'ont aucune autorisation. Dans les sections suivantes, vous allez octroyer des autorisations de façon incrémentielle. Vous devez tout d'abord vous assurer d'avoir attribué des mots de passe à ces utilisateurs IAM. Vous utiliserez les autorisations de ces utilisateurs pour tester les actions Amazon S3 et vérifier que ces autorisations fonctionnent comme prévu.

Pour obtenir des instructions détaillées sur la création d'un utilisateur IAM, veuillez consulter la section Création d'un utilisateur IAM dans votre Compte AWS du Guide de l'utilisateur IAM. Lorsque vous créez les utilisateurs pour cette procédure, sélectionnez AWS Management Consoleaccess (Accès à la console) et désactivez l'option Programmatic access (Accès par programmation).

Pour obtenir des instructions détaillées sur la création d'un groupe d'administration, veuillez consulter Création de votre premier groupe et utilisateur administrateur IAM dans le Guide de l'utilisateur IAM.

Étape 3 : Vérifier que les utilisateurs IAM ne disposent d'aucune autorisation

Si vous utilisez deux navigateurs, vous pouvez utiliser à présent le second navigateur pour vous connecter à la console en utilisant les autorisations d'un des utilisateurs IAM.

  1. Utilisez le lien de connexion d'utilisateur IAM (consultez Pour fournir un lien de connexion pour les utilisateurs IAM) pour vous connecter à la AWS Management Console en utilisant les autorisations d'un des deux utilisateurs IAM.

  2. Ouvrez la console Amazon S3 sur https://console.aws.amazon.com/s3/.

    Vérifiez que le message suivant de la console s'affiche et vous indique que l'accès est refusé.

    
                        Capture d'écran de la console montrant un message d'erreur d'accès refusé.

À présent, vous pouvez commencer octroyer des autorisations incrémentielles aux utilisateurs. En premier lieu, vous attacherez une stratégie de groupe octroyant les autorisations que les deux utilisateurs doivent posséder.

Étape 4 : Octroyer des autorisations au niveau du groupe

Vous voulez que les utilisateurs soient en mesure d'effectuer les tâches suivantes :

  • Répertorier tous les compartiments détenus par le compte parent. Pour cela, Bob et Alice doivent disposer de l'autorisation pour l'action s3:ListAllMyBuckets.

  • Répertorier les éléments de niveau racine, les dossiers et les objets dans le compartiment companybucket. Pour cela, Bob et Alice doivent disposer de l'autorisation pour l'action s3:ListBucket sur le compartiment companybucket.

À présent, vous allez créer une stratégie qui octroie ces autorisations, puis vous l'attacherez au groupe Consultants.

Étape 4.1 : Octroyer l'autorisation de répertorier tous les compartiments

Dans cette étape, vous allez créer une stratégie gérée qui octroie aux utilisateurs les autorisations minimales leur permettant de répertorier tous les compartiments détenus par le compte parent. Vous attacherez ensuite cette stratégie au groupe Consultants. Lorsque vous attachez la stratégie gérée à un utilisateur ou à un groupe, vous accordez à cet utilisateur ou à ce groupe l'autorisation d'obtenir la liste des compartiments détenus par le parent Compte AWS.

  1. Connectez-vous à la AWS Management Console et ouvrez la console IAM à l'adresse https://console.aws.amazon.com/iam/.

    Note

    Comme vous octroyez des autorisations utilisateur, connectez-vous à l'aide des informations d’identification de votre Compte AWS, et non pas en tant qu'utilisateur IAM.

  2. Créez la stratégie gérée.

    1. Dans le volet de navigation à gauche, choisissez Stratégies, puis Créer une stratégie.

    2. Choisissez l'onglet JSON.

    3. Copiez la stratégie d'accès suivante et collez-la dans le champ de texte de stratégie.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": ["s3:ListAllMyBuckets"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"] } ] }

      Une stratégie est un document JSON. Dans ce document, un élément Statement est un tableau d'objets, chacun décrivant une autorisation à l'aide d'une collection de paires de noms-valeurs. La stratégie précédente décrit une autorisation spécifique. L'élément Action spécifie le type d'accès. Dans la stratégie, l'élément s3:ListAllMyBuckets est une action Amazon S3 prédéfinie. Cette action couvre l'opération GET Service d'Amazon S3, qui retourne la liste de tous les compartiments détenus par l'expéditeur authentifié. La valeur de l'élément Effect détermine si une autorisation spécifique est accordée ou refusée.

    4. Choisissez Review Policy (Examiner une stratégie). Sur la page suivante, saisissez AllowGroupToSeeBucketListInTheConsoledans le champ Nom, puis choisissez Créer une stratégie.

      Note

      L'entrée Résumé affiche un message indiquant que la stratégie n'accorde pas d'autorisations. Vous pouvez ignorer ce message dans le cadre de cette procédure.

  3. Attachez la stratégie gérée AllowGroupToSeeBucketListInTheConsole que vous avez créée au groupe Consultants.

    Pour obtenir des instructions détaillées sur la façon d'attacher une stratégie gérée, veuillez consulter la section Ajout et suppression d'autorisations basées sur l'identité IAM du Guide de l'utilisateur IAM.

    Vous attachez des documents de stratégie aux utilisateurs IAM et aux groupes dans la console IAM. Comme vous voulez que les deux utilisateurs soient en mesure de répertorier les compartiments, vous attachez cette stratégie au groupe.

  4. Testez l'autorisation.

    1. Utilisez le lien de connexion d'utilisateur IAM (consultez Pour fournir un lien de connexion pour les utilisateurs IAM) pour vous connecter à la console en utilisant les autorisations d'un des deux utilisateurs IAM.

    2. Ouvrez la console Amazon S3 sur https://console.aws.amazon.com/s3/.

      La console doit à présent répertorier tous les compartiments mais pas les objets figurant dans ces compartiments.

      
                                    Capture d'écran de la console montrant une liste de compartiments.

Étape 4.2 : Permettre aux utilisateurs de répertorier le contenu de niveau racine d'un compartiment

Ensuite, autorisez tous les utilisateurs du groupe Consultants à répertorier les éléments de niveau racine du compartiment companybucket. Lorsqu'un utilisateur choisit le compartiment de l'entreprise dans la console Amazon S3, il peut voir les éléments de niveau racine figurant dans le compartiment.


                    Capture d'écran de la console montrant le contenu de companybucket.
Note

Cet exemple utilise companybucket à titre d'illustration. Vous devez utiliser le nom du compartiment que vous avez créé.

Pour comprendre la demande que la console envoie à Amazon S3 lorsque vous choisissez un nom de compartiment, la réponse qu'Amazon S3 renvoie et la manière dont la console interprète cette réponse, il est nécessaire de l'examiner d'un peu plus près.

Lorsque vous choisissez un nom de compartiment, la console envoie la demande GET Bucket (List Objects) à Amazon S3. Cette demande inclut les paramètres suivants :

  • le paramètre prefix avec une chaîne vide comme valeur ;

  • le paramètre delimiter avec / comme valeur.

Voici un exemple de demande.

GET ?prefix=&delimiter=/ HTTP/1.1 Host: companybucket.s3.amazonaws.com Date: Wed, 01 Aug 2012 12:00:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE=

Amazon S3 retourne une réponse qui inclut l'élément <ListBucketResult/>.

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>companybucket</Name> <Prefix></Prefix> <Delimiter>/</Delimiter> ... <Contents> <Key>s3-dg.pdf</Key> ... </Contents> <CommonPrefixes> <Prefix>Development/</Prefix> </CommonPrefixes> <CommonPrefixes> <Prefix>Finance/</Prefix> </CommonPrefixes> <CommonPrefixes> <Prefix>Private/</Prefix> </CommonPrefixes> </ListBucketResult>

L'objet de clé s3-dg.pdf ne contient pas la barre oblique (/) comme délimiteur et Amazon S3 retourne la clé dans l'élément <Contents>. Toutefois, toutes les autres clés dans notre exemple de compartiment contiennent le délimiteur /. Amazon S3 regroupe ces clés et renvoie un élément <CommonPrefixes> pour chacune des valeurs de préfixe distinctes Development/, Finance/ et Private/ qui est une sous-chaîne du début de ces clés jusqu'à la première occurrence du délimiteur / spécifié.

La console interprète ce résultat et affiche les éléments de niveau racine sous la forme de trois dossiers et d'une clé d'objet.


                    Capture d'écran de la console montrant le contenu de companybucket avec trois dossiers et un fichier pdf.

Si Bob ou Alice ouvre le dossier Development (Développement), la console envoie la demande GET Bucket (List Objects) à Amazon S3 avec le préfixe prefix et les valeurs suivantes pour les paramètres delimiter :

  • Le paramètre prefix avec la valeur Development/.

  • Le paramètre delimiter avec la valeur « / ».

En réponse à cela, Amazon S3 renvoie les clés d'objet qui commencent par le préfixe spécifié.

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>companybucket</Name> <Prefix>Development</Prefix> <Delimiter>/</Delimiter> ... <Contents> <Key>Project1.xls</Key> ... </Contents> <Contents> <Key>Project2.xls</Key> ... </Contents> </ListBucketResult>

La console affiche les clés d'objet.


                    Capture d'écran de la console montrant le dossier Development contenant deux fichiers xls.

A présent, revenez à l'octroi aux utilisateurs d'une autorisation pour répertorier les éléments de niveau racine du compartiment. Pour répertorier le contenu du compartiment, les utilisateurs ont besoin d'une autorisation pour appeler l'action s3:ListBucket, telle qu'illustrée dans la déclaration de stratégie ci-dessous. Pour s'assurer qu'ils ne voient que le contenu de niveau racine, vous ajoutez une condition stipulant que les utilisateurs doivent spécifier un paramètre prefix vide dans la demande (c'est-à-dire qu'ils ne sont pas autorisés à double-cliquer sur les dossiers de niveau racine). Enfin, vous ajoutez une condition pour exiger un accès de type dossier en exigeant que les demandes des utilisateurs incluent le paramètre delimiter avec la valeur « / ».

{ "Sid": "AllowRootLevelListingOfCompanyBucket", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } }

Lorsque vous choisissez un compartiment dans la console Amazon S3, celle-ci commence par envoyer la demande GET Bucket location pour rechercher la Région AWS dans laquelle le compartiment est déployé. Ensuite, la console utilise le point de terminaison spécifique à la Région du compartiment pour envoyer la demande GET Bucket (List Objects). Par conséquent, si les utilisateurs doivent utiliser la console, vous devez octroyer l'autorisation pour l'action s3:GetBucketLocation telle qu'illustrée dans la déclaration de stratégie suivante.

{ "Sid": "RequiredByS3Console", "Action": ["s3:GetBucketLocation"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"] }

Pour permettre aux utilisateurs de répertorier le contenu de niveau racine d'un compartiment

  1. Connectez-vous à la AWS Management Console et ouvrez la console IAM à l'adresse https://console.aws.amazon.com/iam/.

    Utilisez les informations d’identification de votre Compte AWS, pas les informations d’identification d'un utilisateur IAM, pour vous connecter à la console.

  2. Remplacez la stratégie gérée AllowGroupToSeeBucketListInTheConsole existante qui est attachée au groupe Consultants par la stratégie suivante, qui autorise également l'action s3:ListBucket. N'oubliez pas de remplacer companybucket dans la stratégie Resource par le nom de votre compartiment.

    Pour obtenir des instructions détaillées, veuillez consulter Modification de stratégies IAM dans le Guide de l'utilisateur IAM. Lorsque vous suivez ces instructions détaillées, veillez à suivre les étapes pour appliquer vos modifications à toutes les entités principales auxquelles la stratégie est attachée.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "AllowRootLevelListingOfCompanyBucket", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } } ] }
  3. Testez les autorisations mises à jour.

    1. Utilisez le lien de connexion d'utilisateur IAM (voir Pour fournir un lien de connexion pour les utilisateurs IAM) pour vous connecter à la AWS Management Console.

      Ouvrez la console Amazon S3 sur https://console.aws.amazon.com/s3/.

    2. Choisissez le compartiment que vous avez créé ; la console affiche les éléments de niveau racine du compartiment. Si vous choisissez un dossier dans le compartiment, vous ne pourrez pas voir le contenu du dossier, car vous n'avez pas encore été octroyé ces autorisations.

      
                                    Capture d'écran de la console montrant le compartiment d'entreprise,contenant trois dossiers.

Ce test réussit lorsque les utilisateurs utilisent la console Amazon S3. Lorsque vous choisissez sur un compartiment dans la console, l'implémentation de la console envoie une demande qui inclut le paramètre prefix avec une chaîne vide comme valeur et le paramètre delimiter avec la valeur « / ».

Étape 4.3 : Récapitulatif de la stratégie de groupe

L'effet net de la stratégie de groupe que vous avez ajoutée est d'octroyer aux utilisateurs IAM Alice et Bob les autorisations minimales suivantes :

  • Répertorier tous les compartiments détenus par le compte parent.

  • Voir les éléments de niveau racine dans le compartiment companybucket

Toutefois, les utilisateurs ont une marge de manœuvre encore limitée. Vous octroyez ensuite des autorisations spécifiques à l'utilisateur, comme suit :

  • Autorisez Alice à obtenir et placer des objets dans le dossier Development.

  • Autorisez Bob à obtenir et placer des objets dans le dossier Finance.

Dans le cadre des autorisations spécifiques à l'utilisateur, vous attachez une stratégie à un utilisateur spécifique et non pas au groupe. Dans la section suivante, vous octroyez à Alice l'autorisation de travailler dans le dossier Development. Vous pouvez répéter cette procédure pour octroyer une autorisation similaire à Bob pour lui permettre de travailler dans le dossier Finance.

Étape 5 : Octroyer des autorisations spécifiques à l'utilisateur IAM Alice

À présent, vous octroyez des autorisations supplémentaires à Alice pour qu'elle puisse voir le contenu du dossier Development, ainsi qu'obtenir et placer des objets dans ce dossier.

Étape 5.1 : Octroyer une autorisation à l'utilisateur IAM Alice pour répertorier le contenu du dossier Development

Pour qu'Alice répertorie le contenu du dossier Development, vous devez appliquer une stratégie à l'utilisateur Alice qui octroie l'autorisation pour l'action s3:ListBucket sur le compartiment companybucket, à condition que la demande inclue le préfixe Development/. Vous voulez que cette stratégie soit appliquée uniquement à l'utilisateur Alice. Vous devez donc une stratégie en ligne. Pour de plus amples informations sur les stratégies en ligne, veuillez consulter Stratégies gérées et stratégies en ligne dans le Guide de l'utilisateur IAM.

  1. Connectez-vous à la AWS Management Console et ouvrez la console IAM à l'adresse https://console.aws.amazon.com/iam/.

    Utilisez les informations d’identification de votre Compte AWS, pas les informations d’identification d'un utilisateur IAM, pour vous connecter à la console.

  2. Créez une stratégie en ligne pour octroyer à l'utilisateur Alice l'autorisation de répertorier le contenu du dossier Development.

    1. Dans le panneau de navigation de gauche, choisissez Utilisateurs.

    2. Choisissez sur le nom d'utilisateur Alice.

    3. Sur la page des détails de l'utilisateur, choisissez l'onglet Autorisations, puis Ajouter une stratégie en ligne.

    4. Choisissez l'onglet JSON.

    5. Copiez la stratégie suivante et collez-la dans le champ de texte de stratégie.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringLike":{"s3:prefix":["Development/*"] } } } ] }
    6. Choisissez Review Policy (Examiner une stratégie). Sur la page suivante, saisissez un nom dans le champ Nom, puis choisissez Créer une stratégie.

  3. Testez la modification des autorisations d'Alice :

    1. Utilisez le lien de connexion d'utilisateur IAM (voir Pour fournir un lien de connexion pour les utilisateurs IAM) pour vous connecter à la AWS Management Console.

    2. Ouvrez la console Amazon S3 sur https://console.aws.amazon.com/s3/.

    3. Dans la console Amazon S3, vérifiez qu'Alice peut voir la liste des objets dans le dossier Development/ du compartiment.

      Lorsque l'utilisateur choisit le dossier /Development pour afficher la liste des objets qu'il contient, la console Amazon S3 envoie la demande ListObjects à Amazon S3 avec le préfixe /Development. Comme l'utilisateur obtient l'autorisation de voir la liste des objets avec le préfixe Development et le délimiteur /, Amazon S3 renvoie la liste des objets avec le préfixe de clé Development/, et la console affiche cette liste.

      
                                    Capture d'écran de la console montrant le dossier Development contenant deux fichiers xls.

Étape 5.2 : Octroyer des autorisations à l'utilisateur IAM Alice pour obtenir et placer des objets dans le dossier Development

Pour qu'Alice puisse obtenir et placer des objets dans le dossier Development, elle a besoin d'une autorisation pour appeler les actions s3:GetObject et s3:PutObject. Les déclarations de stratégie suivantes octroient ces autorisations, à condition que la demande inclue le paramètre prefix avec la valeur Development/.

{ "Sid":"AllowUserToReadWriteObjectData", "Action":["s3:GetObject", "s3:PutObject"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket/Development/*"] }

  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon S3 à la page https://console.aws.amazon.com/s3/.

    Utilisez les informations d’identification de votre Compte AWS, pas les informations d’identification d'un utilisateur IAM, pour vous connecter à la console.

  2. Modifiez la stratégie en ligne que vous avez créée à l'étape précédente.

    1. Dans le panneau de navigation de gauche, choisissez Utilisateurs.

    2. Choisissez sur le nom d'utilisateur Alice.

    3. Dans la page des détails, sélectionnez l'onglet Autorisations et développez la section Stratégies en ligne.

    4. En regard du nom de la stratégie que vous avez créée à l'étape précédente, choisissez Modifier la stratégie.

    5. Copiez la stratégie suivante et collez-la dans le champ de texte de la stratégie pour remplacer la stratégie existante.

      { "Version": "2012-10-17", "Statement":[ { "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket"], "Condition":{ "StringLike":{"s3:prefix":["Development/*"] } } }, { "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", "Action":["s3:GetObject", "s3:PutObject"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket/Development/*"] } ] }
  3. Testez la stratégie mise à jour :

    1. Utilisez le lien de connexion d'utilisateur IAM (voir Pour fournir un lien de connexion pour les utilisateurs IAM) pour vous connecter à la AWS Management Console.

    2. Ouvrez la console Amazon S3 sur https://console.aws.amazon.com/s3/.

    3. Dans la console Amazon S3, vérifiez qu'Alice peut à présent ajouter un objet et télécharger un objet dans le dossier Development.

Étape 5.3 : Refuser explicitement à l'utilisateur IAM Alice les autorisations pour tout autre dossier du compartiment

L'utilisateur Alice peut à présent répertorier le contenu de niveau racine dans le compartiment companybucket. Elle peut également obtenir et placer des objets dans le dossier Development. Si vous souhaitez réellement renforcer les autorisations d'accès, vous pouvez refuser explicitement à Alice l'accès aux autres dossiers du compartiment. S'il existe une autre stratégie (stratégie de compartiment ou liste ACL) qui accorde à Alice l'accès à d'autres dossiers du compartiment, ce refus explicite a priorité sur ces autorisations.

Vous pouvez ajouter la déclaration suivante à la stratégie de l'utilisateur Alice. Elle exige que toutes les demandes envoyées par Alice à Amazon S3 incluent le paramètre prefix, dont la valeur peut être Development/* ou une chaîne vide.

{ "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] }, "Null" : {"s3:prefix":false } } }

Deux expressions conditionnelles figurent dans le bloc Condition. Les résultats de ces expressions conditionnelles sont associés à l'aide du AND logique. Si les deux conditions son vraies, le résultat de la combinaison combinée est vrai (true). Comme Effect dans cette stratégie est défini sur Deny, lorsque la Condition a la valeur true, les utilisateurs ne peuvent pas effectuer l'Action spécifiée.

  • L'expression conditionnelle Null garantit que les demandes d'Alice incluent le paramètre prefix.

    Le paramètre prefix requiert un accès de type dossier. Si vous envoyez une demande sans le paramètre prefix, Amazon S3 renvoie toutes les clés d'objet.

    Si la demande inclut le paramètre prefix avec une valeur null, l'expression prend la valeur true, et le bloc entier Condition est défini sur true. Vous devez autoriser une chaîne vide comme valeur du paramètre prefix. Nous avons vu dans la discussion précédente qu'autoriser la chaîne null permet à Alice de récupérer les éléments de niveau racine du compartiment, comme le fait la console dans la discussion précédente. Pour de plus amples informations, veuillez consulter Étape 4.2 : Permettre aux utilisateurs de répertorier le contenu de niveau racine d'un compartiment.

  • L'expression conditionnelle StringNotLike garantit que si la valeur du paramètre prefix est spécifiée et n'est pas Development/*, la demande échoue.

Suivez les étapes de la section précédente et mettez à jour à nouveau la stratégie en ligne que vous avez créée pour l'utilisateur Alice.

Copiez la stratégie suivante et collez-la dans le champ de texte de la stratégie pour remplacer la stratégie existante.

{ "Version": "2012-10-17", "Statement":[ { "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket"], "Condition":{ "StringLike":{"s3:prefix":["Development/*"] } } }, { "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", "Action":["s3:GetObject", "s3:PutObject"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket/Development/*"] }, { "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] }, "Null" : {"s3:prefix":false } } } ] }

Étape 6 : Octroyer des autorisations spécifiques à l'utilisateur IAM Bob

À présent, vous voulez accorder à Bob une autorisation sur le dossier Finance. Suivez la procédure que vous avez utilisée précédemment pour accorder des autorisations à Alice, mais remplacez le dossier Development par le dossier Finance. Pour obtenir des instructions détaillées, consultez Étape 5 : Octroyer des autorisations spécifiques à l'utilisateur IAM Alice.

Étape 7 : Sécuriser le dossier Private

Dans cet exemple, vous n'avez que deux utilisateurs. Vous avez accordé toutes les autorisations minimales requises au niveau du groupe et accordé des autorisations au niveau de l'utilisateur seulement lorsque ces autorisations étaient réellement requises au niveau d'un utilisateur individuel. Cette approche aide à réduire au maximum l'effort de gestion des autorisations. Lorsque le nombre d'utilisateurs augmente, la gestion des autorisations peut devenir fastidieuse. Par exemple, vous ne voulez pas que les utilisateurs de cet exemple accèdent au contenu du dossier Private. Comment s'assurer de ne pas accorder accidentellement une autorisation utilisateur le permettant ? Vous devez ajouter une stratégie qui refuse explicitement l'accès à ce dossier. Un refus explicite a priorité sur toutes les autres autorisations.

Pour vous assurer que le dossier Private reste privé, vous pouvez ajouter les deux déclarations de refus suivantes à la stratégie de groupe :

  • Ajoutez la déclaration suivante pour refuser explicitement toute action sur les ressources dans le dossier Private (companybucket/Private/*).

    { "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup", "Action": ["s3:*"], "Effect": "Deny", "Resource":["arn:aws:s3:::companybucket/Private/*"] }
  • Vous refusez également l'autorisation pour l'action visant à répertorier les objets lorsque la demande spécifie le préfixe Private/. Dans la console, si Bob ou Alice ouvre le dossier Private, avec cette stratégie, Amazon S3 renvoie une réponse d'erreur.

    { "Sid": "DenyListBucketOnPrivateFolder", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::*"], "Condition":{ "StringLike":{"s3:prefix":["Private/"]} } }

Remplacez la stratégie de groupe Consultants par une stratégie mise à jour qui inclut les déclarations de refus précédentes. Après l'application de la stratégie mise à jour, aucun des utilisateurs du groupe ne peut accéder au dossier Private de votre compartiment.

  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon S3 à la page https://console.aws.amazon.com/s3/.

    Utilisez les informations d’identification de votre Compte AWS, pas les informations d’identification d'un utilisateur IAM, pour vous connecter à la console.

  2. Remplacez la stratégie gérée AllowGroupToSeeBucketListInTheConsole existante qui est attachée au groupe Consultants par la stratégie suivante. N'oubliez pas de remplacer companybucket dans la stratégie par le nom de votre compartiment.

    Pour obtenir des instructions, veuillez consulter Modification des stratégies gérées par le client dans le Guide de l'utilisateur IAM. Lorsque vous suivez ces instructions, veillez à suivre les consignes pour appliquer vos modifications à toutes les entités principales auxquelles la stratégie est attachée.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket", "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"] }, { "Sid": "AllowRootLevelListingOfCompanyBucket", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringEquals":{"s3:prefix":[""]} } }, { "Sid": "RequireFolderStyleList", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::*"], "Condition":{ "StringNotEquals":{"s3:delimiter":"/"} } }, { "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup", "Action": ["s3:*"], "Effect": "Deny", "Resource":["arn:aws:s3:::companybucket/Private/*"] }, { "Sid": "DenyListBucketOnPrivateFolder", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::*"], "Condition":{ "StringLike":{"s3:prefix":["Private/"]} } } ] }

Étape 8 : Nettoyage

Pour effectuer le nettoyage, ouvrez la console IAM, puis supprimez les utilisateurs Alice et Bob. Pour obtenir des instructions détaillées, veuillez consulter Suppression d'un utilisateur IAM dans le Guide de l'utilisateur IAM.

Pour vous assurer que le stockage ne vous est plus facturé, vous devez également supprimer les objets et le compartiment que vous avez créés pour cet exercice.

Ressources connexes