AWS Lambda SQS触发器承担角色

时间:2020-11-11 21:52:37

标签: amazon-web-services aws-lambda

我被赋予一项任务,以使用来自外部公司的SQS队列中的消息,该消息返回了我要从中复制文件的存储桶和密钥。我可以假设这个外部公司设置了一个角色,该角色使我可以访问SQS队列和S3存储桶,但是我遇到了问题。我如何承担Lambda触发器的外部角色?这有可能吗?

1 个答案:

答案 0 :(得分:1)

您将在Lambda中担任该角色,然后使用临时凭证与外部AWS账户进行交互。

使用python的示例。

import boto3

sts = boto3.client('sts')

role = sts.assume_role(
   RoleArn="arn:aws:iam::EXTERNAL_COMPANY_ACCOUND_ID:role/EXTERNAL_COMPANY_ROLE",
   ExternalId="EXTERNAL_ID_CONFIGURED",
   RoleSessionName="RoleSessionNameYouWant")

credentials = role['Credentials']

# Interact with resoures from the external company account
external_session = boto3.Session(
    aws_access_key_id=credentials['AccessKeyId'],
    aws_secret_access_key=credentials['SecretAccessKey'],
    aws_session_token=credentials['SessionToken'])

s3 = external_session.client('s3'),
sqs = external_session.client('sqs')

外部ID是可选的,但在将角色赋予第三方以避免the confused deputy problem时很重要。如果没有完成,请第三方为您的角色配置一个外部ID。