3

这就是为什么以这种方式设计 AWS Lambda 服务的原因。

根据有关如何配置 Lambda 函数以从另一个 AWS 账户担任角色的文档?,要从另一个账户访问资源,Lambda 函数需要调用该assume_role方法来获取临时凭证。我的问题是为什么这不能在 lambda 之外完成。例如,我们可以将 RoleB 从 AccountB 绑定到 RoleA(lambda 函数的执行角色)。

将逻辑移到外部的好处是显而易见的——lambda 更便携。

import boto3

def lambda_handler(context, event):

    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"

一旦逻辑被移出,上面的代码可以简化为:

import boto3

def lambda_handler(context, event):

   # create service client e.g. S3
    client = boto3.client(
        's3'
    )

    return "Hello from Lambda"
4

0 回答 0