Come posso configurare una funzione Lambda in modo che assuma un ruolo IAM in un altro account AWS?
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:
- Configura il ruolo di esecuzione della funzione Lambda per consentirle di assumere un ruolo IAM in un altro account AWS.
- Modifica la policy di attendibilità del ruolo IAM multi-account per consentire alla funzione Lambda di assumere il ruolo.
- 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)
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa