[AWS] WAF を自分で組み立てるなら SAM でテンプレート書いた方が楽だよ

タイトルの通りです。

あ、この記事は AWS初心者 Advent Calendar 2018 の7日目として書いております。

最近会社でWAFとかLambdaとかSAMとかちょっとEC2やRDSといった基本のプロダクトとは違った要素について検証・導入を行なっているのですが、Lambdaをデプロイするために使ってみたSAMでWAFをデプロイすると楽ちんでした。

たとえばここに、HTTPリクエストのメソッドの種別を確認し、HEAD、CONNECT、TRACEを利用したアクセスをブロックするようなWAFを作成するためのSAMテンプレートがあります。



これが存在するディレクトリで以下のようにパッケージングのためのコマンドを実行します。
あ、念の為に雑多なディレクトリではなく、このテンプレートだけが存在する新しいディレクトリを作成してください。

aws --profile [プロファイル名] cloudformation package --template-file template.yml --s3-bucket [あらかじめ用意したS3バケット名] --output-template-file packaged-template.yml 

これを実行することで、SAMでのデプロイのためにパッケージング化された各種ファイルが指定したS3バケットに送られ、そこからデプロイするために書き換えられた packaged-template.yml が生成されます。
Lambda Functionのためのソースコードがあればここで併せてパッケージング化されるのですが、今回は無いのでtemplate.ymlだけですね。

そして以下のコマンドを実行するとデプロイされます。

aws  --profile [プロファイル名] cloudformation deploy  --template-file packaged-template.yml  --stack-name otameshi-http-method-restriction-for-cloudfront  --capabilities CAPABILITY_IAM  --parameter-overrides yourApplicationeName=[任意の文字列]

コマンド名にもありますが、AWS SAMの実態は CloudFormation の拡張なので、CloudFormationが実行されます。
CloudFormationなので、別にLambda FunctionがなくったってSAMを使っていいんですねぇ。
これで多分あなたのWAFの管理画面にACLが1個、Ruleが3個、string match なコンディションが3個作成されたと思います。

ほんとはWAFの構成要素とかここ最近で一気に学んだのでまとめを書こうかと思いましたがMPがなくなったのでまた今度にします。

おわり

あ、万が一気に入っていただけたら欲しいものリストからお酒おごってください。

コメント

このブログの人気の投稿

初めてぐらいの勢いで特定のブランチにマージする業務を行ったときのメモ

指定された国のタイムゾーン情報をどうやって設定すれば良いか調べる方法

[自動化][UWSC] UWSCを使ってWebテスト・Web作業の自動化(のはじめの一歩)