Fédération SAML 2.0 - AWS Identity and Access Management

Fédération SAML 2.0

AWS prend en charge la fédération d'identité avec SAML 2.0 (Security Assertion Markup Language 2.0), une norme ouverte utilisée par de nombreux fournisseurs d'identité (IdP). Cette fonction active l’authentification unique (SSO) fédérée, permettant aux utilisateurs de se connecter à AWS Management Console ou d’appeler les opérations d’API AWS sans qu’il soit nécessaire de créer un utilisateur IAM pour chaque membre de l’organisation. L'utilisation de SAML permet de simplifier la configuration de la fédération avec AWS, car vous utilisez le service du fournisseur d'identité au lieu d'écrire du code proxy d'identité personnalisé.

Note

La fédération d’identité SAML IAM prend en charge les réponses SAML chiffrées des fournisseurs d’identité (IdP) fédérés basés sur le protocole SAML. IAM Identity Center et Amazon Cognito ne prennent pas en charge les assertions SAML chiffrées provenant des fournisseurs d’identité SAML IAM.

Vous pouvez ajouter indirectement la prise en charge des assertions SAML chiffrées à la fédération des groupes d’identités Amazon Cognito avec les groupes d’utilisateurs Amazon Cognito. Les groupes d’utilisateurs disposent d’une fédération SAML indépendante de la fédération SAML IAM et qui prend en charge la signature et le chiffrement SAML. Bien que cette fonctionnalité ne s’étende pas directement aux groupes d’identités, les groupes d’utilisateurs peuvent être des IdP ou des groupes d’identités. Pour utiliser le chiffrement SAML avec des groupes d’identités, ajoutez un fournisseur SAML avec chiffrement à un groupe d’utilisateurs qui est un IdP d’un groupe d’identités.

Votre fournisseur SAML doit être en mesure de chiffrer les assertions SAML à l’aide d’une clé fournie par votre groupe d’utilisateurs. Les groupes d’utilisateurs n’accepteront pas les assertions chiffrées à l’aide d’un certificat fourni par IAM.

La fédération IAM prend en charge les cas d'utilisation suivants :

Utilisation de la fédération SAML pour l'accès à l'API AWS

Supposons que vous voulez permettre aux employés de copier les données de leurs ordinateurs dans un dossier de sauvegarde. Vous créez une application que les utilisateurs peuvent exécuter sur leurs ordinateurs. Sur l’instance principale, l’application lit et écrit les objets dans un compartiment Amazon S3. Les utilisateurs ne disposent pas d'un accès direct à AWS. À la place, le processus suivant est utilisé :

Obtention d'informations d'identification de sécurité temporaires basée sur une assertion SAML
  1. A l'aide d'une application cliente, un utilisateur de l'organisation demande son authentification par l'IdP de l'organisation.

  2. L'IdP authentifie l'utilisateur en le comparant à la base d'identités de l'organisation.

  3. L'IdP crée une assertion SAML à l'aide des informations concernant l'utilisateur et l'envoie à l'application client. Lorsque vous activez le chiffrement SAML pour votre IdP SAML IAM, cette assertion est chiffrée par votre IdP externe.

  4. L'application cliente appelle l'API AWS STS AssumeRoleWithSAML, en transmettant l'ARN du fournisseur SAML, l'ARN du rôle à endosser et l'assertion SAML fournie par le fournisseur d'identité. Si le chiffrement est activé, l’assertion transmise via l’application cliente reste chiffrée pendant le transfert.

  5. (Facultatif) AWS STS utilise la clé privée que vous avez chargée depuis votre IdP externe pour déchiffrer l’assertion SAML chiffrée.

  6. La réponse de l'API à l'application cliente inclut des informations d'identification de sécurité temporaires.

  7. L'application cliente utilise ces informations d'identification de sécurité temporaires pour appeler les opérations d'API Amazon S3.

Présentation de la configuration de la fédération SAML 2.0

Avant de pouvoir utiliser la fédération SAML 2.0 comme décrit dans le scénario et le diagramme précédents, vous devez configurer l'IdP de votre organisation ainsi que votre Compte AWS afin d'établir une relation d'approbation entre eux. La procédure suivante décrit le processus général permettant de configurer cette relation d'approbation. Votre organisation doit utiliser un IdP prenant en charge SAML 2.0, comme Microsoft Active Directory Federation Service (services ADFS qui font partie de Windows Server), Shibboleth, ou tout autre fournisseur compatible avec SAML 2.0.

Note

