Come posso configurare una funzione Lambda in modo che assuma un ruolo IAM in un altro account AWS?

3 minuti di lettura
0

Desidero che la mia funzione AWS Lambda assuma un ruolo AWS Identity and Access Management (IAM) in un altro account AWS.

Breve descrizione

Per fare in modo che la funzione Lambda assuma un ruolo IAM in un altro account, completa i passaggi seguenti:

  1. Configura il ruolo di esecuzione della funzione Lambda per consentirle di assumere un ruolo IAM in un altro account AWS.
  2. Modifica la policy di attendibilità del ruolo IAM multi-account per consentire alla funzione Lambda di assumere il ruolo.
  3. Aggiungi la chiamata API AssumeRole del Servizio di token di sicurezza AWS (AWS STS) al codice della funzione Lambda.

Nota: una funzione Lambda può assumere un ruolo IAM in un altro account per accedere alle risorse, come ad esempio un bucket Amazon Simple Storage Service (Amazon S3). La funzione Lambda può anche assumere il ruolo per eseguire attività, come ad esempio le istanze di avvio e arresto.

Risoluzione

Nota: la seguente procedura di esempio fa riferimento a due tipi di account:

  • Un account home che ospita la funzione Lambda, 111111111111
  • Un account incrociato che include il ruolo IAM assunto dalla funzione Lambda, 222222222222

Prerequisito

Crea il ruolo IAM che desideri utilizzare nell’account incrociato.

Configura il ruolo di esecuzione della funzione Lambda per consentire alla funzione di assumere un ruolo IAM in un altro account

Aggiungi la seguente istruzione della policy al ruolo IAM della funzione Lambda nell'account 111111111111:

Nota: sostituisci 222222222222 con l'ID account del ruolo multi-account assunto dalla funzione e sostituisci role-on-source-account con il nome del ruolo assunto.

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

Modifica la policy di attendibilità del ruolo IAM multi-account per consentire alla funzione Lambda di assumere il ruolo

Aggiungi la seguente istruzione alla policy di attendibilità del ruolo IAM multi-account nell'account 222222222222:

Nota: sostituisci 111111111111 con l'ID dell'account in cui si trova la funzione Lambda e my-lambda-execution-role con il nome del ruolo IAM della funzione.

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

Aggiungi la chiamata API AWS STS AssumeRole al codice della funzione Lambda

Per aggiungere la chiamata API AWS STS AssumeRole al codice della funzione, completa i passaggi illustrati nella sezione Configurazione delle opzioni della funzione Lambda.

Nota: la chiamata API AWS STS AssumeRole restituisce le credenziali che puoi utilizzare per creare un client di servizio. Quando si utilizza il client di servizio, la funzione Lambda dispone delle autorizzazioni concesse dal ruolo assunto. Per ulteriori informazioni, consulta la sezione assume_role sul sito web di AWS Boto 3.

Esempio di codice di una funzione Python che include la chiamata API AWS STS AssumeRole

Nota: sostituisci 222222222222 con l'ID dell'account AWS del ruolo multi-account assunto dalla funzione e sostituisci role-on-source-account con il nome del ruolo assunto.

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"

Informazioni correlate

Uso delle policy basate sulle risorse per Lambda

Autorizzazioni di accesso alle risorse Lambda

Passaggio a un ruolo IAM (AWS API)

Risoluzione dei problemi dei ruoli IAM

Compilazione di funzioni Lambda con Python

AWS UFFICIALE
AWS UFFICIALEAggiornata 5 mesi fa