Utiliser les balises de session Amazon Web Services pour le contrôle d'accès basé sur les rôles (RBAC)

Avec les balises de session Amazon Web Services (AWS), vous pouvez marquer les 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 inclus dans ce guide, nous allons marquer nos ressources AWS avec des étiquettes de session AWS, puis créer une politique pour un rôle AWS IAM qui permettra aux utilisateurs ayant ce rôle et les étiquettes appropriées d’effectuer des actions particulières sur nos ressources AWS. Nous créerons ensuite une règle dans Auth0 qui attachera notre rôle AWS IAM et les étiquettes de session AWS appropriées à un utilisateur Auth0 et les fera passer par des assertions SAML dans le jeton. Cet exemple s’appuie sur l’exemple fourni dans Configurer Amazon Web Services pour l’authentification unique.

Pour utiliser les balises de session AWS avec les API et les ressources AWS, vous devez :

  1. Tag AWS instances.

  2. Create a specialized AWS IAM role.

  3. Create an Auth0 rule.

  4. Test your configuration.

Prérequis

Instances de balises AWS

Add tags to your AWS resources. Follow instructions in Amazon Elastic Compute Cloud User Guide for Linux Instances: Adding and Deleting Tags on an Individual Resource.

You should have created three instances. Add the following tags:

Instance Balises
1 Clé : CostCenter, Valeur : marketing.
Clé : Project, Valeur : website.
2 Clé: CostCenter, Valeur : engineering.
Clé : Project, Valeur : management_dashboard.
3 Clé : CostCenter, Valeur : marketing.
Clé : Project, Valeur : community_site.

Create a specialized AWS IAM role

Create an IAM role using the AWS SAML identity provider you set up during the prerequisites. Follow the instructions in AWS Identity and Access Management User Guide: Creating a Role for SAML 2.0 Federation (Console).

While setting up your role, make sure you use the following parameters:

Paramètre Description et exemple de valeur
Fournisseur SAML Nom du fournisseur d’identité que vous avez créé dans les prérequis, par exemple auth0SamlProvider. Sélectionnez Allow programmatic and AWS Management Console access (Autoriser l’accès programmatique et l’accès à la console de gestion AWS).

When asked to Attach permissions policies, create a policy with the following JSON and name it 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}" %>"
                }
            }
        }
    ]
}

Was this helpful?

/

Once the policy has been created, refresh the policy list for the role, then filter and select the new policy.

When reviewing your settings, make sure you use the following parameters:

Paramètre Description
Nom du rôle Nom descriptif de votre rôle, tel que AccessByCostCenter.
Description du rôle Description de l’objectif pour lequel votre rôle est utilisé.

Create an Auth0 rule

Pour mapper le rôle AWS et les étiquettes à un utilisateur, vous devez créer une règle dans Auth0. Ces valeurs seront ensuite transmises aux assertions SAML dans le jeton. Pour l’exemple :

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);
}

Was this helpful?

/

Tester la configuration

You should now be able to log in to the AWS Console using an Auth0 user and test your implementation.

To log in, you will need the SSO login for the AWS Console. To find it:

  1. Go to Dashboard > Applications > Applications and select the name of the Application to view.

  2. On the Addons tab, enable the SAML2 Web App add-on.

  3. On the Usage tab, locate Identity Provider Login URL.

  4. Go to the indicated URL.

  5. Once you have signed in, from EC2, select Instances. Click one of the instances tagged with a CostCenter of marketing, and click Actions > Instance State > Stop. Notice that the action completes successfully.

  6. Click the instance tagged with a CostCenter of engineering, and click Actions > Instance State > Stop. Notice that the action fails with an error.

En savoir plus