Pour améliorer la résilience de la fédération, nous vous recommandons de configurer votre IdP et votre fédération AWS pour prendre en charge plusieurs points de terminaison de connexion SAML. Pour en savoir plus, consultez l'article du blog sur la sécurité d'AWS intitulé How to use regional SAML endpoints for failover.

Configuration de l’IdP de votre organisation ainsi qu’AWS afin d’établir une relation d’approbation entre eux
  1. Enregistrez AWS en tant que fournisseur de services (SP) auprès de l'IdP de votre organisation. Utilisez le document de métadonnées SAML à partir de https://region-code.signin.aws.amazon.com/static/saml-metadata.xml

    Pour obtenir la liste des valeurs possibles de region-code, consultez la colonne Region (Région) des AWS Sign-In endpoints (Points de terminaison de connexion).

    Vous pouvez éventuellement utiliser le document de métadonnées SAML à partir de https://signin.aws.amazon.com/static/saml-metadata.xml .

  2. À l’aide de l’IdP de l’organisation, vous générez un fichier XML de métadonnées SAML équivalent, capable de décrire cet IdP en tant que fournisseur d’identité IAM dans AWS. Il doit inclure le nom de l'auteur, une date de création et d'expiration et les clés qu'AWS peut utiliser pour valider les réponses d'authentification (assertions) de votre organisation.

    Si vous autorisez l’envoi d’assertions SAML chiffrées à partir de votre IdP externe, vous devez générer un fichier de clé privée à l’aide de l’IdP de votre organisation et charger ce fichier dans votre configuration SAML IAM au format .pem. AWS STS a besoin de cette clé privée pour déchiffrer les réponses SAML qui correspondent à la clé publique chargée vers votre IdP.

    Note

    Comme défini par la version 1.0 du profil d’interopérabilité des métadonnées SAML V2.0, IAM n’évalue pas et ne prend aucune mesure concernant l’expiration des certificats X.509 dans les documents de métadonnées SAML. Si vous êtes préoccupé par les certificats X.509 expirés, nous vous recommandons de surveiller les dates d’expiration des certificats et de les renouveler conformément aux politiques de gouvernance et de sécurité de votre organisation.

  3. Dans la console IAM, vous créez un fournisseur d’identité SAML. Au cours du processus, vous chargez le document de métadonnées SAML et la clé de déchiffrement privée générés par l’IdP de votre organisation à l’étape Étape 2. Pour de plus amples informations, consultez Création d’un fournisseur d’identité SAML dans IAM.

  4. Dans IAM, créez un ou plusieurs rôles IAM. Dans la politique d'approbation du rôle, vous définissez le fournisseur SAML en tant que principal. Ceci établit une relation d'approbation entre votre organisation et AWS. La politique d'autorisation du rôle détermine les actions que les utilisateurs de l'organisation sont autorisés à effectuer dans AWS. Pour de plus amples informations, consultez Créer un rôle pour un fournisseur d’identité tiers .

    Note

    Les IdP SAML utilisés dans une politique d'approbation de rôle doivent se trouver dans le même compte que le rôle.

  5. Dans l'IdP de l'organisation, vous définissez les assertions qui associent les utilisateurs et les groupes de l'organisation aux rôles IAM. Notez que différents utilisateurs et groupes de l'organisation peuvent être associés à différents rôles IAM. La procédure exacte pour leur mappage dépend de l'IdP utilisé. Dans le scénario précédent d'un dossier Amazon S3 pour les utilisateurs, tous les utilisateurs peuvent être associés au rôle qui fournit les autorisations Amazon S3. Pour plus d'informations, veuillez consulter Configuration d’assertions SAML pour la réponse d’authentification.

    Si votre IdP active la connexion avec authentification unique (SSO) à la console AWS, vous pouvez configurer la durée maximale des sessions de la console. Pour de plus amples informations, consultez Activation de l’accès des principaux fédérés SAML 2.0 à l’AWS Management Console.

  6. Dans l'application que vous créez, vous appelez l'API AWS Security Token Service AssumeRoleWithSAML, en lui transmettant l'ARN du fournisseur SAML créé à l'étape Étape 3, l'ARN du rôle à endosser, créé à l'étape Étape 4, et l'assertion SAML se rapportant à l'utilisateur actuel obtenue de votre IdP. AWS vérifie que la demande concernant le rôle à endosser provient de l'IdP référencé dans le fournisseur SAML.

    Pour plus d'informations, consultez AssumeRoleWithSAML dans le document Référence d'API AWS Security Token Service.

  7. Si la demande aboutit, l'API retourne des informations d'identification de sécurité temporaires que votre application peut utiliser pour adresser des demandes signées à AWS. Votre application dispose d'informations sur l'utilisateur actuel et peut accéder aux compartiments Amazon S3 spécifiques à celui-ci, comme décrit dans le scénario précédent.

