En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment puis-je configurer une fonction Lambda pour qu’elle endosse un rôle IAM dans un autre compte AWS ?

Lecture de 4 minute(s)
0

Je souhaite que ma fonction AWS Lambda endosse un rôle AWS Identity and Access Management (AWS IAM) dans un autre compte AWS.

Brève description

Pour que votre fonction Lambda endosse un rôle IAM dans un autre compte, procédez comme suit :

  1. Configurez le rôle d’exécution de votre fonction Lambda pour lui permettre d’endosser un rôle IAM dans un autre compte AWS.
  2. Modifiez la politique de confiance de votre rôle IAM intercompte pour permettre à votre fonction Lambda d’endosser le rôle.
  3. Ajoutez l’appel Service de jetons de sécurité AWS (AWS STS) AssumeRole au code de votre fonction Lambda.

Remarque : une fonction Lambda peut endosser un rôle IAM dans un autre compte pour accéder à des ressources, comme un compartiment Amazon Simple Storage Service (Amazon S3). La fonction Lambda peut également endosser le rôle requis pour effectuer des tâches, telles que le démarrage et l’arrêt d’instances.

Résolution

Remarque : l’exemple de procédure suivant fait référence à deux types de comptes :

  • Un compte de base qui héberge la fonction Lambda, 111111111111
  • Un compte croisé qui inclut le rôle IAM endossé par la fonction Lambda, 222222222222

Prérequis

Créez le rôle IAM que vous souhaitez utiliser dans le compte croisé.

Configurer le rôle d’exécution de votre fonction Lambda pour lui permettre d’endosser un rôle IAM dans un autre compte

Ajoutez la déclaration de politique suivante au rôle IAM de votre fonction Lambda dans le compte 111111111111 :

Remarque : remplacez 222222222222 par le numéro d’identification de compte du rôle intercompte endossé par votre fonction et role-on-source-account par le nom du rôle endossé.

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::222222222222:role/role-on-source-account"
    }
}

Modifiez la politique de confiance de votre rôle IAM intercompte pour permettre à votre fonction Lambda d’endosser le rôle

Ajoutez la déclaration de politique suivante à la politique de confiance de votre rôle IAM intercompte dans le compte 222222222222 :

Remarque : remplacez 111111111111 par le numéro d’identification du compte dans lequel se trouve votre fonction Lambda et my-lambda-execution-role par le nom du rôle IAM de votre fonction.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:role/my-lambda-execution-role"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

Ajoutez l’appel d’API AWS STS AssumeRole au code de votre fonction Lambda

Pour ajouter l’appel d’API AWS STS AssumeRole au code de votre fonction, procédez comme indiqué sur la page Configuration des options de la fonction Lambda.

Remarque : l’appel d’API AWS STS AssumeRole renvoie des informations d’identification que vous pouvez utiliser pour créer un client de service. Lorsque vous utilisez le client de service, votre fonction Lambda dispose des autorisations accordées par le rôle endossé. Pour en savoir plus, consultez la page assume_role du site Web AWS Boto 3.

Exemple de code de fonction Python incluant l’appel d’API AWS STS AssumeRole

Remarque : remplacez 222222222222 par le numéro d’identification de compte AWS du rôle intercompte endossé par votre fonction et role-on-source-account par le nom du rôle endossé.

import boto3
def lambda_handler(event, context):

    sts_connection = boto3.client('sts')
    acct_b = sts_connection.assume_role(
        RoleArn="arn:aws:iam::222222222222:role/role-on-source-account",
        RoleSessionName="cross_acct_lambda"
    )

    ACCESS_KEY = acct_b['Credentials']['AccessKeyId']
    SECRET_KEY = acct_b['Credentials']['SecretAccessKey']
    SESSION_TOKEN = acct_b['Credentials']['SessionToken']

    # create service client using the assumed role credentials, e.g. S3
    client = boto3.client(
        's3',
        aws_access_key_id=ACCESS_KEY,
        aws_secret_access_key=SECRET_KEY,
        aws_session_token=SESSION_TOKEN,
    )

    return "Hello from Lambda"

Informations connexes

Utilisation de politiques basées sur les ressources pour AWS Lambda

Autorisations d’accès aux ressources Lambda

Basculer vers un rôle IAM (AWS API)

Résolution des problèmes liés aux rôles IAM

Création de fonctions Lambda avec Python

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an