Octrois d’accès S3 et identités d’annuaire d’entreprise - Amazon Simple Storage Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Octrois d’accès S3 et identités d’annuaire d’entreprise

Vous pouvez utiliser les subventions d'accès Amazon S3 pour accorder l'accès aux principaux AWS Identity and Access Management (utilisateurs ou rôles) (IAM), à la fois dans le même environnement Compte AWS et dans d'autres. Toutefois, dans de nombreux cas, l’entité accédant aux données est un utilisateur final issu de votre annuaire d’entreprise. Au lieu d’accorder l’accès aux principaux IAM, vous pouvez utiliser les octrois d’accès S3 pour accorder l’accès directement aux utilisateurs et aux groupes de votre entreprise. Avec les octrois d’accès S3, vous n’avez plus besoin de mapper vos identités d’entreprise à des principaux IAM intermédiaires pour accéder à vos données S3 via vos applications d’entreprise.

Cette nouvelle fonctionnalité (prise en charge de l'utilisation des identités des utilisateurs finaux pour accéder aux données) est fournie en associant votre instance S3 Access Grants à une instance. AWS IAM Identity Center IAM Identity Center prend en charge les fournisseurs d'identité basés sur des normes et constitue la plaque tournante AWS pour tous les services ou fonctionnalités, y compris les subventions d'accès S3, qui prennent en charge les identités des utilisateurs finaux. IAM Identity Center fournit un support d’authentification pour les identités d’entreprise via sa fonctionnalité de propagation d’identité approuvée. Pour plus d’informations, consultez Propagation d’identité approuvée entre applications.

Pour commencer à prendre en charge l’identité du personnel dans les octrois d’accès S3, vous devez configurer au préalable le provisionnement des identités entre votre fournisseur d’identité d’entreprise et IAM Identity Center dans IAM Identity Center. IAM Identity Center prend en charge les fournisseurs d’identité d’entreprise tels que Okta, Microsoft Entra ID (anciennement Azure Active Directory) ou tout autre fournisseur d’identité (IdP) externe prenant en charge le protocole de mise en service du système de gestion des identités inter-domaines (SCIM). Lorsque vous connectez IAM Identity Center à votre fournisseur d’identité et que vous activez le provisionnement automatique, les utilisateurs et les groupes de votre IdP sont synchronisés dans le magasin d’identités d’IAM Identity Center. Après cette étape, IAM Identity Center dispose de sa propre vision de vos utilisateurs et de vos groupes, de sorte que vous pouvez y faire référence en utilisant d'autres Services AWS fonctionnalités, telles que S3 Access Grants. Pour plus d’informations sur la configuration du provisionnement automatique d’IAM Identity Center, consultez Provisionnement automatique dans le Guide de l’utilisateur AWS IAM Identity Center .

IAM Identity Center est intégré AWS Organizations afin que vous puissiez gérer de manière centralisée les autorisations sur plusieurs comptes Comptes AWS sans configurer manuellement chacun de vos comptes. Dans une organisation standard, votre administrateur d’identité configure une seule instance IAM Identity Center pour l’organisation tout entière, en tant que point unique de synchronisation des identités. Cette instance IAM Identity Center s'exécute généralement dans une instance dédiée Compte AWS de votre organisation. Dans cette configuration courante, vous pouvez faire référence aux identités des utilisateurs et des groupes dans S3 Access Grants depuis n'importe quel Compte AWS membre de l'organisation.

Toutefois, si votre AWS Organizations administrateur n'a pas encore configuré d'instance centrale d'IAM Identity Center, vous pouvez en créer une locale sur le même compte que votre instance S3 Access Grants. Une telle configuration est plus courante pour les cas proof-of-concept d'utilisation liés au développement local. Dans tous les cas, l'instance IAM Identity Center doit être Région AWS identique à l'instance S3 Access Grants à laquelle elle sera associée.

Dans le schéma suivant d’une configuration IAM Identity Center avec un IdP externe, le fournisseur d’identité est configuré avec SCIM pour synchroniser le magasin d’identités de l’IdP avec le magasin d’identités dans IAM Identity Center.

Intégration d’IAM Identity Center à un magasin d’identités externe via le provisionnement automatique

Pour utiliser vos identités d’annuaire d’entreprise avec les octrois d’accès S3, procédez comme suit :

Accès des identités d’annuaire aux données S3

Supposons que vous ayez des utilisateurs d’annuaire d’entreprise qui ont besoin d’accéder à vos données S3 via une application d’entreprise, par exemple, une visionneuse de documents intégrée à votre fournisseur d’identité externe (par exemple, Okta) pour authentifier les utilisateurs. L’authentification de l’utilisateur dans ces applications se fait généralement par le biais de redirections dans le navigateur Web de l’utilisateur. Comme les utilisateurs figurant dans l’annuaire ne sont pas des principaux IAM, votre application a besoin d’informations d’identification IAM pour appeler l’opération d’API GetDataAccess des octrois d’accès S3 afin d’obtenir des informations d’identification d’accès aux données S3 au nom des utilisateurs. Contrairement aux utilisateurs et aux rôles IAM qui obtiennent eux-mêmes des informations d’identification, votre application a besoin d’un moyen de représenter un utilisateur d’annuaire non mappé à un rôle IAM, afin que l’utilisateur puisse accéder aux données via les octrois d’accès S3.

Cette transition, d’un utilisateur d’annuaire authentifié à un appelant IAM capable d’adresser des demandes aux octrois d’accès S3 au nom de l’utilisateur d’annuaire, est effectuée par l’application via la fonctionnalité d’émetteur de jetons approuvé d’IAM Identity Center. Après avoir authentifié l’utilisateur d’annuaire, l’application dispose d’un jeton d’identité provenant du fournisseur d’identité (par exemple, Okta) qui représente l’utilisateur d’annuaire selon Okta. La configuration de l’émetteur de jetons approuvé dans IAM Identity Center permet à l’application d’échanger ce jeton Okta (le locataire Okta est configuré comme « émetteur approuvé ») contre un autre jeton d’identité issu d’IAM Identity Center qui représentera de manière sécurisée l’utilisateur d’annuaire au sein des Services AWS. L’application de données endosse alors un rôle IAM, fournissant le jeton de l’utilisateur d’annuaire provenant d’IAM Identity Center comme contexte supplémentaire. L’application peut utiliser la session IAM qui en résulte pour appeler des octrois d’accès S3. Le jeton représente à la fois l’identité de l’application (le principal IAM lui-même) et l’identité de l’utilisateur d’annuaire.

L’étape principale de cette transition est l’échange de jetons. L’application effectue cet échange de jetons en appelant l’opération d’API CreateTokenWithIAM dans IAM Identity Center. Bien entendu, il s'agit également d'un appel d' AWS API qui nécessite la signature d'un directeur IAM. Le principal IAM qui effectue cette demande est généralement un rôle IAM associé à l’application. Par exemple, si l’application s’exécute sur Amazon EC2, la demande CreateTokenWithIAM est généralement effectuée par le rôle IAM associé à l’instance EC2 sur laquelle l’application s’exécute. Le résultat d'un CreateTokenWithIAM appel réussi est un nouveau jeton d'identité, qui sera reconnu à l'intérieur Services AWS.

L’étape suivante, avant que l’application puisse appeler GetDataAccess au nom de l’utilisateur d’annuaire, consiste pour l’application à obtenir une session IAM incluant l’identité de l’utilisateur d’annuaire. Pour ce faire, l'application utilise une AssumeRole demande AWS Security Token Service (AWS STS) qui inclut également le jeton IAM Identity Center pour l'utilisateur de l'annuaire en tant que contexte d'identité supplémentaire. Ce contexte supplémentaire permet à IAM Identity Center de propager l’identité de l’utilisateur d’annuaire à l’étape suivante. Le rôle IAM endossé par l’application est celui qui nécessitera des autorisations IAM pour appeler l’opération GetDataAccess.

Après avoir endossé le rôle IAM du porteur d’identité avec le jeton IAM Identity Center pour l’utilisateur d’annuaire comme contexte supplémentaire, l’application dispose désormais de tout ce dont elle a besoin pour adresser une demande signée à GetDataAccess au nom de l’utilisateur d’annuaire authentifié.

La propagation des jetons se base sur les étapes suivantes :

Création d’une application IAM Identity Center

Commencez par créer une nouvelle application dans IAM Identity Center. Cette application utilisera un modèle permettant à IAM Identity Center d’identifier le type de paramètres d’application que vous pouvez utiliser. La commande pour créer l’application nécessite que vous fournissiez l’Amazon Resource Name (ARN) de l’instance IAM Identity Center, un nom d’application et l’ARN du fournisseur d’application. Le fournisseur d’application est le fournisseur d’application SAML ou OAuth que l’application utilisera pour effectuer des appels à IAM Identity Center.

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

aws sso-admin create-application \ --instance-arn "arn:aws:sso:::instance/ssoins-ssoins-1234567890abcdef" \ --application-provider-arn "arn:aws:sso::aws:applicationProvider/custom" \ --name MyDataApplication

Réponse :

{ "ApplicationArn": "arn:aws:sso::123456789012:application/ssoins-ssoins-1234567890abcdef/apl-abcd1234a1b2c3d" }

Création d’un émetteur de jetons approuvé

Maintenant que vous disposez d’une application IAM Identity Center, l’étape suivante consiste à configurer un émetteur de jetons approuvé qui permettra d’échanger vos valeurs IdToken de votre fournisseur d’identité contre des jetons IAM Identity Center. Dans cette étape, vous devez fournir les éléments suivants :

  • URL de l’émetteur du fournisseur d’identité

  • Nom de l’émetteur de jetons approuvé

  • Chemin d’attribut de demande

  • Chemin d’attribut de magasin d’identités

  • Option de récupération de l’ensemble de clés web JSON (JWKS)

Le chemin d’attribut de demande est l’attribut du fournisseur d’identité qui sera utilisé pour la mappage à l’attribut de magasin d’identités. Normalement, le chemin d’attribut de demande est l’adresse e-mail de l’utilisateur, mais vous pouvez utiliser d’autres attributs pour effectuer le mappage.

Créez un fichier appelé oidc-configuration.json avec les informations suivantes. Pour utiliser ce fichier, remplacez les user input placeholders par vos propres informations.

{ "OidcJwtConfiguration": { "IssuerUrl": "https://login.microsoftonline.com/a1b2c3d4-abcd-1234-b7d5-b154440ac123/v2.0", "ClaimAttributePath": "preferred_username", "IdentityStoreAttributePath": "userName", "JwksRetrievalOption": "OPEN_ID_DISCOVERY" } }

Pour créer l’émetteur de jetons approuvé, exécutez la commande suivante. Pour utiliser cet exemple de commande, remplacez user input placeholders par vos propres informations.

aws sso-admin create-trusted-token-issuer \ --instance-arn "arn:aws:sso:::instance/ssoins-1234567890abcdef" \ --name MyEntraIDTrustedIssuer \ --trusted-token-issuer-type OIDC_JWT \ --trusted-token-issuer-configuration file://./oidc-configuration.json

Réponse

{ "TrustedTokenIssuerArn": "arn:aws:sso::123456789012:trustedTokenIssuer/ssoins-1234567890abcdef/tti-43b4a822-1234-1234-1234-a1b2c3d41234" }

Connexion de l’application IAM Identity Center à l’émetteur de jetons approuvé

L’émetteur de jetons approuvé a besoin de quelques paramètres de configuration supplémentaires pour fonctionner. Définissez l’audience à laquelle l’émetteur de jetons approuvé fera confiance. L’audience est la valeur figurant dans IdToken qui est identifiée par la clé et qui se trouve dans les paramètres du fournisseur d’identité. Par exemple :

1234973b-abcd-1234-abcd-345c5a9c1234

Créez un fichier nommé grant.json qui contient le contenu suivant. Pour utiliser ce fichier, modifiez l’audience afin qu’elle corresponde aux paramètres de votre fournisseur d’identité et fournissez l’ARN de l’émetteur de jetons approuvé renvoyé par la commande précédente.

{ "JwtBearer": { "AuthorizedTokenIssuers": [ { "TrustedTokenIssuerArn": "arn:aws:sso::123456789012:trustedTokenIssuer/ssoins-1234567890abcdef/tti-43b4a822-1234-1234-1234-a1b2c3d41234", "AuthorizedAudiences": [ "1234973b-abcd-1234-abcd-345c5a9c1234" ] } ] } }

Exécutez l’exemple de commande suivant. Pour utiliser cette commande, remplacez user input placeholders par vos propres informations.

aws sso-admin put-application-grant \ --application-arn "arn:aws:sso::123456789012:application/ssoins-ssoins-1234567890abcdef/apl-abcd1234a1b2c3d" \ --grant-type "urn:ietf:params:oauth:grant-type:jwt-bearer" \ --grant file://./grant.json \

Cette commande définit les paramètres de configuration de l’émetteur de jetons approuvé pour qu’il fasse confiance à l’audience définie dans le fichier grant.json et relie cette audience à l’application créée à la première étape pour échanger des jetons du type jwt-bearer. La chaîne urn:ietf:params:oauth:grant-type:jwt-bearer n’est pas une chaîne arbitraire. Il s’agit d’un espace de noms enregistré dans les profils d’assertion de jeton Web JSON (JWT) OAuth. Vous trouverez plus d’informations sur cet espace de noms dans la RFC 7523.

Ensuite, utilisez la commande suivante pour définir les portées que l’émetteur de jetons approuvé inclura lors de l’échange de valeurs IdToken à partir de votre fournisseur d’identité. Pour les octrois d’accès S3, la valeur du paramètre --scope est s3:access_grants:read_write.

aws sso-admin put-application-access-scope \ --application-arn "arn:aws:sso::111122223333:application/ssoins-ssoins-111122223333abcdef/apl-abcd1234a1b2c3d" \ --scope "s3:access_grants:read_write"

La dernière étape consiste à attacher une politique de ressources à l’application IAM Identity Center. Cette politique permettra au rôle IAM de votre application d’adresser des demandes à l’opération d’API sso-oauth:CreateTokenWithIAM et de recevoir les valeurs IdToken d’IAM Identity Center.

Créez un fichier nommé authentication-method.json qui contient le contenu suivant. Remplacez 123456789012 par votre ID de compte.

{ "Iam": { "ActorPolicy": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/webapp" }, "Action": "sso-oauth:CreateTokenWithIAM", "Resource": "*" } ] } } }

Pour attacher la politique à l’application IAM Identity Center, exécutez la commande suivante :

aws sso-admin put-application-authentication-method \ --application-arn "arn:aws:sso::123456789012:application/ssoins-ssoins-1234567890abcdef/apl-abcd1234a1b2c3d" \ --authentication-method-type IAM \ --authentication-method file://./authentication-method.json

Ceci complète les paramètres de configuration pour l’utilisation des octrois d’accès S3 avec les utilisateurs d’annuaire via une application Web. Vous pouvez tester cette configuration directement dans l’application ou vous pouvez appeler l’opération d’API CreateTokenWithIAM en utilisant la commande suivante à partir d’un rôle IAM autorisé dans la politique d’application IAM Identity Center :

aws sso-oidc create-token-with-iam \ --client-id "arn:aws:sso::123456789012:application/ssoins-ssoins-1234567890abcdef/apl-abcd1234a1b2c3d" \ --grant-type urn:ietf:params:oauth:grant-type:jwt-bearer \ --assertion IdToken

La réponse sera similaire à ceci :

{ "accessToken": "<suppressed long string to reduce space>", "tokenType": "Bearer", "expiresIn": 3600, "refreshToken": "<suppressed long string to reduce space>", "idToken": "<suppressed long string to reduce space>", "issuedTokenType": "urn:ietf:params:oauth:token-type:refresh_token", "scope": [ "sts:identity_context", "s3:access_grants:read_write", "openid", "aws" ] }

Si vous décodez la valeur IdToken codée en base64, vous pouvez voir les paires clé-valeur au format JSON. La clé sts:identity_context contient la valeur que votre application doit envoyer dans la demande sts:AssumeRole pour inclure les informations d’identité de l’utilisateur d’annuaire. Voici un exemple de valeur IdToken décodée :

{ "aws:identity_store_id": "d-996773e796", "sts:identity_context": "AQoJb3JpZ2luX2VjEOTtl;<SUPRESSED>", "sub": "83d43802-00b1-7054-db02-f1d683aacba5", "aws:instance_account": "123456789012", "iss": "https://identitycenter.amazonaws.com/ssoins-1234567890abcdef", "sts:audit_context": "AQoJb3JpZ2luX2VjEOT<SUPRESSED>==", "aws:identity_store_arn": "arn:aws:identitystore::232642235904:identitystore/d-996773e796", "aud": "abcd12344U0gi7n4Yyp0-WV1LWNlbnRyYWwtMQ", "aws:instance_arn": "arn:aws:sso:::instance/ssoins-6987d7fb04cf7a51", "aws:credential_id": "EXAMPLEHI5glPh40y9TpApJn8...", "act": { "sub": "arn:aws:sso::232642235904:trustedTokenIssuer/ssoins-6987d7fb04cf7a51/43b4a822-1020-7053-3631-cb2d3e28d10e" }, "auth_time": "2023-11-01T20:24:28Z", "exp": 1698873868, "iat": 1698870268 }

Vous pouvez obtenir la valeur à partir de sts:identity_context et transmettre ces informations dans un appel sts:AssumeRole. Vous trouverez ci-dessous un exemple CLI de la syntaxe. Le rôle à endosser est un rôle temporaire avec des autorisations pour invoquer s3:GetDataAccess.

aws sts assume-role \ --role-arn "arn:aws:iam::123456789012:role/temp-role" \ --role-session-name "TempDirectoryUserRole" \ --provided-contexts ProviderArn="arn:aws:iam::aws:contextProvider/IdentityCenter",ContextAssertion="value from sts:identity_context"

Vous pouvez désormais utiliser les informations d’identification reçues à partir de cet appel pour invoquer l’opération d’API s3:GetDataAccess et recevoir les informations d’identification finales avec accès à vos ressources S3.