

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.

# Tutoriel IAM : Utiliser un CloudFormation modèle pour créer un rôle IAM fédéré SAML
<a name="tutorial_saml-federated-role"></a>

Lorsqu'un fournisseur d'identité (IdP) SAML est déjà configuré dans AWS votre compte, vous pouvez créer des rôles IAM fédérés qui font confiance à cet IdP. Ce didacticiel explique comment utiliser un CloudFormation modèle pour créer un rôle IAM fédéré SAML qui peut être assumé par des utilisateurs authentifiés via votre IdP externe.

Le modèle crée un rôle IAM fédéré avec une politique d’approbation permettant à votre IdP SAML d’endosser le rôle. Les utilisateurs authentifiés par votre IdP externe peuvent endosser ce rôle pour accéder aux ressources AWS en fonction des autorisations associées au rôle.

La ressource déployée est composée des éléments suivants :
+ Un rôle IAM fédéré qui fait confiance à votre idP SAML existant.
+ Des politiques gérées configurables qui peuvent être associées au rôle afin d’accorder des autorisations spécifiques.
+ Des paramètres de limite d’autorisation et de durée de session facultatifs.

## Conditions préalables
<a name="tutorial_saml-federated-role-prereqs"></a>

Le didacticiel présume que vous avez déjà ce qui suit en place :
+ Un IdP SAML existant configuré dans AWS votre compte. Si vous n’en avez pas, vous pouvez en créer un à l’aide du didacticiel [Tutoriel IAM : Utiliser un CloudFormation modèle pour créer un fournisseur d'identité SAML (IdP)](tutorial_saml-idp.md).
+ L’ARN de votre IdP SAML, que vous devrez spécifier comme paramètre lors de la création de la pile.
+ Python 3.6 ou version ultérieure installée sur votre ordinateur local pour exécuter la commande Python utilisée dans ce didacticiel afin de formater le fichier XML des métadonnées SAML de votre IdP.

## Créez un rôle fédéré SAML à l'aide de CloudFormation
<a name="tutorial_saml-federated-role-create"></a>

Pour créer le rôle fédéré SAML, vous allez créer un CloudFormation modèle et l'utiliser pour créer une pile contenant le rôle.

### Création du modèle
<a name="tutorial_saml-federated-role-file"></a>

Créez d'abord le CloudFormation modèle.

1. Dans la section [Modèle](#tutorial_saml-federated-role-template), cliquez sur l’icône de copie dans l’onglet **JSON** ou **YAML** pour copier le contenu du modèle.

1. Copiez le contenu du modèle dans un nouveau fichier.

1. Enregistrez le fichier au niveau local.

### Créez la pile .
<a name="tutorial_saml-federated-role-stack"></a>

Ensuite, utilisez le modèle que vous avez enregistré pour approvisionner une CloudFormation pile.

1. Ouvrez la CloudFormation console à l'adresse [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Sur la page **Piles**, dans le menu **Créer une pile**, choisissez **Avec de nouvelles ressources (standard)**.

1. Spécifiez un modèle :

   1. Sous **Prérequis**, choisissez **Choisir un modèle existant**.

   1. Sous **Spécifier le modèle**, sélectionnez **Charger un modèle de fichier**.

   1. Choisissez **Choisir un fichier**, accédez au fichier du modèle, puis sélectionnez-le.

   1. Choisissez **Suivant**.

1. Spécifiez les détails de la pile suivants :

   1. Saisissez le nom de la pile.

   1. Pour l'**SAMLProviderARN**, entrez l'ARN de votre IdP SAML existant. Cela doit être au format `arn:aws:iam::123456789012:saml-provider/YourProviderName`.

      Exemple : `arn:aws:iam::123456789012:saml-provider/CompanyIdP`
**Note**  
Si vous avez créé votre IdP SAML à l'aide [Tutoriel IAM : Utiliser un CloudFormation modèle pour créer un fournisseur d'identité SAML (IdP)](tutorial_saml-idp.md) du didacticiel, vous trouverez l'ARN du fournisseur dans l'onglet Sorties de CloudFormation cette pile.

   1. En **RoleName**effet, vous pouvez laisser ce champ vide pour générer automatiquement un nom basé sur le nom de la pile, ou saisir un nom personnalisé pour le rôle IAM.

      Exemple : `SAML-Developer-Access` ou `SAML-ReadOnly-Role`

   1. Pour les autres paramètres, acceptez les valeurs par défaut ou saisissez les vôtres en fonction de vos besoins :
      + **RoleSessionDuration**- Durée maximale de session en secondes (3600-43200, 7200 par défaut)

        Exemple : `14400` (4 heures)
      + **RolePermissionsBoundary**- ARN facultatif d'une politique de limite d'autorisations

        Exemple : `arn:aws:iam::123456789012:policy/DeveloperBoundary`
      + **RolePath**- Chemin du rôle IAM (la valeur par défaut est/)

        Exemple : `/saml-roles/`
      + **ManagedPolicy1-5** - Possibilité ARNs de joindre jusqu'à 5 politiques gérées

        Exemple pour ManagedPolicy 1 : `arn:aws:iam::aws:policy/ReadOnlyAccess`

        Exemple pour ManagedPolicy 2 : `arn:aws:iam::123456789012:policy/CustomPolicy`

   1. Choisissez **Suivant**.

1. Configurez les options de pile :

   1. Sous **Options d’échec de pile**, choisissez **Supprimer toutes les ressources nouvellement créées**.
**Note**  
Le choix de cette option vous évite d’être facturé pour des ressources dont la politique de suppression indique qu’elles doivent être conservées même en cas d’échec de la création de la pile.

   1. Acceptez toutes les autres valeurs par défaut.

   1. Sous **Fonctionnalités**, cochez la case pour confirmer que des ressources IAM CloudFormation peuvent être créées dans votre compte.

   1. Choisissez **Suivant**.

1. Vérifiez les détails de la pile et choisissez **Envoyer**.

CloudFormation crée la pile. Une fois la création de la pile terminée, les ressources de la pile sont prêtes à être utilisées. Vous pouvez utiliser l’onglet **Ressources** de la page détaillée de la pile pour afficher les ressources provisionnées dans votre compte.

La pile produira la valeur suivante, que vous pouvez consulter dans l’onglet **Sorties** :
+ **RoleARN** : ARN du rôle IAM créé (par exemple, `arn:aws:iam::123456789012:role/SAML-Developer-Access` ou `arn:aws:iam::123456789012:role/stack-name-a1b2c3d4` si vous utilisez un nom généré automatiquement).

Vous aurez besoin de cet ARN de rôle lors de la configuration de votre IdP afin d’envoyer les attributs SAML appropriés pour l’attribution des rôles.

## Tester le rôle fédéré SAML
<a name="tutorial_saml-federated-role-using"></a>

Une fois le rôle fédéré SAML créé, vous pouvez vérifier sa configuration et tester la configuration de la fédération.

1. Ouvrez la console IAM à l’adresse [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Dans le panneau de navigation, choisissez **Rôles**.

1. Trouvez et choisissez le rôle fédéré que vous venez de créer.

   Si vous avez fourni un nom de rôle personnalisé, recherchez ce nom. Si vous avez laissé le RoleName paramètre vide, le rôle aura un nom généré automatiquement en fonction du nom de la pile et d'un identifiant unique.

1. Choisissez l’onglet **Relations de confiance** pour consulter la politique de confiance.

   La politique de confiance doit indiquer que votre IdP SAML est fiable pour assumer ce rôle à condition que l’audience SAML (`SAML:aud`) corresponde à `https://signin.aws.amazon.com/saml`.

1. Sélectionnez l’onglet **Autorisations** pour consulter les politiques associées.

   Vous pouvez voir toutes les politiques gérées associées au rôle lors de sa création.

1. Notez l’**ARN du rôle** affiché sur la page de résumé du rôle.

   Vous aurez besoin de cet ARN pour configurer votre IdP externe afin de permettre aux utilisateurs d’assumer ce rôle.

Votre rôle fédéré SAML est maintenant prêt à être utilisé. Configurez votre IdP externe pour inclure l'ARN de ce rôle dans les assertions SAML, et les utilisateurs authentifiés pourront assumer ce rôle pour accéder aux ressources. AWS 

## Nettoyage : supprimez les ressources
<a name="tutorial_saml-federated-role-delete"></a>

Enfin, vous allez supprimer la pile et les ressources qu’elle contient.

1. Ouvrez la CloudFormation console.

1. Sur la page **Piles**, choisissez la pile créée à partir du modèle, choisissez **Supprimer**, puis confirmez **Supprimer**.

   CloudFormation initie la suppression de la pile et de toutes les ressources qu'elle contient.

## CloudFormation détails du modèle
<a name="tutorial_saml-federated-role-template-details"></a>

### Ressources
<a name="tutorial_saml-federated-role-template-resources"></a>

Le CloudFormation modèle de ce didacticiel créera la ressource suivante dans votre compte :
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html) : un rôle IAM fédéré qui peut être endossé par les utilisateurs authentifiés via votre IdP SAML.

### Configuration
<a name="tutorial_saml-federated-role-configuration"></a>

Le modèle comprend les paramètres configurables suivants :
+ **RoleName**- Nom du rôle IAM (laissez le champ vide pour le nom généré automatiquement)
+ **SAMLProviderARN** : ARN de l'IdP SAML (obligatoire)
+ **RoleSessionDuration**- Durée maximale de session en secondes (3600-43200, 7200 par défaut)
+ **RolePermissionsBoundary**- ARN facultatif de la politique de limite des autorisations
+ **RolePath**- Chemin du rôle IAM (par défaut/)
+ **ManagedPolicy1-5** - Possibilité ARNs de joindre jusqu'à 5 politiques gérées

## CloudFormation modèle
<a name="tutorial_saml-federated-role-template"></a>

Enregistrez le code JSON ou YAML suivant dans un fichier distinct à utiliser comme CloudFormation modèle pour ce didacticiel.

------
#### [ JSON ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "[AWSDocs] IAM: tutorial_saml-federated-role",
  "Parameters": {
    "RoleName": {
      "Type": "String",
      "Description": "Name of the IAM Role (leave empty for auto-generated name like '{StackName}-{UniqueId}')",
      "Default": "",
      "AllowedPattern": "^$|^[\\w+=,.@-]{1,64}$",
      "ConstraintDescription": "Must be empty or 1-64 characters and can contain alphanumeric characters and +=,.@-"
    },
    "SAMLProviderARN": {
      "Type": "String",
      "Description": "ARN of the SAML Identity Provider",
      "AllowedPattern": "^arn:aws:iam::\\d{12}:saml-provider/[a-zA-Z0-9._-]+$",
      "ConstraintDescription": "Must be a valid SAML provider ARN"
    },
    "RoleSessionDuration": {
      "Type": "Number",
      "Description": "The maximum session duration (in seconds) that you want to set for the specified role (3600-43200)",
      "MinValue": 3600,
      "MaxValue": 43200,
      "Default": 7200
    },
    "RolePermissionsBoundary": {
      "Type": "String",
      "Description": "Optional ARN of the permissions boundary policy (leave empty for none)",
      "Default": ""
    },
    "RolePath": {
      "Type": "String",
      "Description": "Path for the IAM role (must start and end with /)",
      "Default": "/",
      "AllowedPattern": "^\/.*\/$|^\/$",
      "ConstraintDescription": "Role path must start and end with forward slash (/)"
    },
    "RoleManagedPolicy1": {
      "Type": "String",
      "Description": "Optional managed policy ARN 1",
      "Default": ""
    },
    "RoleManagedPolicy2": {
      "Type": "String",
      "Description": "Optional managed policy ARN 2",
      "Default": ""
    },
    "RoleManagedPolicy3": {
      "Type": "String",
      "Description": "Optional managed policy ARN 3",
      "Default": ""
    },
    "RoleManagedPolicy4": {
      "Type": "String",
      "Description": "Optional managed policy ARN 4",
      "Default": ""
    },
    "RoleManagedPolicy5": {
      "Type": "String",
      "Description": "Optional managed policy ARN 5",
      "Default": ""
    }
  },
  "Conditions": {
    "HasCustomRoleName": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleName"}, ""]}]},
    "HasPermissionsBoundary": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RolePermissionsBoundary"}, ""]}]},
    "HasPolicy1": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy1"}, ""]}]},
    "HasPolicy2": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy2"}, ""]}]},
    "HasPolicy3": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy3"}, ""]}]},
    "HasPolicy4": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy4"}, ""]}]},
    "HasPolicy5": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy5"}, ""]}]}
  },
  "Resources": {
    "SAMLFederatedRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "RoleName": {"Fn::If": ["HasCustomRoleName", {"Ref": "RoleName"}, {"Ref": "AWS::NoValue"}]},
        "Description": "IAM role with SAML provider trust",
        "MaxSessionDuration": {"Ref": "RoleSessionDuration"},
        "PermissionsBoundary": {"Fn::If": ["HasPermissionsBoundary", {"Ref": "RolePermissionsBoundary"}, {"Ref": "AWS::NoValue"}]},
        "Path": {"Ref": "RolePath"},
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Federated": {"Ref": "SAMLProviderARN"}
              },
              "Action": "sts:AssumeRoleWithSAML",
              "Condition": {
                "StringEquals": {
                  "SAML:aud": "https://signin.aws.amazon.com/saml"
                }
              }
            }
          ]
        },
        "ManagedPolicyArns": {
          "Fn::Split": [
            ",",
            {
              "Fn::Join": [
                ",",
                [
                  {"Fn::If": ["HasPolicy1", {"Ref": "RoleManagedPolicy1"}, {"Ref": "AWS::NoValue"}]},
                  {"Fn::If": ["HasPolicy2", {"Ref": "RoleManagedPolicy2"}, {"Ref": "AWS::NoValue"}]},
                  {"Fn::If": ["HasPolicy3", {"Ref": "RoleManagedPolicy3"}, {"Ref": "AWS::NoValue"}]},
                  {"Fn::If": ["HasPolicy4", {"Ref": "RoleManagedPolicy4"}, {"Ref": "AWS::NoValue"}]},
                  {"Fn::If": ["HasPolicy5", {"Ref": "RoleManagedPolicy5"}, {"Ref": "AWS::NoValue"}]}
                ]
              ]
            }
          ]
        }
      }
    }
  },
  "Outputs": {
    "RoleARN": {
      "Description": "ARN of the created IAM Role",
      "Value": {"Fn::GetAtt": ["SAMLFederatedRole", "Arn"]},
      "Export": {
        "Name": {"Fn::Sub": "${AWS::StackName}-RoleARN"}
      }
    }
  }
}
```

------
#### [ YAML ]

```
AWSTemplateFormatVersion: '2010-09-09'
Description: '[AWSDocs] IAM: tutorial_saml-federated-role'

