Demande d’un accès aux données Amazon S3 via S3 Access Grants - Amazon Simple Storage Service

Demande d’un accès aux données Amazon S3 via S3 Access Grants

Une fois que vous avez créé une autorisation d’accès à l’aide de S3 Access Grants, les bénéficiaires peuvent demander des informations d’identification pour accéder aux données S3 auxquelles ils ont été autorisés à accéder. Les bénéficiaires peuvent être des principaux AWS Identity and Access Management (IAM), des identités de votre annuaire d’entreprise ou des applications autorisées.

Une application ou un Service AWS peut utiliser l’opération d’API GetDataAccess de S3 Access Grants pour lui demander l’accès à vos données S3 au nom d’un bénéficiaire. GetDataAccess commence par vérifier que vous avez accordé l’accès aux données à cette d’identité. S3 Access Grants utilise l’opération d’API AssumeRole pour obtenir un jeton d’informations d’identification temporaire et le transmettent au demandeur. Ce jeton d’informations d’identification temporaire est un jeton AWS Security Token Service (AWS STS).

La demande GetDataAccess doit inclure le paramètre target, qui spécifie la portée des données S3 à laquelle s’appliquent les informations d’identification temporaires. Cette portée target peut être identique à celle de l’autorisation ou à un sous-ensemble de cette portée, mais la portée target doit être comprise dans la portée de l’autorisation accordée au bénéficiaire. La demande doit également spécifier le paramètre permission pour indiquer le niveau d’autorisation pour les informations d’identification temporaires, que ce soit READ, WRITE ou READWRITE.

Privilège

Le demandeur peut spécifier le niveau de privilège du jeton temporaire dans sa demande d’informations d’identification. À l’aide du paramètre privilege, le demandeur peut réduire ou augmenter la portée d’accès des informations d’identification temporaires, dans les limites de la portée de l’octroi. La valeur par défaut du paramètre privilege est Default, ce qui signifie que la portée cible des informations d’identification renvoyées est la portée de l’octroi d’origine. L’autre valeur possible pour privilege est Minimal. Si la portée target est réduite par rapport à la portée de l’octroi d’origine, la portée des informations d’identification temporaires est désactivée pour correspondre à la portée target, à condition que la portée target soit comprise dans la portée de l’octroi.

Le tableau suivant détaille l’effet du paramètre privilege sur deux octrois. Un octroi a la portée S3://amzn-s3-demo-bucket1/bob/*, qui inclut l’intégralité du préfixe bob/ dans le compartiment amzn-s3-demo-bucket1. L’autre octroi a la portée S3://amzn-s3-demo-bucket1/bob/reports/*, qui inclut uniquement le préfixe bob/reports/ dans le compartiment amzn-s3-demo-bucket1.

Portée de l’octroi Portée demandée Privilège Portée renvoyée Effet
S3://amzn-s3-demo-bucket1/bob/* amzn-s3-demo-bucket1/bob/* Default amzn-s3-demo-bucket1/bob/*

Le demandeur a accès à tous les objets qui ont des noms de clé commençant par le préfixe bob/ dans le compartiment amzn-s3-demo-bucket1.

S3://amzn-s3-demo-bucket1/bob/* amzn-s3-demo-bucket1/bob/ Minimal amzn-s3-demo-bucket1/bob/

Sans le caractère générique * après le nom de préfixe bob/, le demandeur n’a accès qu’à l’objet nommé bob/ dans le compartiment amzn-s3-demo-bucket1. Il n’est pas courant d’avoir un tel objet. Le demandeur n’a accès à aucun autre objet, pas même à ceux ayant des noms de clé commençant par le préfixe bob/.

S3://amzn-s3-demo-bucket1/bob/* amzn-s3-demo-bucket1/bob/images/* Minimal amzn-s3-demo-bucket1/bob/images/*

