はじめに
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