这就是为什么以这种方式设计 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"