Assumer un rôle IAM (API AWS) - AWS Identity and Access Management

Assumer un rôle IAM (API AWS)

Un rôle spécifie un ensemble d'autorisations que vous pouvez utiliser pour accéder aux ressources AWS. À cet égard, il est semblable à un utilisateur IAM. Un principal (personne ou application) endosse un rôle pour recevoir des autorisations temporaires pour effectuer les tâches requises et interagir avec des ressources AWS. Le rôle peut être dans votre propre compte ou dans un autre compte AWS. Pour plus d'informations sur les rôles, leurs avantages et la façon de les créer et de les configurer, consultez Rôles IAM et Création de rôles IAM. Pour connaître les différentes méthodes que vous pouvez utiliser pour endosser un rôle, consultez Utilisation de rôles IAM.

Important

Les autorisations de votre utilisateur IAM et des rôles que vous endossez ne peuvent pas être cumulées. Un seul ensemble d'autorisations peut être actif à la fois. Lorsque vous endossez un rôle, vous abandonnez temporairement les autorisations utilisateur et de rôle précédentes et utilisez celles qui sont affectées au rôle. Lorsque vous quittez le rôle, vos autorisations originales sont automatiquement restaurées.

Pour endosser un rôle, une application appelle l'opération d'API AWS STS AssumeRole et transmet l'ARN du rôle à utiliser. L'opération crée une nouvelle session avec des informations d'identification temporaires. Cette session possède les mêmes autorisations que les politiques basées sur une identité pour ce rôle.

Lorsque vous appelez AssumeRole, vous pouvez, si vous le souhaitez, transmettre des politiques de session en ligne ou gérées. Les politiques de session sont des politiques avancées que vous transmettez en tant que paramètre lorsque vous créez par programmation une session d'informations d'identification temporaires pour un rôle ou un utilisateur fédéré. Vous pouvez transmettre un seul document de politique de session en ligne JSON à l'aide du paramètre Policy. Vous pouvez utiliser le paramètre PolicyArns pour spécifier jusqu'à 10 politiques de session gérées. Les autorisations de la session obtenues sont une combinaison des stratégies basées sur l'identité de l'entité et des stratégies de session. Les politiques de session s'avèrent utiles lorsque vous devez fournir les informations d'identification temporaires du rôle à une autre personne. Cette dernière peut utiliser les informations d'identification temporaires du rôle dans les appels d'API AWS suivants pour accéder aux ressources du compte qui possède le rôle. Vous ne pouvez pas utiliser les politiques de session pour accorder plus d'autorisations que celles autorisées par la politique basée sur l'identité. Pour en savoir plus sur la façon dont AWS détermine les autorisations effectives d'un rôle, consultez Logique d'évaluation de politiques.


      PermissionsWhenPassingRoles_Diagram

Vous pouvez appeler AssumeRole lorsque vous êtes connecté en tant qu'utilisateur IAM ou en tant qu'utilisateur authentifié en externe (SAML ou OIDC) utilisant déjà un rôle. Vous pouvez également utiliser la création de chaînes de rôles, qui utilise un rôle pour endosser un deuxième rôle. Il n'est pas possible d'endosser un rôle si vous êtes connecté en tant qu'utilisateur racine Compte AWS.

Par défaut, votre session de rôle dure une heure. Lorsque vous endossez ce rôle à l'aide des opérations d'API AWS STS AssumeRole*, vous pouvez spécifier une valeur pour le paramètre DurationSeconds. Cette valeur peut être comprise entre 900 secondes (15 minutes) et la valeur de durée de session maximale définie pour le rôle. Pour savoir comment afficher la valeur maximale pour votre rôle, veuillez consulter Affichage du paramètre de durée de session maximale pour un rôle.

Si vous utilisez la création de chaînes de rôles, votre session est limitée à une durée maximale d'une heure. Si vous utilisez ensuite le paramètre DurationSeconds pour fournir une valeur supérieure à une heure, l'opération échoue.

Note

Pour des raisons de sécurité, les administrateurs peuvent consulter les journaux AWS CloudTrail pour savoir qui a effectué une action dans AWS. Votre administrateur peut exiger que vous spécifiiez une identité source ou un nom de session de rôle lorsque vous endossez le rôle. Pour plus d'informations, consultez sts:SourceIdentity et sts:RoleSessionName.

L'exemple suivant en Python utilise l'interface Boto3 vers AWS (AWS SDK for Python (Boto) V3) et montre comment appeler AssumeRole. Il montre également comment utiliser les informations d'identification de sécurité temporaires renvoyées par AssumeRole pour répertorier tous les compartiments Amazon S3 dans le compte auquel le rôle appartient.

import boto3 # The calls to AWS STS AssumeRole must be signed with the access key ID # and secret access key of an existing IAM user or by using existing temporary # credentials such as those from another role. (You cannot call AssumeRole # with the access key for the root account.) The credentials can be in # environment variables or in a configuration file and will be discovered # automatically by the boto3.client() function. For more information, see the # Python SDK documentation: # http://boto3.readthedocs.io/en/latest/reference/services/sts.html#client # create an STS client object that represents a live connection to the # STS service sts_client = boto3.client('sts') # Call the assume_role method of the STSConnection object and pass the role # ARN and a role session name. assumed_role_object=sts_client.assume_role( RoleArn="arn:aws:iam::account-of-role-to-assume:role/name-of-role", RoleSessionName="AssumeRoleSession1" ) # From the response that contains the assumed role, get the temporary # credentials that can be used to make subsequent API calls credentials=assumed_role_object['Credentials'] # Use the temporary credentials that AssumeRole returns to make a # connection to Amazon S3 s3_resource=boto3.resource( 's3', aws_access_key_id=credentials['AccessKeyId'], aws_secret_access_key=credentials['SecretAccessKey'], aws_session_token=credentials['SessionToken'], ) # Use the Amazon S3 resource object that is now configured with the # credentials to access your S3 buckets. for bucket in s3_resource.buckets.all(): print(bucket.name)