Код ошибки: AuthorizationError в AmazonSNS
Я пытаюсь создать тему SNS и публиковать сообщения от лямбды. Но я получаю ошибку авторизации при попытке сделать это.
Service: AmazonSNS; Status Code: 403; Error Code: AuthorizationError
Полное исключение
com.amazonaws.services.sns.model.AuthorizationErrorException: User: arn:aws:sts::166916908689:assumed-role/AWSLambdaVPCAccessExecutionRole/lambda-event-common-test is not authorized to perform: SNS:Publish on resource: arn:aws:sns:eu-west-1:166916908689:events (Service: AmazonSNS; Status Code: 403; Error Code: AuthorizationError; Request ID: 9266e536-baa4-55d1-b277-b766f5536b70)
мой шаблон Сэм выглядит так
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
EventListenFunction:
Type: AWS::Serverless::Function
Properties:
Handler: event.lambda.EventHandler::handleRequest
Role: !Sub arn:aws:iam::${AWS::AccountId}:role/AWSLambdaVPCAccessExecutionRole
FunctionName: lambda-event-$ENVNAME
Runtime: java8
VpcConfig:
SecurityGroupIds:
- !ImportValue LambdaVPCSecurityGroup
SubnetIds:
- !ImportValue VsolPublicSubnetAz1
- !ImportValue VsolPublicSubnetAz2
Environment:
Variables:
SNS_TOPIC_ARN: !Ref Topic
Events:
GetResource:
Type: Api
Properties:
Path: /event/{Id}
Method: post
Policies:
Statement:
- Effect: Allow
Action: sns:Publish
Resource: !Ref Topic
Topic:
Type: "AWS::SNS::Topic"
Properties:
DisplayName: "events"
TopicName: "events"
Отправка уведомления по sns
private AmazonSNSClient snsClient =(AmazonSNSClient)AmazonSNSClient.builder().build();
snsClient.publish(new PublishRequest(System.getenv(“SNS_TOPIC_ARN
”),”Test”));
Можно разрешить любому пользователю публиковать темы для sns с помощью консоли. Я ищу способ сделать это, используя шаблон sam.
Спасибо
1 ответ
Как вы можете видеть из этого списка
http://docs.aws.amazon.com/IAM/latest/UserGuide/list_sns.html
Для разрешения SNS IAM доступно гораздо больше параметров, чем просто "sns:Publish"
Вы не показываете свой лямбда-код, но я предполагаю, что вам нужен "sns:CreateTopic"
Если это не сработает, тогда разрешите "sns:*", а затем посмотрите, что он вызывает в Cloudtrail, затем уменьшите разрешения до минимально необходимого
обновление: я не использовал формат шаблона SAM, поэтому я проверил документацию. Нет примера для объявления новой встроенной политики, как вы, кажется, делаете, но есть для использования существующих политик IAM.
Итак, где вы говорите
Policies:
Statement:
- Effect: Allow
Action: sns:Publish
Resource: !Ref Topic
пытаться
Policies: AmazonSNSFullAccess