Parameters:
  RoleName:
    Type: String
    Description: 'Name of the IAM Role (leave empty for auto-generated name like ''{StackName}-{UniqueId}'')'
    Default: ""
    AllowedPattern: '^$|^[\w+=,.@-]{1,64}$'
    ConstraintDescription: 'Must be empty or 1-64 characters and can contain alphanumeric characters and +=,.@-'
  
  SAMLProviderARN:
    Type: String
    Description: 'ARN of the SAML Identity Provider'
    AllowedPattern: '^arn:aws:iam::\d{12}:saml-provider/[a-zA-Z0-9._-]+$'
    ConstraintDescription: 'Must be a valid SAML provider ARN'
  
  RoleSessionDuration:
    Type: Number
    Description: 'The maximum session duration (in seconds) that you want to set for the specified role (3600-43200)'
    MinValue: 3600
    MaxValue: 43200
    Default: 7200
    
  RolePermissionsBoundary:
    Type: String
    Description: Optional ARN of the permissions boundary policy (leave empty for none)
    Default: ""

  RolePath:
    Type: String
    Description: 'Path for the IAM role (must start and end with /)'
    Default: "/"
    AllowedPattern: '^\/.*\/$|^\/$'
    ConstraintDescription: 'Role path must start and end with forward slash (/)'
  
  RoleManagedPolicy1:
    Type: String
    Description: Optional managed policy ARN 1
    Default: ""
  RoleManagedPolicy2:
    Type: String
    Description: Optional managed policy ARN 2
    Default: ""
  RoleManagedPolicy3:
    Type: String
    Description: Optional managed policy ARN 3
    Default: ""
  RoleManagedPolicy4:
    Type: String
    Description: Optional managed policy ARN 4
    Default: ""
  RoleManagedPolicy5:
    Type: String
    Description: Optional managed policy ARN 5
    Default: ""

