【AWS SAM】AuthorizationError: ポリシーが効かない場合に確認する設定

2022/06/24に公開

AWS StepFunctions や、AWS Labmda を AWS SAM から利用する場合、SAM policy templatesを利用して リソースにポリシーを設定することができます。

しかし、リソースの設定が間違っていてうまく実行ロールに権限が付与できず、エラーになってしまう場合がありましたので調査しました。

ポイント

  • リソースのARNが必要か、名前などの単なる値が必要かが異なる。

例: LambdaからSNSのトピック発行する場合

NG な書き方

エラー
Resources:

  HogeTopic:
    Type: AWS::SNS::Topic
    Properties: 
      TopicName: fuga-fuga

  HogeLambda:
    Type: AWS::Serverless::Function
    Properties:
      Policies:
        - SNSPublishMessagePolicy:
+           TopicName: !Ref HogeTopic

OK な書き方

TopicName プロパティでの指定が必要です。

OK
Resources:

  HogeTopic:
    Type: AWS::SNS::Topic
    Properties: 
      TopicName: fuga-fuga

  HogeLambda:
    Type: AWS::Serverless::Function
    Properties:
      Policies:
        - SNSPublishMessagePolicy:
+           TopicName: !GetAtt HogeTopic.TopicName

リソースによって正解は異なる

DynamoDBの場合は、リソースを指定します。

Policies:
  - DynamoDBCrudPolicy:
+     TableName: !Ref HogeTable

ARNが必要か、値が必要か

ポリシーによって、

  • リソースのARNが必要か
  • あるいは名前などの単なる値が必要か

が異なりますのでエラーが出る場合はあらためてドキュメントを確認すべきでしょう。

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-policy-template-list.html#sqs-poller-policy

Discussion