😽
SAMのサーバーレスアーキテクチャで、APIGATEWAYにリソースポリシーを設定
はじめに
SAMを利用して、apigateway -> lambdaのサーバーレスアーキテクチャを実装しました。その際に、apigatewayへのアクセス制限としてIP制限をリソースポリシーに含めました。
ドキュメントなどを見ていたのですが、しっくりくる情報にたどり着けなかったので備忘録として残します。
SAMテンプレート
POINT:Type: AWS::Serverless::Apiを明示的にリソース追加
リソースポリシーを設定する場合には、Type: AWS::Serverless::Api
のリソースを明示的に作成する必要がある。 SAMのテンプレート記述として Type: AWS::Serverless::Function
を利用した際に、Type: AWS::Serverless::Api
をリソースに作成しなくてもデフォルトで作成される仕様となっています。が、リソースポリシーを設定したい場合には明示的にリソース作成する必要がある。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
Sample SAM Template
Globals:
Function:
Timeout: 15
MemorySize: 128
LoggingConfig:
LogFormat: JSON
Api:
OpenApiVersion: 3.0.3
Resources:
Api:
Type: AWS::Serverless::Api
Properties:
StageName: Prod
Auth:
ResourcePolicy:
IpRangeWhitelist: !Ref WhitelistIps
ApiFunction:
Type: AWS::Serverless::Function
Metadata:
BuildMethod: makefile
Properties:
CodeUri: /
Handler: bootstrap
Runtime: provided.al2023
Architectures:
- x86_64
Policies:
- arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole
- !Ref LambdaPolicy
Events:
CatchAll:
Type: Api
Properties:
Path: /{proxy+}
Method: ANY
RestApiId:
Ref: Api
Environment:
Variables:
ENV: !Ref Env
DB_HOST: !Ref DBHost
DB_PORT: !Ref DBPort
Parameters:
LambdaPolicy:
Type: String
Description: "lambda Policy ARN"
Env:
Type: String
Description: "Environment name (e.g., local, stg, prod)"
DBHost:
Type: String
Description: "Database host"
DBPort:
Type: Number
Description: "Database port"
WhitelistIps:
Type: CommaDelimitedList
Description: "Whitelist IP"
samconfig.toml
samconfig.tomlで関係するdeploy.parametersの部分のみ
POINT:Type:
WhitelistIpsはCommaDelimitedListの形式に合わせて。カンマの後はスペース不要
[dev.deploy.parameters]
capabilities = "CAPABILITY_IAM"
confirm_changeset = true
resolve_s3 = true
parameter_overrides = [
"Env=dev",
// 他を省略
"WhitelistIps=\"XXXX/32,YYYY/32\"",
]
Discussion