Conditions:
  HasCustomRoleName: !Not [!Equals [!Ref RoleName, ""]]
  HasPermissionsBoundary: !Not [!Equals [!Ref RolePermissionsBoundary, ""]]
  HasPolicy1: !Not [!Equals [!Ref RoleManagedPolicy1, ""]]
  HasPolicy2: !Not [!Equals [!Ref RoleManagedPolicy2, ""]]
  HasPolicy3: !Not [!Equals [!Ref RoleManagedPolicy3, ""]]
  HasPolicy4: !Not [!Equals [!Ref RoleManagedPolicy4, ""]]
  HasPolicy5: !Not [!Equals [!Ref RoleManagedPolicy5, ""]]

Resources:
  SAMLFederatedRole:
    Type: 'AWS::IAM::Role'
    Properties:
      RoleName: !If
        - HasCustomRoleName
        - !Ref RoleName
        - !Ref AWS::NoValue
      Description: 'IAM role with SAML provider trust'
      MaxSessionDuration: !Ref RoleSessionDuration
      PermissionsBoundary: !If
        - HasPermissionsBoundary
        - !Ref RolePermissionsBoundary
        - !Ref AWS::NoValue
      Path: !Ref RolePath
      AssumeRolePolicyDocument:
        Version: '2012-10-17		 	 	 '
        Statement:
          - Effect: Allow
            Principal:
              Federated: !Ref SAMLProviderARN
            Action: 'sts:AssumeRoleWithSAML'
            Condition:
              StringEquals:
                'SAML:aud': 'https://signin.aws.amazon.com/saml'
      ManagedPolicyArns:
        !Split
          - ','
          - !Join
            - ','
            - - !If [HasPolicy1, !Ref RoleManagedPolicy1, !Ref 'AWS::NoValue']
              - !If [HasPolicy2, !Ref RoleManagedPolicy2, !Ref 'AWS::NoValue']
              - !If [HasPolicy3, !Ref RoleManagedPolicy3, !Ref 'AWS::NoValue']
              - !If [HasPolicy4, !Ref RoleManagedPolicy4, !Ref 'AWS::NoValue']
              - !If [HasPolicy5, !Ref RoleManagedPolicy5, !Ref 'AWS::NoValue']

Outputs:
  RoleARN:
    Description: 'ARN of the created IAM Role'
    Value: !GetAtt SAMLFederatedRole.Arn
    Export:
      Name: !Sub '${AWS::StackName}-RoleARN'
```

------