Enregistrement d’un emplacement - Amazon Simple Storage Service

Enregistrement d’un emplacement

Après avoir créé une instance Amazon S3 Access Grants dans une Région AWS de votre compte, vous pouvez enregistrer un emplacement S3 dans cette instance. Un emplacement S3 Access Grants associe l’emplacement S3 par défaut (s3://), un compartiment ou un préfixe à un rôle AWS Identity and Access Management (IAM). S3 Access Grants endossera ce rôle IAM pour fournir des informations d’identification temporaires au bénéficiaire qui accédera à cet emplacement particulier. Vous devez d’abord enregistrer au moins un emplacement auprès de votre instance S3 Access Grants avant de pouvoir créer des autorisations d’accès.

Cas d’utilisation recommandé

Nous vous recommandons d’enregistrer l’emplacement par défaut (s3://) et de le mapper à un rôle IAM. L’emplacement situé sur le chemin S3 par défaut (s3://) couvre l’accès à tous vos compartiments S3 dans cette Région AWS de votre compte. Lorsque vous créez une autorisation d’accès, vous pouvez restreindre la portée de cette autorisation à un compartiment, à un préfixe ou à un objet situé à l’emplacement par défaut.

Cas d’utilisation complexes de gestion des accès

Les cas d’utilisation plus complexes liés à la gestion des accès peuvent vous obliger à enregistrer un autre emplacement que l’emplacement par défaut. Voici quelques exemples de tels cas d’utilisation :

  • Supposons qu’amzn-s3-demo-bucket soit un emplacement enregistré dans votre instance S3 Access Grants et qu’un rôle IAM lui soit associé, mais que ce rôle IAM se voit refuser l’accès à un préfixe particulier dans le compartiment. Dans ce cas, vous pouvez enregistrer le préfixe auquel le rôle IAM n’a pas accès en tant qu’emplacement distinct et associer cet emplacement à un autre rôle IAM disposant de l’accès nécessaire.

  • Supposons que vous souhaitiez créer des autorisations qui limitent l’accès aux utilisateurs au sein d’un point de terminaison de cloud privé virtuel (VPC). Dans ce cas, vous pouvez enregistrer un emplacement pour un compartiment dans lequel le rôle IAM restreint l’accès à ce point de terminaison du VPC. Ultérieurement, lorsqu’un bénéficiaire demandera des informations d’identification à S3 Access Grants, S3 Access Grants endossera le rôle IAM de l’emplacement pour fournir des informations d’identification temporaires. Ces informations d’identification refuseront l’accès au compartiment spécifique, sauf si l’appelant se trouve dans le point de terminaison du VPC. Cette autorisation de refus sera appliquée en plus de l’autorisation READ, WRITE ou READWRITE habituellement spécifiée dans l’autorisation d’accès.

Lorsque vous enregistrez un emplacement, vous devez également spécifier le rôle IAM que S3 Access Grants endosse pour fournir des informations d’identification temporaires et délimiter la portée d’une autorisation spécifique.

Si votre cas d’utilisation vous oblige à enregistrer plusieurs emplacements dans votre instance S3 Access Grants, vous pouvez enregistrer l’un des emplacements suivants :

URI S3 Rôle IAM Description
s3:// Default-IAM-role

L’emplacement par défaut, s3://, inclut tous les compartiments figurant dans la Région AWS.

s3://amzn-s3-demo-bucket1/ IAM-role-For-bucket

Cet emplacement inclut tous les objets figurant dans le compartiment spécifié.

s3://amzn-s3-demo-bucket1/prefix-name IAM-role-For-prefix

Cet emplacement inclut tous les objets du compartiment dont le nom de clé d’objet commence par ce préfixe.

Avant de pouvoir enregistrer un compartiment ou un préfixe spécifique, assurez-vous d’effectuer les opérations suivantes :

  • Créez un ou plusieurs compartiments contenant les données auxquelles vous souhaitez accorder l’accès. Ces compartiments doivent être situés dans la même Région AWS que votre instance S3 Access Grants. Pour plus d’informations, consultez Création d’un compartiment.

    L’ajout d’un préfixe est une étape facultative. Les préfixes sont les chaînes qui se trouvent au début du nom de la clé d’objet. Vous pouvez les utiliser pour organiser les objets dans votre compartiment ainsi que pour gérer les accès. Pour ajouter un préfixe à un compartiment, consultez Création de noms de clés d’objets.

  • Créez un rôle IAM qui dispose de l’autorisation nécessaire pour accéder à vos données S3 dans la Région AWS. Pour plus d’informations, consultez Création de rôles IAM dans le Guide de l’utilisateur AWS IAM Identity Center.

  • Dans la politique de confiance du rôle IAM, accordez au service S3 Access Grants (access-grants.s3.amazonaws.com) l’accès au rôle IAM que vous avez créé. Pour ce faire, vous pouvez créer un fichier JSON contenant les instructions suivantes. Pour ajouter la politique d’approbation à votre compte, consultez Création d’un rôle à l’aide de politiques d’approbation personnalisées.

    TestRolePolicy.json

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "TestRolePolicy", "Effect": "Allow", "Principal": { "Service": "access-grants.s3.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:s3::111122223333:access-grants/default" } } } ] }

    Sinon, pour un cas d’utilisation IAM Identity Center, utilisez la politique suivante qui inclut une deuxième instruction :

  • Créez une politique IAM pour attacher les autorisations Amazon S3 au rôle IAM que vous avez créé. Consultez l’exemple de fichier iam-policy.json suivant et remplacez les user input placeholders par vos propres informations.

    Note
    • Si vous utilisez le chiffrement côté serveur avec les clés AWS Key Management Service (AWS KMS) pour chiffrer vos données, l’exemple suivant ajoute les autorisations AWS KMS nécessaires pour le rôle IAM dans la politique. Si vous n’utilisez pas cette fonctionnalité, vous pouvez supprimer ces autorisations de votre politique IAM.

    • Vous pouvez faire en sorte que le rôle IAM ne puisse accéder aux données S3 que si les informations d’identification sont fournies par S3 Access Grants. Cet exemple montre comment ajouter une instruction Condition pour une instance S3 Access Grants spécifique. Pour utiliser cette Condition, remplacez l’ARN de l’instance S3 Access Grants dans l’instruction Condition par l’ARN de votre instance S3 Access Grants, au format suivant : arn:aws:s3:region:accountId:access-grants/default

    iam-policy.json

    { "Version":"2012-10-17", "Statement": [ { "Sid": "ObjectLevelReadPermissions", "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectVersionAcl", "s3:ListMultipartUploadParts" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:region:accountId:access-grants/default"] } } }, { "Sid": "ObjectLevelWritePermissions", "Effect":"Allow", "Action":[ "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectVersionAcl", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:AbortMultipartUpload" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:Région AWS:accountId:access-grants/default"] } } }, { "Sid": "BucketLevelReadPermissions", "Effect":"Allow", "Action":[ "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:Région AWS:accountId:access-grants/default"] } } }, //Optionally add the following section if you use SSE-KMS encryption { "Sid": "KMSPermissions", "Effect":"Allow", "Action":[ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource":[ "*" ] } ] }

