AWS

【AWS SAM】AuthorizationError: ポリシーが効かない場合に確認したい罠

AWS
この記事は約2分で読めます。

はじめに

SAMでStepFunctionsや、Labmdaのリソースにポリシーを設定する際に、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な例

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が必要か
  • あるいは名前などの単なる値が必要か

が異なる。

ドキュメントをよく読めばわかる。

Policy template list – AWS Serverless Application Modelhttps://docs.aws.amazon.com