Le demandeur a accès à tous les objets qui ont des noms de clé commençant par le préfixe bob/images/* dans le compartiment amzn-s3-demo-bucket1.

S3://amzn-s3-demo-bucket1/bob/reports/* amzn-s3-demo-bucket1/bob/reports/file.txt Default amzn-s3-demo-bucket1/bob/reports/*

Le demandeur a accès à tous les objets qui ont des noms de clé commençant par le préfixe bob/reports dans le compartiment amzn-s3-demo-bucket1, ce qui correspond à la portée de l’octroi correspondant.

S3://amzn-s3-demo-bucket1/bob/reports/* amzn-s3-demo-bucket1/bob/reports/file.txt Minimal amzn-s3-demo-bucket1/bob/reports/file.txt

Le demandeur a accès uniquement à l’objet doté du nom de clé bob/reports/file.txt dans le compartiment amzn-s3-demo-bucket1. Le demandeur n’a accès à aucun autre objet.

Identités des annuaires

GetDataAccess prend en compte toutes les identités impliquées dans une demande lors de la recherche d’autorisations appropriées. Pour les identités d’annuaire d’entreprise, GetDataAccess renvoie également les autorisations de l’identité IAM utilisée pour la session basée sur l’identité. Pour plus d’informations sur les sessions basées sur l’identité, consultez Octroi d’autorisations pour l’utilisation de sessions de console basées sur l’identité dans le Guide de l’utilisateur AWS Identity and Access Management. GetDataAccess génère des informations d’identification limitant la portée à l’autorisation la plus restrictive, comme indiqué dans la table suivante :

Portée de l’autorisation pour l’identité IAM Portée de l’autorisation pour une identité de l’annuaire Portée demandée Portée renvoyée Privilège Effet
S3://amzn-s3-demo-bucket1/bob/* amzn-s3-demo-bucket1/bob/images/* S3://amzn-s3-demo-bucket1/bob/images/image1.jpeg S3://amzn-s3-demo-bucket1/bob/images/* Default

Le demandeur a accès à tous les objets dont le nom de clé commence par le préfixe bob/ dans le cadre de l’autorisation du rôle IAM. En revanche, l’accès est limité aux préfixes bob/images/ dans le cadre de l’autorisation de l’identité de l’annuaire. Le rôle IAM et l’identité de l’annuaire fournissent tous deux un accès à la portée demandée, à savoir bob/images/image1.jpeg, mais l’identité de l’annuaire bénéficie d’une autorisation plus restrictive. La portée renvoyée est donc limitée à l’autorisation la plus restrictive de l’identité de l’annuaire.

S3://amzn-s3-demo-bucket1/bob/* amzn-s3-demo-bucket1/bob/images/* S3://amzn-s3-demo-bucket1/bob/images/image1.jpeg S3://amzn-s3-demo-bucket1/bob/images/image1.jpeg Minimal

Étant donné que le privilège est défini sur Minimal, même si l’identité a accès à une plus grande porté, seule la portée demandée est renvoyée : bob/images/image1.jpeg.

S3://amzn-s3-demo-bucket1/bob/images/* amzn-s3-demo-bucket1/bob/* S3://amzn-s3-demo-bucket1/bob/images/image1.jpeg S3://amzn-s3-demo-bucket1/bob/images/* Default

Le demandeur a accès à tous les objets dont le nom de clé commence par le préfixe bob/ dans le cadre de l’autorisation de l’identité de l’annuaire. En revanche, l’accès est limité aux préfixes bob/images/ dans le cadre de l’autorisation du rôle IAM. Le rôle IAM et l’identité de l’annuaire fournissent tous deux un accès à la portée demandée, à savoir bob/images/image1.jpeg, mais le rôle IAM bénéficie d’une autorisation plus restrictive. La portée renvoyée est donc limitée à l’autorisation la plus restrictive du rôle IAM.

S3://amzn-s3-demo-bucket1/bob/images/* amzn-s3-demo-bucket1/bob/* S3://amzn-s3-demo-bucket1/bob/images/image1.jpeg S3://amzn-s3-demo-bucket1/bob/images/image1.jpeg Minimal

Étant donné que le privilège est défini sur Minimal, même si l’identité a accès à une plus grande porté, seule la portée demandée est renvoyée : bob/images/image1.jpeg.

Durée

Le paramètre durationSeconds définit la durée des informations d’identification temporaires, en secondes. La valeur par défaut est de 3600 secondes (1 heure), mais le demandeur (le bénéficiaire) peut spécifier une plage allant de 900 secondes (15 minutes) à 43200 secondes (12 heures). Si le bénéficiaire demande une valeur supérieure à ce maximum, la demande échoue.

Note

Dans votre demande de jeton temporaire, si l’emplacement est un objet, définissez la valeur du paramètre targetType dans votre demande sur Object. Ce paramètre est obligatoire seulement si l’emplacement est un objet et que le niveau de privilège est Minimal. Si l’emplacement est un compartiment ou un préfixe, vous n’avez pas besoin de spécifier ce paramètre.

Exemples

Vous pouvez demander des informations d’identification temporaires en utilisant l’AWS Command Line Interface (AWS CLI), l’API REST Amazon S3 ou les kits AWS SDK. Veuillez consulter ces exemples.

Pour plus d’informations, consultez GetDataAccess dans la Référence des API Amazon Simple Storage Service.

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

Pour utiliser l’exemple de commande suivant, remplacez les user input placeholders par vos propres informations.

Exemple Demander des informations d’identification temporaires

Requête :

aws s3control get-data-access \ --account-id 111122223333 \ --target s3://amzn-s3-demo-bucket/prefixA* \ --permission READ \ --privilege Default \ --region us-east-2

Réponse :

{ "Credentials": { "AccessKeyId": "Example-key-id", "SecretAccessKey": "Example-access-key", "SessionToken": "Example-session-token", "Expiration": "2023-06-14T18:56:45+00:00"}, "MatchedGrantTarget": "s3://amzn-s3-demo-bucket/prefixA**", "Grantee": { "GranteeType": "IAM", "GranteeIdentifier": "arn:aws:iam::111122223333:role/role-name" } }

Pour en savoir plus sur la prise en charge de l’API REST Amazon S3 pour demander des informations d’identification temporaires auprès de S3 Access Grants, consultez GetDataAccess dans la Référence des API Amazon Simple Storage Service.

Cette section fournit un exemple illustrant la manière dont les bénéficiaires demandent des informations d’identification temporaires à S3 Access Grants à l’aide des kits AWS SDK.

Java

L’exemple de code suivant renvoie les informations d’identification temporaires que le bénéficiaire utilise pour accéder à vos données S3. Pour utiliser cet exemple de code, remplacez les user input placeholders par vos propres informations.

Exemple Obtenir des informations d’identification temporaires

Requête :

public void getDataAccess() { GetDataAccessRequest getDataAccessRequest = GetDataAccessRequest.builder() .accountId("111122223333") .permission(Permission.READ) .privilege(Privilege.MINIMAL) .target("s3://amzn-s3-demo-bucket/prefixA*") .build(); GetDataAccessResponse getDataAccessResponse = s3Control.getDataAccess(getDataAccessRequest); LOGGER.info("GetDataAccessResponse: " + getDataAccessResponse); }

Réponse :

GetDataAccessResponse( Credentials=Credentials( AccessKeyId="Example-access-key-id", SecretAccessKey="Example-secret-access-key", SessionToken="Example-session-token", Expiration=2023-06-07T06:55:24Z ))