Vous pouvez enregistrer un emplacement dans votre instance S3 Access Grants à l’aide de la console Amazon S3, de l’AWS Command Line Interface (AWS CLI), de l’API REST Amazon S3 ou des kits AWS SDK.

Note

Une fois que vous avez enregistré le premier emplacement dans votre instance S3 Access Grants, celle-ci ne dispose toujours d’aucune autorisation d’accès individuelle. Pour créer une autorisation d’accès, consultez Création d’octrois.

Avant de pouvoir accorder l’accès à vos données S3 avec S3 Access Grants, vous devez avoir au moins un emplacement enregistré.

Pour enregistrer un emplacement dans votre instance S3 Access Grants
  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon S3 à l’adresse https://console.aws.amazon.com/s3/.

  2. Dans le volet de navigation de gauche, choisissez Access Grants.

  3. Sur la page Octrois d’accès S3, choisissez la région qui contient l’instance d’octrois d’accès S3 qui vous intéresse.

    Si vous utilisez une instance S3 Access Grants pour la première fois, assurez-vous d’avoir terminé l’étape 1 : Créer une instance S3 Access Grants et d’être passé à l’étape 2 de l’Assistant Mise en place de l’instance Access Grants. Si vous possédez déjà une instance S3 Access Grants, choisissez Afficher les détails, puis, dans l’onglet Succursales, choisissez Enregistrer l’emplacement.

    1. Pour Champ d’application de l’emplacement, choisissez Parcourir S3 ou entrez le chemin d’URI S3 menant à l’emplacement que vous souhaitez enregistrer. Pour les formats d’URI S3, consultez le tableau des formats d’emplacement. Après avoir entré un URI, vous pouvez choisir Afficher pour accéder à l’emplacement.

    2. Pour Rôle IAM choisissez l’une des options suivantes :

      • Sélectionner parmi les rôles IAM existants

        Choisissez un rôle IAM dans la liste déroulante. Après avoir choisi un rôle, choisissez Afficher pour vous assurer que ce rôle dispose des autorisations nécessaires pour gérer l’emplacement que vous enregistrez. Plus précisément, assurez-vous que ce rôle accorde à S3 Access Grants les autorisations sts:AssumeRole et sts:SetSourceIdentity.

      • Saisir l’ARN du rôle IAM

        Accédez à la console IAM. Copiez l’Amazon Resource Name (ARN) du rôle IAM et collez-le dans cette zone.

    3. Pour terminer, choisissez Suivant ou Enregistrer l’emplacement.

  4. Résolution des problèmes :

    Impossible d’enregistrer l’emplacement
    • L’emplacement est peut-être déjà enregistré.

      Il se peut que vous n’ayez pas l’autorisation s3:CreateAccessGrantsLocation d’enregistrer des emplacements. Contactez l’administrateur de votre compte.

