Passer au contenu principal
Avec les balises de session Amazon Web Services (AWS), vous pouvez baliser des ressources et attribuer aux utilisateurs des paires clé/valeur, ce qui vous permet de mettre en œuvre un contrôle d’accès basé sur les rôles (RBAC) pour les API et les ressources AWS. Dans l’exemple présenté dans ce guide, nous allons baliser nos ressources AWS avec des balises de session AWS, puis créer une politique pour un rôle AWS IAM qui permettra aux utilisateurs ayant ce rôle et les balises appropriées d’effectuer des actions précises sur nos ressources AWS. Nous créerons ensuite une règle dans Auth0 qui associera notre rôle AWS IAM et les balises de session AWS appropriées à un utilisateur Auth0, puis les transmettra au moyen d’assertions dans le jeton. Cet exemple s’appuie sur celui fourni dans Configurer Amazon Web Services pour l’authentification unique (SSO). Pour utiliser les balises de session AWS avec les API et les ressources AWS, vous devez :
  1. Baliser les instances AWS.
  2. Créer un rôle AWS IAM spécialisé.
  3. Créer une règle Auth0.
  4. Tester votre configuration.

Prérequis

Ajouter des balises aux instances AWS

Ajoutez des balises à vos ressources AWS. Suivez les instructions dans Amazon Elastic Compute Cloud: Tag your Amazon EC2 resources. Vous devriez avoir créé trois instances. Ajoutez les balises suivantes :
InstanceBalises
1Clé : CostCenter, valeur : marketing.
Clé : Project, valeur : website.
2Clé : CostCenter, valeur : engineering.
Clé : Project, valeur : management_dashboard.
3Clé : CostCenter, valeur : marketing.
Clé : Project, valeur : community_site.

Créer un rôle IAM AWS spécialisé

Créez un rôle IAM à l’aide du fournisseur d’identité SAML AWS que vous avez configuré dans les préalables. Suivez les instructions du Guide de l’utilisateur AWS Identity and Access Management : créer un rôle pour la fédération SAML 2.0 (console). Pendant la configuration de votre rôle, assurez-vous d’utiliser les paramètres suivants :
ParamètreDescription et exemple de valeur
Fournisseur SAMLNom du fournisseur d’identité que vous avez créé dans les préalables, par exemple auth0SamlProvider. Sélectionnez Autoriser l’accès programmatique et l’accès à la console de gestion AWS.
Lorsque vous êtes invité à Joindre des stratégies d’autorisation, créez une stratégie avec le JSON suivant et donnez-lui le nom VirtualMachineAccessByCostCenter.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/CostCenter": "<%= "${aws:PrincipalTag/CostCenter}" %>"
                }
            }
        }
    ]
}
Une fois la stratégie créée, actualisez la liste des stratégies du rôle, puis filtrez-la et sélectionnez la nouvelle stratégie. Lorsque vous passez en revue vos paramètres, assurez-vous d’utiliser les paramètres suivants :
ParamètreDescription
Nom du rôleNom descriptif de votre rôle, par exemple AccessByCostCenter.
Description du rôleDescription de l’usage prévu de votre rôle.

Créer une règle dans Auth0

Pour associer le rôle AWS et les balises à un utilisateur, vous devrez créer une règle dans Auth0. Ces valeurs seront ensuite transmises dans les assertions SAML du jeton. Pour cet exemple :
Remplacez la valeur de la variable awsAccount par votre propre numéro de compte.
function(user, context, callback) {
  var awsAccount = '013823792818';
  var rolePrefix = `arn:aws:iam::` + awsAccount; 
  var samlIdP = rolePrefix + `:saml-provider/auth0SamlProvider`;

  user.awsRole = rolePrefix + `:role/AccessByCostCenter,` + samlIdP;
  user.awsRoleSession = user.email;
  user.awsTagKeys = ['CostCenter', 'Project'];
  user.CostCenter = 'marketing';
  user.Project = 'website';

  context.samlConfiguration.mappings = {
    'https://aws.amazon.com/SAML/Attributes/Role': 'awsRole',
    'https://aws.amazon.com/SAML/Attributes/RoleSessionName': 'awsRoleSession',
    'https://aws.amazon.com/SAML/Attributes/PrincipalTag:CostCenter': 'CostCenter',
    'https://aws.amazon.com/SAML/Attributes/PrincipalTag:Project': 'Project'
  };

  callback(null, user, context);
}

Configuration de test

Vous devriez maintenant pouvoir vous connecter à la console AWS avec un utilisateur Auth0 et tester votre implémentation. Pour vous connecter, vous aurez besoin de l’ouverture de session pour la console AWS. Pour la trouver :
  1. Accédez à Dashboard > Applications > Applications et sélectionnez le nom de l’application pour l’afficher.
  2. Dans l’onglet Addons, activez le module complémentaire SAML2 Web App.
  3. Dans l’onglet Usage, repérez Identity Provider Login URL.
  4. Accédez à l’URL indiquée.
  5. Une fois connecté, dans EC2, sélectionnez Instances. Cliquez sur l’une des instances ayant un CostCenter de marketing, puis cliquez sur Actions > Instance State > Stop. Vous constaterez que l’action réussit.
  6. Cliquez sur l’instance ayant un CostCenter de engineering, puis cliquez sur Actions > Instance State > Stop. Vous constaterez que l’action échoue avec une erreur.

En savoir plus