Présentation du rôle qui autorise l'accès fédéré SAML à vos ressources AWS

Les rôles que vous créez dans IAM définissent ce que les principaux fédérés SAML de votre organisation sont en mesure d’effectuer dans AWS. Lorsque vous créez la politique d'approbation pour le rôle, vous spécifiez le fournisseur d'identité SAML créé précédemment en tant que Principal. Vous pouvez également ajouter une Condition à la politique d'approbation, afin d'autoriser uniquement les utilisateurs correspondant à certains attributs SAML à accéder au rôle. Par exemple, il est possible de spécifier que seuls les utilisateurs dont l'affiliation SAML est staff (comme stipulé sur https://openidp.feide.no) sont autorisés à accéder au rôle, comme illustré dans l'exemple de politique suivant :

JSON
{ "Version":"2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Federated": "arn:aws:iam::111122223333:saml-provider/ExampleOrgSSOProvider"}, "Action": "sts:AssumeRoleWithSAML", "Condition": { "StringEquals": { "saml:aud": "https://us-east-1.signin.aws.amazon.com/saml", "saml:iss": "https://openidp.feide.no" }, "ForAllValues:StringLike": {"saml:edupersonaffiliation": ["staff"]} } }] }
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws-cn:iam::111122223333:saml-provider/ExampleOrgSSOProvider" }, "Action": "sts:AssumeRoleWithSAML", "Condition": { "StringEquals": { "saml:aud": "https://ap-east-1.signin.amazonaws.cn/saml", "saml:iss": "https://openidp.feide.no" }, "ForAllValues:StringLike": { "saml:edupersonaffiliation": [ "staff" ] } } } ] }
Note

Les IdP SAML utilisés dans une politique d'approbation de rôle doivent se trouver dans le même compte que le rôle.

La clé contextuelle saml:aud dans la politique spécifie l’URL que votre navigateur affiche lorsque vous vous connectez à la console. Cette URL de point de terminaison de connexion doit correspondre à l’attribut du destinataire de votre fournisseur d’identité. Vous pouvez inclure des URL de connexion dans certaines régions. AWS recommande d’utiliser des points de terminaison régionaux plutôt que le point de terminaison global afin d’améliorer la résilience de la fédération. Si vous n’avez configuré qu’un seul point de terminaison, vous ne pourrez pas vous fédérer à AWS dans le cas peu probable où le point de terminaison deviendrait indisponible. Pour obtenir la liste des valeurs possibles de region-code, consultez la colonne Region (Région) des AWS Sign-In endpoints (Points de terminaison de connexion).

L’exemple suivant montre le format d’URL de connexion avec la region-code facultative.

https://region-code.signin.aws.amazon.com/saml

Si le chiffrement SAML est obligatoire, l’URL de connexion doit inclure l’identifiant unique qu’AWS attribue à votre fournisseur SAML, que vous trouverez sur la page de détails du fournisseur d’identité. Dans l’exemple suivant, l’URL de connexion comprend un identifiant unique d’IdP, qui nécessite l’ajout de /acs/ au chemin d’accès de connexion.

https://region-code.signin.aws.amazon.com/saml/acs/IdP-ID

Vous spécifiez la politique d'autorisation dans le rôle comme pour tout autre rôle. Par exemple, si les utilisateurs de votre organisation sont autorisés à administrer les instances Amazon Elastic Compute Cloud, vous devez autoriser explicitement les actions Amazon EC2 dans la politique d'autorisations, par exemple, celles de la politique gérée AmazonEC2FullAccess.

Pour plus d'informations sur les clés SAML que vous pouvez utiliser dans une politique, consultez Clés disponibles pour la fédération SAML AWS STS.

Identification unique des utilisateurs dans la fédération SAML

Lors de la création de politiques d'accès dans IAM, il est souvent utile de pouvoir spécifier des autorisations en fonction de l'identité des utilisateurs. Par exemple, dans le cas d'utilisateurs fédérés à l'aide de SAML, une application peut conserver les informations dans Amazon S3 à l'aide d'une structure similaire à celle-ci :

amzn-s3-demo-bucket/app1/user1 amzn-s3-demo-bucket/app1/user2 amzn-s3-demo-bucket/app1/user3

