Вам потребуется политика SQS, которая выглядит примерно так:
{
"Version":"2012-10-17",
"Id":"sqsQueuePolicy",
"Statement":[{
"Sid":"Allow-other-account-to-use-queue",
"Effect":"Allow",
"Principal":{
"AWS":"[ACCOUNT-Y]"
},
"Action":"sqs:*",
"Resource":"arn:aws:sqs:us-east-1:[ACCOUNT-X]:S1",
"Condition": {
"ArnEquals" : "arn:aws:lambda:[ACCOUNT-Y-REGION]:[ACCOUNT-Y]:function:L1"
}
}
]
}
Формирование облаков было бы примерно таким в аккаунте X:
sqsQueue:
Type: 'AWS::SQS::Queue'
Properties:
QueueName: !Sub '${projectName}-ConsumerQueue'
policyQueueConsumer:
Type: 'AWS::SQS::QueuePolicy'
Properties:
PolicyDocument:
Id: !Sub '${projectName}-ConsumerQueuePolicy'
Version: '2012-10-17'
Statement:
- Sid: 'AllowConsumerSnsToSqsPolicy'
Effect: 'Allow'
Principal:
AWS: '${ACCOUNT-Y}'
Action:
- sqs:ChangeMessageVisibility
- sqs:DeleteMessage
- sqs:GetQueueAttributes
- sqs:ReceiveMessage
- sqs:SendMessage
Resource: !GetAtt sqsQueue.Arn
Condition:
ArnEquals:
aws:SourceArn: !Sub arn:aws:lambda:${ACCOUNT-Y-REGION}:${ACCOUNT-Y}:function:L1
Queues:
- !Ref sqsQueue
Для формирования облака для учетной записи Y триггер будет отображаться так:
sqsEventTrigger:
Type: "AWS::Lambda::EventSourceMapping"
Properties:
BatchSize: 5
Enabled: true
EventSourceArn: 'arn:aws:sqs:us-east-1:[ACCOUNT-X]:S1'
FunctionName: 'L1'
DependsOn:
- queueConsumerLambda
- queueConsumerExecutionRole
Обратите внимание, что вашей лямбде также потребуются те же разрешения, которые определены в ее роли выполнения в учетной записи Y:
{
"Version":"2012-10-17",
"Id":"lambdaExecutionPolicy",
"Statement":[{
"Sid":"Allow-lambda-to-call-queue-in-other-account",
"Effect":"Allow",
"Action":"sqs:*",
"Resource":"arn:aws:sqs:[ACCOUNT-X-REGION]:[ACCOUNT-X]:S1",
}
]
}
Я адаптировал свой ответ из своего поста здесь: События AWS SQS на AWS Lambda в TechBlog Financial Engines
Подробнее смотрите в документации AWS: Расширенные политики SQS для получения более подробной информации.