Exemple 4 : propriétaire d'un compartiment accordant des autorisations entre comptes à des objets qu'il ne possède pas
Rubriques
Dans cet exemple de scénario, vous détenez un compartiment et vous avez activé d'autres Comptes AWS pour charger des objets. Si vous avez appliqué le paramètre appliqué par le propriétaire du compartiment pour la propriété de l'objet S3 pour le compartiment, vous posséderez tous les objets du compartiment, y compris les objets écrits par un autre Compte AWS. Cela résoudra le problème selon lequel vous, le propriétaire du compartiment, ne possédez pas les objets. Vous pouvez ensuite déléguer des autorisations à des utilisateurs de votre propre compte ou à d'autres Comptes AWS. Supposons que le paramètre appliqué par le propriétaire du compartiment pour la propriété de l'objet S3 ne soit pas activé. C'est pourquoi le compartiment peut avoir des objets détenus par d'autres Comptes AWS.
A présent, admettons qu'en tant que propriétaire du compartiment, vous devez accorder des autorisations entre comptes sur des objets, quel que soit le propriétaire, à un utilisateur d'un autre compte. Par exemple, cet utilisateur peut être une application de facturation qui a besoin d'accéder aux métadonnées d'objet. Deux problèmes majeurs se posent :
-
Le propriétaire du compartiment n'a aucune autorisation sur ces objets créés par d'autres Comptes AWS. Pour que le propriétaire du compartiment accorde les autorisations sur des objets qu'il ne possède pas, le propriétaire de l'objet, le Compte AWS qui a créé les objets, doit tout d'abord accorder les autorisations au propriétaire du compartiment. Le propriétaire du compartiment peut alors déléguer ces autorisations.
Le propriétaire du compartiment peut alors déléguer des autorisations aux utilisateurs de son propre compte (consultez Exemple 3 : propriétaire d'un compartiment accordant des autorisations sur des objets qu'il ne possède pas), mais il ne peut pas déléguer des autorisations à d'autres Comptes AWS, car la délégation entre comptes n'est pas prise en charge.
Dans ce scénario, le propriétaire du compartiment peut créer un rôle AWS Identity and Access Management (IAM) avec l'autorisation d'accéder aux objets, et accorder à un autre Compte AWS l'autorisation d'endosser le rôle temporairement en l'activant pour accéder aux objets du compartiment.
Note
La propriété d'objets S3 est un paramètre Amazon S3 au niveau des compartiments que vous pouvez utiliser pour contrôler la propriété des objets qui sont chargés dans votre compartiment, ainsi que pour désactiver ou activer les listes ACL. Par défaut, la propriété d'objets est définie sur le paramètre Propriétaire du compartiment appliqué, et toutes les listes ACL sont désactivées. Lorsque les listes ACL sont désactivées, le propriétaire du compartiment détient tous les objets du compartiment et gère leur accès exclusivement au moyen de politiques de gestion des accès.
La majorité des cas d'utilisation modernes dans Amazon S3 ne nécessitent plus l'utilisation des listes ACL. Nous vous recommandons de maintenir les listes ACL désactivées, sauf dans des circonstances inhabituelles où vous devez contrôler l'accès individuellement pour chaque objet. Lorsque les listes ACL sont désactivées, vous pouvez utiliser des politiques pour contrôler l'accès à tous les objets de votre compartiment, quelle que soit la personne qui les a chargés dans votre compartiment. Pour de plus amples informations, veuillez consulter Consultez Contrôle de la propriété des objets et désactivation des listes ACL pour votre compartiment.
Informations générales : autorisations entre comptes et utilisation de rôles IAM
Les rôles IAM permettent à plusieurs scénarios de déléguer l'accès aux ressources, et l'accès entre comptes est l'un des scénarios clés. Dans cet exemple, le propriétaire du compartiment, Compte A, utilise un rôle IAM pour déléguer temporairement l'accès aux objets entre comptes aux utilisateurs d'un autre Compte AWS, Compte C. Chaque rôle IAM que vous créez possède deux stratégies qui lui sont attachées :
-
Une stratégie d'approbation qui identifie un autre Compte AWS capable d'endosser le rôle.
-
Une stratégie d'accès qui définit les autorisations : par exemple,
s3:GetObject
, accordées lorsqu'une personne assume le rôle. Pour obtenir une liste d'autorisations que vous pouvez spécifier dans une stratégie, consultez Actions Amazon S3.
Le Compte AWS identifié dans la stratégie d'approbation accorde ensuite à son utilisateur l'autorisation d'endosser le rôle. L'utilisateur peut ensuite procéder comme suit pour accéder aux objets :
-
Assumez le rôle et, en réponse, obtenir des autorisations de sécurité temporaires.
-
Accédez aux objets dans le compartiment grâce aux autorisations de sécurité temporaires.
Pour de plus amples informations sur les rôles IAM, veuillez consulter Rôles IAM dans le Guide de l'utilisateur IAM
Les étapes suivantes résument la procédure à suivre :

