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 à AWS Identity and Access Management (IAM) principaux (utilisateurs ou rôles), à 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 IAM principaux, vous pouvez utiliser S3 Access Grants pour accorder l'accès directement aux utilisateurs et aux groupes de votre entreprise. Avec S3 Access Grants, vous n'avez plus besoin de mapper l'identité de votre entreprise à IAM des entités intermédiaires pour accéder à vos données S3 par le biais de 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 IAMIdentity Center prend en charge les fournisseurs d'identité basés sur des normes et est la plaque tournante de tous AWS les services ou fonctionnalités, y compris les subventions d'accès S3, qui prennent en charge les identités des utilisateurs finaux. IAMIdentity Center fournit un support d'authentification pour les identités d'entreprise grâce à sa fonction de propagation d'identité fiable. Pour plus d’informations, consultez Propagation d’identité approuvée entre applications.

Pour commencer à prendre en charge l'identité du personnel dans S3 Access Grants, vous devez d'abord configurer le provisionnement des IAM identités entre votre fournisseur d'identité d'entreprise et Identity Center dans IAM Identity Center. IAMIdentity Center soutient les fournisseurs d'identité d'entreprise tels que Okta, Microsoft Entra ID (anciennement Azure Active Directory), ou tout autre fournisseur d'identité externe (IdP) prenant en charge le protocole System for Cross-domain Identity Management ()SCIM. Lorsque vous connectez IAM Identity Center à votre IdP 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'Identity Center. IAM 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 Services AWS d'autres fonctionnalités, telles que S3 Access Grants. Pour plus d'informations sur la configuration du provisionnement automatique IAM d'Identity Center, consultez la section Provisionnement automatique dans le guide de l'AWS IAM Identity Center utilisateur.

IAMIdentity 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 classique, votre administrateur des identités configure une instance IAM Identity Center pour l'ensemble de l'organisation, en tant que point unique de synchronisation des identités. Cette instance IAM d'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 IAM d'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 d'IAMIdentity Center avec un IdP externe, l'IdP est configuré pour synchroniser le magasin d'SCIMidentités entre l'IdP et le magasin d'identités dans Identity Center. IAM

IAMIntégration d'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 des utilisateurs de l'annuaire d'entreprise aient besoin d'accéder à vos données S3 via une application d'entreprise, par exemple une application de visualisation de documents, intégrée à votre IdP 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 de l'annuaire ne sont pas des utilisateurs IAM principaux, votre application a besoin IAM d'informations d'identification avec lesquelles elle peut appeler l'GetDataAccessAPIopération S3 Access Grants afin d'obtenir des informations d'accès aux données S3 au nom des utilisateurs. Contrairement aux IAM utilisateurs et aux rôles qui obtiennent eux-mêmes des informations d'identification, votre application a besoin d'un moyen de représenter un utilisateur d'annuaire, qui n'est associé à IAM aucun rôle, afin que l'utilisateur puisse accéder aux données via S3 Access Grants.

Cette transition, d'un utilisateur d'annuaire authentifié à un IAM appelant capable de faire des demandes à S3 Access Grants au nom de l'utilisateur de l'annuaire, est effectuée par l'application via la fonctionnalité d'émetteur de jetons fiables d'IAMIdentity Center. Après avoir authentifié l'utilisateur de l'annuaire, l'application dispose d'un jeton d'identité provenant de l'IdP (par exemple, Okta) qui représente l'utilisateur de l'annuaire selon Okta. La configuration de l'émetteur de jetons fiables dans IAM Identity Center permet à l'application de les échanger. Okta jeton (le Okta le locataire est configuré en tant qu' « émetteur de confiance ») pour un jeton d'identité différent de celui d'IAMIdentity Center qui représentera en toute sécurité l'utilisateur du répertoire dans lequel il se trouve Services AWS. L'application de données jouera alors un IAM rôle en fournissant le jeton de l'utilisateur de l'annuaire depuis IAM Identity Center comme contexte supplémentaire. L'application peut utiliser la IAM session qui en résulte pour appeler S3 Access Grants. Le jeton représente à la fois l'identité de l'application (le IAM principal lui-même) et l'identité de l'utilisateur de l'annuaire.

L’étape principale de cette transition est l’échange de jetons. L'application effectue cet échange de jetons en appelant l'CreateTokenWithIAMAPIopération dans IAM Identity Center. Bien entendu, il s'agit également d'un AWS API appel qui doit être signé par le IAM directeur. Le IAM principal à l'origine de cette demande est généralement un IAM rôle associé à l'application. Par exemple, si l'application s'exécute sur AmazonEC2, la CreateTokenWithIAM demande est généralement exécutée par le IAM rôle associé à l'EC2instance 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 de l'annuaire, consiste à obtenir une IAM session incluant l'identité de l'utilisateur de l'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 de l'annuaire à l'étape suivante. Le IAM rôle assumé par l'application est celui qui aura besoin d'IAMautorisations pour appeler l'GetDataAccessopération.

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

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

Création d'une application IAM Identity Center

Créez d'abord une nouvelle application dans IAM Identity Center. Cette application utilisera un modèle qui permet à IAM Identity Center d'identifier le type de paramètres d'application que vous pouvez utiliser. La commande de création de l'application nécessite que vous fournissiez l'instance IAM Identity Center Amazon Resource Name (ARN), un nom d'application et le fournisseur de l'applicationARN. Le fournisseur d'applications est le fournisseur SAML OAuth d'applications que l'application utilisera pour passer 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 avez votre application IAM Identity Center, l'étape suivante consiste à configurer un émetteur de jetons de confiance qui sera utilisé pour échanger les IdToken valeurs de votre IdP IAM contre des jetons Identity Center. Dans cette étape, vous devez fournir les éléments suivants :

  • L'émetteur du fournisseur d'identité URL

  • Nom de l’émetteur de jetons approuvé

  • Chemin d’attribut de demande

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

  • L'option de récupération du kit de clés JSON Web (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" }

Connectez l'application IAM Identity Center à l'émetteur de jetons de confiance

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 indiquez l'émetteur ARN de jetons de confiance 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 OAuth JSON Web Token (JWT). Vous trouverez plus d'informations sur cet espace de noms dans RFC7523.

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 à associer une politique de ressources à l'application IAM Identity Center. Cette politique permettra à votre IAM rôle applicatif d'envoyer des demandes à l'APIopération sso-oauth:CreateTokenWithIAM et de recevoir les IdToken valeurs d'IAMIdentity 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 associer 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 lancer l'CreateTokenWithIAMAPIopération en utilisant la commande suivante à partir d'un IAM rôle 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 IdToken valeur 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. Voici un CLI exemple de 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 lors de cet appel pour appeler l's3:GetDataAccessAPIopération et recevoir les informations d'identification finales avec accès à vos ressources S3.