Vous pouvez créer le compartiment (amzn-s3-demo-bucket) et le dossier (app1) à l'aide de la console Amazon S3 ou de la AWS CLI, car il s'agit de valeurs statiques. Toutefois, les dossiers spécifiques aux utilisateurs (utilisateur1, utilisateur2, utilisateur3, etc.) doivent être créés à l'aide de code lors de l'exécution, car la valeur qui identifie l'utilisateur n'est pas connue jusqu'à la première authentification de l'utilisateur via le processus de fédération.

Pour créer des politiques qui référencent des détails spécifiques à l'utilisateur dans le nom d'une ressource, l'identité de l'utilisateur doit figurer dans des clés SAML pouvant être utilisées dans les conditions des politiques. Les clés suivantes sont disponibles pour la fédération basée sur SAML 2.0 à utiliser dans les politiques IAM. Vous pouvez utiliser les valeurs retournées par les clés suivantes pour créer des identifiants utilisateur uniques pour des ressources comme des dossiers Amazon S3.

  • AWS. Valeur de hachage basée sur la concaténation de la valeur de réponse Issuer (saml:iss) et d'une chaîne avec l'ID de compte saml:namequalifier et le nom convivial (dernière partie de l'ARN) du fournisseur SAML dans IAM. La concaténation de l'ID de compte et du nom convivial du fournisseur SAML est disponible dans les politiques IAM en tant que clé saml:doc. L'ID de compte et le nom du fournisseur doivent être séparés par un caractère « / », comme dans « 123456789012/provider_name ». Pour plus d'informations, reportez-vous à la clé saml:doc dans Clés disponibles pour la fédération SAML AWS STS.

    La combinaison de NameQualifier et Subject permet d’identifier de manière unique un principal fédéré SAML. L’exemple de pseudo-code suivant montre comment cette valeur est calculée. Dans ce pseudo-code, + indique une concaténation, SHA1 représente une fonction qui génère un résumé de message à l'aide de SHA-1 et Base64 représente une fonction qui génère une version encodée en Base64 de la sortie de hachage.

    Base64 ( SHA1 ( "https://example.com/saml" + "123456789012" + "/MySAMLIdP" ) )

    Pour plus d'informations sur les clés de politique disponibles pour la fédération SAML, consultez Clés disponibles pour la fédération SAML AWS STS.

  • saml:sub (chaîne). Objet de la demande, qui inclut une valeur qui identifie de manière unique un utilisateur individuel au sein d'une organisation (par exemple, _cbb88bf52c2510eabe00c1642d4643f41430fe25e3).

  • saml:sub_type (chaîne). Cette clé peut être persistent, transient ou l'URI Format complet des éléments Subject et NameID utilisés dans votre assertion SAML. Une va leur persistent indique que la valeur de saml:sub reste la même pour l'utilisateur pour toutes les sessions. Si la valeur est transient, l'utilisateur a une valeur saml:sub différente pour chaque session. Pour plus d'informations sur l'attribut NameID de l'élément Format, consultez Configuration d’assertions SAML pour la réponse d’authentification.

L'exemple suivant illustre une politique d'autorisation qui utilise les clés précédentes pour accorder des autorisations à un dossier spécifique à un utilisateur dans Amazon S3. La politique suppose que les objets Amazon S3 sont identifiés à l'aide d'un préfixe qui inclut à la fois saml:namequalifier et saml:sub. Notez que l'élément Condition inclut un test pour vérifier que la valeur de saml:sub_type est définie sur persistent. Si la valeur est transient, l'élément saml:sub de l'utilisateur peut être différent pour chaque session et vous ne devez pas combiner les valeurs pour identifier des dossiers spécifiques aux utilisateurs.

JSON
{ "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket-org-data/backup/${saml:namequalifier}/${saml:sub}", "arn:aws:s3:::amzn-s3-demo-bucket-org-data/backup/${saml:namequalifier}/${saml:sub}/*" ], "Condition": {"StringEquals": {"saml:sub_type": "persistent"}} } }
JSON
{ "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws-cn:s3:::amzn-s3-demo-bucket-org-data/backup/${saml:namequalifier}/${saml:sub}", "arn:aws-cn:s3:::amzn-s3-demo-bucket-org-data/backup/${saml:namequalifier}/${saml:sub}/*" ], "Condition": {"StringEquals": {"saml:sub_type": "persistent"}} } }

Pour plus d'informations sur le mappage d'assertions de l'IdP et les clés de politique, consultez Configuration d’assertions SAML pour la réponse d’authentification.