ポリシーテンプレートとは
SAM にはポリシーテンプレートという、パラメータを渡すことで自動的に決められた IAM ポリシーを適用してくれる便利機能があります。
Lambda 関数は ECS タスクと違って、Parameter Store を環境変数に設定する機能が(まだ)ないので、基本的にコード内で ssm API を使ってシークレット値を取得する必要があります。
Parametrer Store を読めるマネージドポリシー(arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess
とか)をアタッチしてもいいけど、読める範囲が大きすぎるのでポリシーテンプレートを使ったほうがいいです。
SampleFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: sample-function
CodeUri: .
Handler: index.handler
Runtime: nodejs12.x
Environment:
Variables:
PARAMETER_PATH: /my/secret/parameter_path
Policies:
# ポリシーテンプレートを使う
# ParameterName は先頭にスラッシュをつけてはいけないので注意
- SSMParameterReadPolicy:
ParameterName: "my/secret/parameter_path"
公式ドキュメント見ると、ParameterName
ではなく parameterName
になってるんですけど、先頭大文字が正解です。(AWSにフィードバック済み)