2017-10-04 8 views
0

람다에서 SNS 주제를 만들고 메시지를 게시하려하고 있습니다. 하지만 메신저 권한 부여 오류가 그것을하려고 할 때.오류 코드 : AmazonSNS의 AuthorizationError

Service: AmazonSNS; Status Code: 403; Error Code: AuthorizationError 

전체 예외 내 샘 템플릿

private AmazonSNSClient snsClient =(AmazonSNSClient)AmazonSNSClient.builder().build(); 
snsClient.publish(new PublishRequest(System.getenv(“SNS_TOPIC_ARN 
”),”Test”)); 

그것의 가능이

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 알림과 같은

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) 

은 모든 사용자가 SNS의 주제를 게시 할 수 있도록 ~을 사용하여 콘솔. 메신저 템플릿을 사용하여 그것을 할 방법을 찾고 있어요.

감사

+1

당신은 람다 기능에 할당 한 역할에 어떤 권한이 있습니까? 또한, 당신의 람다 함수에서 어떤 라인이 그 에러를 발생 시켰습니까? –

+0

@JohnRotenstein 답변 해 주셔서 감사합니다. 허가 역할을 할 때,이 권한이 있습니까? 그 외에는 sam 템플릿에 아무 것도 언급하지 않았습니다. "역할 :! sub arn : aws : iam :: $ {AWS :: AccountId} : role/AWSLambdaVPCAccessExecutionRole. sns 알림을 보내는 데 사용하는 코드를 추가했습니다. " – Dilantha

답변

0

당신이 목록에서 볼 수 있듯이

http://docs.aws.amazon.com/IAM/latest/UserGuide/list_sns.html

보다는 다만 SNS IAM 권한에 해당하는 많은 더 많은 옵션이 있습니다 : '

당신은 돈 "SNS가 게시" t는 람다 코드를 보여하지만 난 당신이 "SNS : CreateTopic"필요 거라 생각 그 다음 일을 허용하지 않는 경우

을 "SNS를 : *"는 차 후 다음 최소 권한을 줄이고, 그것은 Cloudtrail에서 부르는 것을 볼

업데이트가 필요합니다 : 나는 문서를 확인, 그래서 나는 SAM 템플릿 형식을 사용하고 있지 않다. 새로운 정책을 인라인으로 선언하는 예는 없지만 기존 IAM 정책을 사용하는 경우가 있습니다.

그래서 당신은

Policies: 
    Statement: 
     - Effect: Allow 
     Action: sns:Publish 
     Resource: !Ref Topic 

시도 말할 곳

Policies: AmazonSNSFullAccess 
+0

답장을 보내 주셔서 감사합니다. 나는 당신이 그것을 sns로 바꿈으로써 말한 것을 시도했다 : *. 여전히 같은 오류가 발생합니다. ( – Dilantha