Pour installer la AWS CLI, consultez Installation de la AWS CLI dans le Guide de l’utilisateur AWS Command Line Interface.

Vous pouvez enregistrer l’emplacement par défaut, s3://, ou un emplacement personnalisé dans votre instance S3 Access Grants. Assurez-vous d’abord de créer un rôle IAM avec un accès principal à l’emplacement, puis d’accorder à S3 Access Grants l’autorisation d’endosser ce rôle.

Pour utiliser les exemples de commandes suivants, remplacez les user input placeholders par vos propres informations.

Exemple Créer une politique de ressources

Créez une politique permettant à S3 Access Grants d’endosser le rôle IAM. Pour ce faire, vous pouvez créer un fichier JSON contenant les instructions suivantes. Pour ajouter la politique de ressources à votre compte, consultez Créer et attacher votre première politique gérée par le client.

TestRolePolicy.json

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "Stmt1234567891011", "Action": ["sts:AssumeRole", "sts:SetSourceIdentity"], "Effect": "Allow", "Principal": {"Service": "access-grants.s3.amazonaws.com"} } ] }
Exemple Créer le rôle

Exécutez la commande IAM suivante pour créer le rôle.

aws iam create-role --role-name accessGrantsTestRole \ --region us-east-2 \ --assume-role-policy-document file://TestRolePolicy.json

L’exécution de la commande create-role renvoie la politique :

{ "Role": { "Path": "/", "RoleName": "accessGrantsTestRole", "RoleId": "AROASRDGX4WM4GH55GIDA", "Arn": "arn:aws:iam::111122223333:role/accessGrantsTestRole", "CreateDate": "2023-05-31T18:11:06+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1685556427189", "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Effect": "Allow", "Principal": { "Service":"access-grants.s3.amazonaws.com" } } ] } } }

Créez une politique IAM pour attacher les autorisations Amazon S3 au rôle IAM. Consultez l’exemple de fichier iam-policy.json suivant et remplacez les user input placeholders par vos propres informations.

Note

Si vous utilisez le chiffrement côté serveur avec les clés AWS Key Management Service (AWS KMS) pour chiffrer vos données, l’exemple suivant ajoute les autorisations AWS KMS nécessaires pour le rôle IAM dans la politique. Si vous n’utilisez pas cette fonctionnalité, vous pouvez supprimer ces autorisations de votre politique IAM.

Pour vous assurer que le rôle IAM ne peut être utilisé que pour accéder aux données dans S3 si les informations d’identification sont proposées par S3 Access Grants, cet exemple vous montre comment ajouter une déclaration Condition spécifiant l’instance S3 Access Grants (s3:AccessGrantsInstance: InstanceArn) dans votre politique IAM. Lorsque vous utilisez l’exemple de politique suivant, remplacez les user input placeholders par vos propres informations.

