我正在编写一个 Python 应用程序,该应用程序从帐户 A 中提取数据并将其发送到帐户 B 中的 SQS 队列。执行 lambda 函数时,它返回以下错误:
"errorMessage": "调用 SendMessage 操作时发生错误 (AccessDenied):访问资源https://eu-central-1.queue.amazonaws.com/被拒绝。",
如果我在同一帐户中使用 SQS 队列,它就可以工作。
我正在使用无服务器框架,我需要在跨账户角色中使用ExternalId 。
我做了什么:
在账户 A(执行 Lambda 函数的地方)
以下功能是使用Serverless框架部署的:
TotalCollectorWeekToDate:
handler: environment.total_wtd_summary_handler
module: collectors
memorySize: 128
role: arn:aws:iam::<ACCOUNT_A>:role/FunctionsLambdaRole
timeout: 30
events:
- schedule:
rate: cron(0 7 * * ? *)
enabled: true
environment:
COST_DATA_SQS_QUEUE_URL: https://sqs.eu-central-1.amazonaws.com/<ACCOUNT_B>/prod-analyser-queue
Run Code Online (Sandbox Code Playgroud)
角色
Resources:
FunctionsLambdaRole:
Type: AWS::IAM::Role
Properties:
RoleName: FunctionsLambdaRole
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action: "sts:AssumeRole"
Path: /
ManagedPolicyArns: …Run Code Online (Sandbox Code Playgroud)