-
L'utilisateur administrateur du Compte A attache une stratégie de compartiment en accordant au Compte B l'autorisation conditionnelle de charger des objets.
-
L'administrateur du Compte A crée un rôle IAM, en instaurant la confiance avec le Compte C, afin que les utilisateurs de ce compte puissent accéder au Compte A. La stratégie d'accès attachée au rôle limite les actions de l'utilisateur du Compte C lorsque ce dernier accède au Compte A.
-
L'administrateur du compte B charge un objet dans le compartiment détenu par le Compte A, en accordant l'autorisation de contrôle total au propriétaire du compartiment.
-
L'administrateur du Compte C crée un utilisateur et attache une stratégie d'utilisateur qui permet à l'utilisateur d'assumer le rôle.
-
L'utilisateur du Compte C assume tout d'abord le rôle, qui lui renvoie les autorisations de sécurité temporaires. Grâce à ces autorisations, l'utilisateur accède ensuite aux objets du compartiment.
Pour cet exemple, vous avez besoin de trois comptes. Le tableau ci-dessous montre comment nous faisons référence à ces comptes et aux utilisateurs administrateurs dans ces comptes. Conformément aux directives IAM (consultez Utilisation d'un utilisateur administrateur pour créer des ressources et accorder des autorisations), nous n'utilisons pas les informations d'identification d'Utilisateur racine d'un compte AWS dans cette procédure. A la place, vous créez un utilisateur administrateur dans chaque compte et utilisez ces autorisations pour créer des ressources et leur accorder des autorisations.
ID Compte AWS | Compte désigné comme | Utilisateur administrateur du compte |
---|---|---|
|
Compte A |
AccountAadmin |
|
Compte B |
AccountBadmin |
|
Compte C |
AccountCadmin |
Étape 0 : Préparez-vous à suivre la procédure
Note
Vous pouvez ouvrir un éditeur de texte et écrire certaines informations à mesure que vous parcourez les étapes. En particulier, vous avez besoin d'ID de compte, d'ID d'utilisateur canonique, d'URL de connexion d'utilisateur IAM pour chaque compte pour vous connecter à la console, et des Amazon Resource Names (ARN) des utilisateurs IAM et de rôles.
-
Assurez-vous de posséder trois Comptes AWS et que chaque compte possède un seul utilisateur administrateur, comme indiqué dans le tableau de la section précédente.
-
Connectez-vous aux Comptes AWS, le cas échéant. Nous appelons ces comptes : Compte A, Compte B et Compte C.
-
Utilisez les autorisations du compte A pour vous connecter à la IAM console (Console IAM)
et procédez comme suit pour créer un utilisateur administrateur : -
Créez l'utilisateur AccountAadmin et notez les autorisations de sécurité. Pour plus d'informations sur l'ajout d'utilisateurs, consultez la section Création d'un utilisateur IAM dans votre Compte AWS du Guide de l'utilisateur IAM.
-
Accordez des privilèges d'administrateur AccountAadmin en attachant une stratégie d'utilisateur donnant l'accès total. Pour obtenir des instructions, veuillez consulter Utilisation de stratégies dans le Guide de l'utilisateur IAM.
-
Dans le tableau de bord de la console IAM, notez l'URL de connexion d'utilisateur IAM. Les utilisateurs figurant dans ce compte doivent utiliser cette URL pour se connecter à la AWS Management Console. Pour de plus amples informations, veuillez consulter Comment les utilisateurs se connectent à votre compte dans le Guide de l'utilisateur IAM.
-
-
Répétez l'étape précédente pour créer les utilisateurs administrateur dans le Compte B et le Compte C.
-
-
Pour le Compte C, notez l'ID d'utilisateur canonique.
Lorsque vous créez un rôle IAM dans le Compte A, la stratégie d'approbation accorde au Compte C l'autorisation d'assumer le rôle en spécifiant l'ID de compte. Vous pouvez trouver les informations de compte comme suit :
-
Utilisez votre ID ou alias de Compte AWS, votre nom d'utilisateur IAM et votre mot de passe pour vous connecter à la console Amazon S3
. -
Choisissez le nom d'un compartiment Amazon S3 pour afficher les détails concernant ce compartiment.
-
Sélectionnez l'onglet Permissions (Autorisations), puis Access Control List (Liste de contrôle d'accès).
-
Dans la section Accès à votre Compte AWS, dans la colonne Account (Compte) figure un identifiant long tel que
c1daexampleaaf850ea79cf0430f33d72579fd1611c97f7ded193374c0b163b6
. Ceci est votre ID d'utilisateur canonique.
-
-
Lorsque vous créez une stratégie de compartiment, vous avez besoin des informations suivantes. Notez ces valeurs :
-
ID d'utilisateur canonique du Compte A – Lorsque l'administrateur du Compte A accorde une autorisation conditionnelle de téléchargement d'objet à l'administrateur du Compte B, la condition spécifie l'ID d'utilisateur canonique de l'utilisateur du Compte A qui doit obtenir le contrôle total des objets.
Note
Le concept d'ID d'utilisateur canonique est propre à Amazon S3. Il s'agit d'une version cryptée de 64 caractères de l'ID de compte.
-
ARN utilisateur pour l'administrateur du Compte B – Vous pouvez trouver l'ARN utilisateur dans la console IAM. Vous devez sélectionner l'utilisateur et trouver l'ARN utilisateur dans l'onglet Récapitulatif.
Dans la stratégie de compartiment, vous accordez l'autorisation AccountBadmin de charger des objets et vous spécifiez l'utilisateur grâce à l'ARN. Voici un exemple de valeur ARN :
arn:aws:iam::
AccountB-ID
:user/AccountBadmin
-
-
Configurez la AWS Command Line Interface (CLI) ou AWS Tools for Windows PowerShell. Assurez-vous d'enregistrer les autorisations de l'utilisateur administrateur comme suit :
-
Si vous utilisez AWS CLI, créez des profils, AccountAadmin et AccountBadmin, dans le fichier de configuration.
-
Si vous utilisez AWS Tools for Windows PowerShell, veillez à stocker les informations d'identification pour la session dans AccountAadmin et AccountBadmin.
Pour obtenir des instructions, consultez Installation des outils pour les procédures d'exemples.
-
Étape 1 : Exécutez les tâches du compte A
Dans cet exemple, le Compte A est le propriétaire du compartiment. L'utilisateur AccountAadmin du Compte A crée un compartiment, attache une stratégie de compartiment en accordant l'autorisation à l'administrateur du Compte B de charger des objets, de créer un rôle IAM en accordant l'autorisation au Compte C d'assumer le rôle afin qu'il puisse accéder aux objets du compartiment.
Étape 1.1 : Connectez-vous à la AWS Management Console
Grâce à l'URL de connexion d'utilisateur IAM du compte A, connectez-vous tout d'abord à la AWS Management Console en tant qu'utilisateur AccountAadmin. Cet utilisateur créera un compartiment et y attachera une stratégie.
Étape 1.2 : créez un compartiment et attachez une stratégie de compartiment
Dans la console Amazon S3, procédez comme suit :
-
Créez un compartiment. Cet exercice assume que le nom du compartiment est
.DOC-EXAMPLE-BUCKET1
Pour obtenir des instructions, consultez Créer un compartiment.
-
Attachez la stratégie de compartiment suivante en accordant l'autorisation conditionnelle à l'administrateur du Compte B de charger des objets.
Vous devez mettre à jour la stratégie en fournissant vos propres valeurs pour
,DOC-EXAMPLE-BUCKET1
etAccountB-ID
.CanonicalUserId-of-AWSaccountA-BucketOwner
{ "Version": "2012-10-17", "Statement": [ { "Sid": "111", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountB-ID
:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::
/*" }, { "Sid": "112", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::DOC-EXAMPLE-BUCKET1
AccountB-ID
:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::
/*", "Condition": { "StringNotEquals": { "s3:x-amz-grant-full-control": "id=DOC-EXAMPLE-BUCKET1
CanonicalUserId-of-AWSaccountA-BucketOwner
" } } } ] }
Étape 1.3 : créez un rôle IAM pour accorder au Compte C un accès entre comptes au Compte A
Dans la console IAM, créez un rôle IAM (« examplerole ») qui accorde l'autorisation au Compte C d'assumer le rôle. Veillez à être toujours connecté comme administrateur du Compte A car le rôle doit être créé dans le Compte A.
-
Avant de créer le rôle, préparez la stratégie gérée qui définit les autorisations qu'exige le rôle. Vous attachez cette stratégie au rôle dans une étape ultérieure.
-
Dans le panneau de navigation de gauche, cliquez sur Stratégies, puis sur Créer une stratégie.
-
Ensuite, à côté de Create Your Own Policy, cliquez sur Select.
-
Saisissez
access-accountA-bucket
dans le champ Policy Name. -
Copiez la stratégie d'accès suivante et collez-la dans le champ Policy Document. La stratégie d'accès accorde l'autorisation
s3:GetObject
au rôle pour que quand l'utilisateur du Compte C assume le rôle, il puisse uniquement exécuter l'opérations3:GetObject
.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::
/*" } ] }DOC-EXAMPLE-BUCKET1
-
Cliquez sur Create Policy.
La nouvelle stratégie apparaît dans la liste des stratégies gérées.
-
-
Dans le volet de navigation sur la gauche, cliquez sur Roles et sur Create New Role.
-
Sous Select Role Type (Sélectionner le type de rôle), sélectionnez Role for Cross-Account Access (Rôle pour l'accès inter-comptes), puis cliquez sur le bouton Select (Sélectionner) à côté de Provide access between Comptes AWS accounts you own (Fournir l'accès entre les Comptes AWS dont vous êtes propriétaire).
-
Saisissez l'ID de compte du Compte C.
Pour cette procédure, les utilisateurs ne sont pas obligés d'avoir une Multi-Factor Authentication (MFA) pour assumer le rôle, donc ne cochez pas cette option.
-
Cliquez sur Next Step pour configurer les autorisations associées au rôle.
-
Sélectionnez l'option à côté de la stratégie
access-accountA-bucket
que vous avez créée et cliquez sur Next Step.La page de révision apparaît pour que vous confirmiez les paramètres pour le rôle avant qu'il ne soit créé. Sur cette page, il est très important que vous notiez le lien que vous pouvez envoyer aux utilisateurs qui ont besoin d'utiliser ce rôle. Les utilisateurs qui cliquent sur le lien accèdent directement à la page permettant de changer de rôle avec les champs d'ID de compte et de nom du rôle déjà remplis. Vous pouvez également consulter ce lien ultérieurement sur la page récapitulative du rôle pour n'importe quel rôle entre comptes.
-
Saisissez le nom de rôle
examplerole
et cliquez sur Next Step. -
Après avoir procédé à la révision du rôle, cliquez sur Create Role.
Le rôle
examplerole
est affiché dans la liste des rôles. -
Cliquez sur le nom du rôle
examplerole
. -
Sélectionnez l'onglet Trust Relationships.
-
Cliquez sur Show policy document et vérifiez que la stratégie d'approbation affichée correspond à la stratégie suivante.
La stratégie d'approbation suivante instaure la confiance avec le Compte C, en lui permettant d'exécuter l'action
sts:AssumeRole
. Pour de plus amples informations, veuillez consulter la section AssumeRole de la Référence de l'API AWS Security Token Service.{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountC-ID
:root" }, "Action": "sts:AssumeRole" } ] } -
Notez l'Amazon Resource Name (ARN) du rôle
examplerole
que vous avez créé.Dans les étapes suivantes, vous attachez une stratégie d'utilisateur pour permettre un utilisateur IAM d'assumer ce rôle et vous identifiez le rôle par la valeur ARN.
Étape 2 : Exécutez les tâches du compte B
Le compartiment examplebucket détenu par le Compte A a besoin d'objets détenus par d'autres comptes. Dans cette étape, l'administrateur du Compte B charge un objet grâce aux outils de ligne de commande.
-
A l'aide de la commande AWS CLI
put-object
, chargez un objet dans
.DOC-EXAMPLE-BUCKET1
aws s3api put-object --bucket
--keyDOC-EXAMPLE-BUCKET1
HappyFace.jpg
--bodyHappyFace.jpg
--grant-full-control id="canonicalUserId-ofTheBucketOwner
" --profileAccountBadmin
Notez ce qui suit :
-
Le paramètre
--Profile
spécifie le profil AccountBadmin, afin que l'objet soit détenu par le Compte B. -
Le paramètre
grant-full-control
accorde au propriétaire du compartiment l'autorisation de contrôle total sur l'objet comme l'exige la stratégie de compartiment. -
Le paramètre
--body
identifie le fichier source à charger. Par exemple, si le fichier est sur le disque C: d'un ordinateur Windows, vous spécifiezc:\HappyFace.jpg
.
-
Étape 3 : Exécutez les tâches du Compte C
Dans les étapes précédentes, le Compte A a déjà créé un rôle, examplerole
, instaurant la confiance avec le Compte C. Cela permet aux utilisateurs de ce dernier d'accéder au Compte A. Dans cette étape, l'administrateur du Compte C crée un utilisateur (Dave) et lui délègue l'autorisation sts:AssumeRole
reçue par le Compte A. Cela permet à Dave d'assumer le rôle examplerole
et d'accéder temporairement au Compte A. La stratégie d'accès que le Compte A a attaché au rôle limite les actions de Dave lorsqu'il accède à ce dernier : notamment les objets GET du compartiment
.DOC-EXAMPLE-BUCKET1
Étape 3.1 : Créez un utilisateur dans le Compte C et déléguez l'autorisation d'assumer le rôle examplerole
-
Grâce à l'URL de connexion d'utilisateur IAM pour le Compte C, connectez-vous tout d'abord à la AWS Management Console comme utilisateur AccountCadmin.
-
Dans la console IAM, créez un utilisateur nommé Dave.
Pour obtenir des instructions, veuillez consulter la section Création d'utilisateurs IAM (AWS Management Console) du Guide de l'utilisateur IAM.
-
Notez les autorisations de Dave. Dave a besoin de ces informations d'identification pour assumer le rôle
examplerole
. -
Créez une stratégie en ligne pour l'utilisateur IAM Dave, afin de lui déléguer l'autorisation
sts:AssumeRole
sur le rôleexamplerole
dans le Compte A.Dans le panneau de navigation de gauche, cliquez sur Utilisateurs.
Cliquez sur le nom utilisateur Dave.
Dans la page des détails de l'utilisateur, sélectionnez l'onglet Permissions (Autorisations) et développez la section Inline Policies (Stratégies en ligne).
Choisissez click here (ou Create User Policy).
Cliquez sur Custom Policy et sur Select.
Saisissez un nom pour la stratégie dans le champ Policy Name.
Copiez la stratégie suivante dans le champ Policy Document.
Vous devez mettre à jour la stratégie en fournissant l'ID du Compte A.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["sts:AssumeRole"], "Resource": "arn:aws:iam::
AccountA-ID
:role/examplerole" } ] }Cliquez sur Apply Policy.
-
Enregistrez les informations d'identification de Dave dans le fichier de configuration AWS CLI en ajoutant un autre profil, AccountCDave.
[profile AccountCDave] aws_access_key_id =
UserDaveAccessKeyID
aws_secret_access_key =UserDaveSecretAccessKey
region = us-west-2
Étape 3.2 : Assumez le rôle (examplerole) et accédez à des objets
A présent, Dave peut accéder aux objets du compartiment détenu par le Compte A comme suit :
-
Dave assume tout d'abord le rôle
examplerole
grâce à ses propres informations d'identification. Cela renvoie des autorisations temporaires. -
Grâce aux autorisations, Dave accède ensuite aux objets du compartiment du Compte A.
-
À l'invite de commande, exécutez la commande AWS CLI
assume-role
suivante en utilisant le profil AccountCDave.Vous devez mettre à jour la valeur ARN dans la commande en fournissant l'ID du Compte A dans lequel le rôle
examplerole
est défini.aws sts assume-role --role-arn arn:aws:iam::
accountA-ID
:role/examplerole --profile AccountCDave --role-session-name testEn réponse, AWS Security Token Service (STS) renvoie des informations d'identification de sécurité temporaires (ID de clé d'accès, clé d'accès secrète et jeton de session).
-
Enregistrez les informations d'identification de sécurité temporaires dans le fichier de configuration AWS CLI sous le profil
TempCred
.[profile TempCred] aws_access_key_id =
temp-access-key-ID
aws_secret_access_key =temp-secret-access-key
aws_session_token =session-token
region = us-west-2 -
À l'invite de commande, exécutez la commande AWS CLI suivante pour accéder aux objets à l'aide des informations d'identification temporaires. Par exemple, la commande spécifie l'API d'objet HEAD pour récupérer les métadonnées d'objet pour l'objet
HappyFace.jpg
.aws s3api get-object --bucket
--keyDOC-EXAMPLE-BUCKET1
HappyFace.jpg
SaveFileAs.jpg
--profile TempCredEtant donné que la stratégie d'accès attachée au rôle
examplerole
autorise les actions, Amazon S3 traite la demande. Vous pouvez essayer n'importe quelle autre action sur n'importe quel objet du compartiment.Si vous essayez une autre action : par exemple,
get-object-acl
, l'autorisation est refusée car le rôle ne permet pas cette action.aws s3api get-object-acl --bucket
--keyDOC-EXAMPLE-BUCKET1
HappyFace.jpg
--profile TempCredNous avons utilisé Dave pour assumer le rôle et accéder à l'objet grâce à des autorisations temporaires. Il peut s'agir également d'une application dans le Compte C qui accède aux objets dans le compartiment
. L'application peut obtenir des informations d'identification de sécurité temporaires, et le Compte C peut déléguer l'autorisation d'application pour assumer le rôleDOC-EXAMPLE-BUCKET1
examplerole
.
Étape 4 : Nettoyer
-
Une fois le test terminé, vous pouvez procéder comme suit pour le nettoyage.
-
Connectez-vous à la AWS Management Console (AWS Management Console
) en utilisant les autorisations du compte A, et procédez comme suit : -
Dans la console Amazon S3, supprimez la stratégie de compartiment attachée à examplebucket. Dans la page Properties du compartiment, supprimez la stratégie dans la section Permissions.
-
Si le compartiment a été créé pour cet exercice, supprimez les objets, puis le compartiment, dans la console Amazon S3.
-
Dans la console IAM, supprimez le rôle
examplerole
que vous avez créé dans le Compte A. -
Dans la console IAM, supprimez l'utilisateur AccountAadmin.
-
-
-
Connectez-vous à la AWS Management Console (AWS Management Console
) en utilisant les informations d'identification du compte B. Dans la console IAM, supprimez l'utilisateur AccountBadmin. -
Connectez-vous à la AWS Management Console (AWS Management Console
) en utilisant les autorisations du compte C. Dans la console IAM, supprimez les utilisateurs AccountCadmin et Dave.
Ressources connexes
Création d'un rôle pour la délégation d'autorisations à un utilisateur IAM dans le Guide de l'utilisateur IAM.
Didacticiel : Déléguer l'accès entre des Comptes AWS à l'aide des rôles IAM dans le Guide de l'utilisateur IAM.
Utilisation des stratégies dans le Guide de l'utilisateur IAM.