iam-policy.json

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "ObjectLevelReadPermissions", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectVersionAcl", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:us-east-1::access-grants/default"] } } }, { "Sid": "ObjectLevelWritePermissions", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectVersionAcl", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:s3:::*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:us-east-1::access-grants/default"] } } }, { "Sid": "BucketLevelReadPermissions", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:us-east-1::access-grants/default"] } } }, { "Sid": "KMSPermissions", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "kms:ViaService": "s3.us-east-1.amazonaws.com" } } } ] }

Exécutez la commande suivante :

aws iam put-role-policy \ --role-name accessGrantsTestRole \ --policy-name accessGrantsTestRole \ --policy-document file://iam-policy.json
Exemple Enregistrer l’emplacement par défaut
aws s3control create-access-grants-location \ --account-id 111122223333 \ --location-scope s3:// \ --iam-role-arn arn:aws:iam::111122223333:role/accessGrantsTestRole

Réponse :

{"CreatedAt": "2023-05-31T18:23:48.107000+00:00", "AccessGrantsLocationId": "default", "AccessGrantsLocationArn": "arn:aws:s3:us-east-2:111122223333:access-grants/default/location/default", "LocationScope": "s3://" "IAMRoleArn": "arn:aws:iam::111122223333:role/accessGrantsTestRole" }
Exemple Enregistrer un emplacement personnalisé
aws s3control create-access-grants-location \ --account-id 111122223333 \ --location-scope s3://DOC-BUCKET-EXAMPLE/ \ --iam-role-arn arn:aws:iam::123456789012:role/accessGrantsTestRole

Réponse :

{"CreatedAt": "2023-05-31T18:23:48.107000+00:00", "AccessGrantsLocationId": "635f1139-1af2-4e43-8131-a4de006eb456", "AccessGrantsLocationArn": "arn:aws:s3:us-east-2: 111122223333:access-grants/default/location/635f1139-1af2-4e43-8131-a4de006eb888", "LocationScope": "s3://DOC-BUCKET-EXAMPLE/", "IAMRoleArn": "arn:aws:iam::111122223333:role/accessGrantsTestRole" }

Pour plus d’informations sur la prise en charge de l’API REST Amazon S3 pour la gestion d’une instance S3 Access Grants, consultez les sections suivantes dans la Référence des API Amazon Simple Storage Service :

Cette section fournit des exemples illustrant la manière d’enregistrer des emplacements à l’aide des kits AWS SDK.

Pour utiliser les exemples suivants, remplacez user input placeholders par vos propres informations.

Java

Vous pouvez enregistrer l’emplacement par défaut, s3://, ou un emplacement personnalisé dans votre instance S3 Access Grants. Assurez-vous d’abord de créer un rôle IAM avec un accès principal à l’emplacement, puis d’accorder à S3 Access Grants l’autorisation d’endosser ce rôle.

Pour utiliser les exemples de commandes suivants, remplacez les user input placeholders par vos propres informations.

Exemple Enregistrer un emplacement par défaut

Requête :

public void createAccessGrantsLocation() { CreateAccessGrantsLocationRequest createRequest = CreateAccessGrantsLocationRequest.builder() .accountId("111122223333") .locationScope("s3://") .iamRoleArn("arn:aws:iam::123456789012:role/accessGrantsTestRole") .build(); CreateAccessGrantsLocationResponse createResponse = s3Control.createAccessGrantsLocation(createRequest); LOGGER.info("CreateAccessGrantsLocationResponse: " + createResponse); }

Réponse :

CreateAccessGrantsLocationResponse( CreatedAt=2023-06-07T04:35:11.027Z, AccessGrantsLocationId=default, AccessGrantsLocationArn=arn:aws:s3:us-east-2:111122223333:access-grants/default/location/default, LocationScope=s3://, IAMRoleArn=arn:aws:iam::111122223333:role/accessGrantsTestRole )
Exemple Enregistrer un emplacement personnalisé

Requête :

public void createAccessGrantsLocation() { CreateAccessGrantsLocationRequest createRequest = CreateAccessGrantsLocationRequest.builder() .accountId("111122223333") .locationScope("s3://DOC-BUCKET-EXAMPLE/") .iamRoleArn("arn:aws:iam::111122223333:role/accessGrantsTestRole") .build(); CreateAccessGrantsLocationResponse createResponse = s3Control.createAccessGrantsLocation(createRequest); LOGGER.info("CreateAccessGrantsLocationResponse: " + createResponse); }

Réponse :

CreateAccessGrantsLocationResponse( CreatedAt=2023-06-07T04:35:10.027Z, AccessGrantsLocationId=18cfe6fb-eb5a-4ac5-aba9-8d79f04c2012, AccessGrantsLocationArn=arn:aws:s3:us-east-2:111122223333:access-grants/default/location/18cfe6fb-eb5a-4ac5-aba9-8d79f04c2666, LocationScope= s3://test-bucket-access-grants-user123/, IAMRoleArn=arn:aws:iam::111122223333:role/accessGrantsTestRole )