Wie konfiguriere ich eine Lambda-Funktion so, dass sie eine IAM-Rolle in einem anderen AWS-Konto übernimmt?

Lesedauer: 3 Minute
0

Ich möchte, dass meine AWS-Lambda-Funktion eine AWS Identity and Access Management (IAM)-Rolle in einem anderen AWS-Konto übernimmt.

Kurzbeschreibung

Gehen Sie wie folgt vor, damit Ihre Lambda-Funktion eine IAM-Rolle in einem anderen Konto übernimmt:

  1. Konfigurieren Sie die Ausführungsrolle Ihrer Lambda-Funktion so, dass die Funktion eine IAM-Rolle in einem anderen AWS-Konto übernehmen kann.
  2. Ändern Sie die Vertrauensrichtlinie Ihrer kontoübergreifenden IAM-Rolle, damit Ihre Lambda-Funktion die Rolle übernehmen kann.
  3. Fügen Sie den AssumeRole-API-Aufruf von AWS Security Token Service (AWS STS) zum Code Ihrer Lambda-Funktion hinzu.

Anmerkung: Eine Lambda-Funktion kann eine IAM-Rolle in einem anderen Konto übernehmen, um auf Ressourcen wie einen Amazon Simple Storage Service (Amazon S3)-Bucket zuzugreifen. Die Lambda-Funktion kann auch Aufgaben übernehmen, wie das Starten und Stoppen von Instances.

Lösung

Anmerkung: Die folgende Beispielprozedur bezieht sich auf zwei Arten von Konten:

  • Ein Home-Konto, dass die Lambda-Funktion hostet, 111111111111
  • Ein Cross-Konto, dass die IAM-Rolle enthält, die die Lambda-Funktion annimmt, 222222222222

Voraussetzung

Erstellen Sie die IAM-Rolle, die Sie im Cross-Konto verwenden möchten.

Konfigurieren Sie die Ausführungsrolle Ihrer Lambda-Funktion so, dass die Funktion eine IAM-Rolle in einem anderen Konto übernehmen kann

Fügen Sie die folgende Richtlinienanweisung zur IAM-Rolle Ihrer Lambda-Funktion im Konto 111111111111 hinzu:

Anmerkung: Ersetzen Sie 222222222222 durch die Konto-ID der kontoübergreifenden Rolle, die Ihre Funktion annimmt, und role-on-source-account durch den Namen der übernommenen Rolle.

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

Ändern Sie die Vertrauensrichtlinie Ihrer kontoübergreifenden IAM-Rolle, damit Ihre Lambda-Funktion die Rolle übernehmen kann

Fügen Sie die folgende Richtlinienanweisung zur Vertrauensrichtlinie Ihrer kontoübergreifenden IAM-Rolle in Konto 222222222222 hinzu:

Anmerkung: Ersetzen Sie 111111111111 durch die Konto-ID des Kontos, in dem sich Ihre Lambda-Funktion befindet, und my-lambda-execution-role durch den Namen der IAM-Rolle Ihrer Funktion.

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

Fügen Sie den AWS STS AssumeRole-API-Aufruf zum Code Ihrer Lambda-Funktion hinzu

Um den AWS STS AssumeRole-API-Aufruf zum Code Ihrer Funktion hinzuzufügen, führen Sie die Schritte unter Konfigurieren der Lambda-Funktionsoptionen aus.

Anmerkung: Der AWS STS AssumeRole-API-Aufruf gibt Anmeldeinformationen zurück, die Sie verwenden können, um einen Service-Client zu erstellen. Wenn Sie den Service-Client verwenden, verfügt Ihre Lambda-Funktion über die Berechtigungen, die Ihnen die übernommene Rolle gewährt hat. Weitere Informationen finden Sie unter assume\ _role auf der AWS Boto 3-Website.

Beispiel für einen Python-Funktionscode, der den AWS STS AssumeRole-API-Aufruf beinhaltet

Anmerkung: Ersetzen Sie 222222222222 durch die AWS-Konto-ID der kontoübergreifenden Rolle die Ihre Funktion annimmt, und role-on-source-account durch den Namen der übernommenen Rolle.

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"

Weitere Informationen

Verwenden ressourcenbasierter Richtlinien für AWS Lambda

Zugriffsberechtigungen für Lambda-Ressourcen

Zu einer IAM-Rolle wechseln (AWS API)

Problembehebung bei IAM-Rollen

Erstellen von Lambda-Funktionen mit Python

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 5 Monaten