俺です。コミュ症です。
最近EC2原人を脱却すべくAPI Gatewayのドキュメントを読んで電卓アプリケーションを作りました。
作成した電卓アプリケーションを俺の考えた最強のドメイン名でアクセスできるようにして、最強のアクセス制限を設定したいと思います。
図は端折ります。
API GatewayとLambdaの準備
API Gatewayのドキュメント に従って作成します。
コレを読んで手を動かせば誰でもサーバレス童貞を捨てることができます。最高。
Route53の準備
かっこいいやつを設定しましょう
SSL証明書の準備
AWS WAFはCloudFrontのトラフィック制限サービスなのでCloudFrontを準備します。
CFに設定するSSL証明書はACMで準備します。
バージニアリージョン(us-east-1)に *.gluerecord.oreda.be という名前で準備しました。
CloudFrontの準備
- CloudFrontディストリビューションを一つ作成します。
- ディストリビューションにACMで準備した証明書を設定しておきます。
- 俺俺ドメインで利用するため以下の様なAlternate Domain Namesを設定しておきます
Alternate Domain Names | 用途 |
---|---|
apigw.gluerecord.oreda.be | オフィスからアクセスできるAPI Gatewayアプリケーション用サブドメイン |
unko.gluerecord.oreda.be | EC2からアクセスできるAPI Gatewayアプリケーション用サブドメイン |
saitei.gluerecord.oreda.be | どこからもアクセス許可しないAPI Gatewayアプリケーション用サブドメイン(WAFのDefault Action挙動チェック用) |
WAFの準備
こっから本題
WebACLの構成
1つのDistributionに対して1つのWebACLを設定します。
WebACLは複数のルールの集まりです。
こんな感じの構成になります。
WebACL | |--Order1.RuleA(Action Allow or Block) |--Order2.RuleB(Action Allow or Block) |--Order3.RuleN(Action Allow or Block) |--Default Action Rule(Action Allow or Block)
WebACLのルールは以下のとおりとします。
- Alternate Domain Name毎にAllowルールを作成する(saitei.gluerecord.oreda.beに対してルールは作らない)
- デフォルトアクションはBlockにする
CFのエッジロケーションにのっちゃうのに拒否されるってどういうこと悔しいビクンビクンアプリケーションになるようルールを構成します。
Order | Rule Name | Allow/Block |
---|---|---|
1 | apigw.gluerecord.oreda.be | Allow |
2 | unko.gluerecord.oreda.be | Allow |
どのルールにもマッチしない場合 | Default Action | Block |
Rule
WebACL内に作成するRuleは以下のとおりにします。
- CloudFrontのAlternate Domain Names単位でルールを作成する
- 各ルールはHostヘッダ判定のString MatchingとIP AddressをAnd条件で設定する
Conditionsの設定
今回必要なConditionはString MatchingとIP Addressです。
IP Addressは2016/8/15時点で/32またはClass単位でしか制限できません..
悲しい。
Rule1. apigw.gluerecord.oreda.be
Condition条件はAND条件とします。
Condition | 条件 |
---|---|
String Matching | ホストヘッダがapigw.gluerecord.oreda.beに完全一致する |
IP Address | IPアドレスがオフィスのIP/32に一致する |
参考画像
Rule2. unko.gluerecord.oreda.be
Condition | 条件 |
---|---|
String Matching | ホストヘッダがunko.gluerecord.oreda.beに完全一致する |
IP Address | IPアドレスがEC2のEIP/32に一致する |
参考画像
WAFをCloudFront Distributionへの関連付け
以下の作成/設定が完了したらWebACLをCloudFront Distributionへ関連付けます
- Rule作成
- Conditions設定
- WebACLにRule順序設定
WebACLのAWS resources using this web ACL
より関連付けすることができます。
動作確認
オフィスからのアクセス
EC2からのアクセス
EC2にしか許可してないAlternate Domain NamesへオフィスIPからアクセス
見事弾かれました。
Default Actionのチェック
どのルールにもマッチしないDefault ActionはBlockです。
Allow ActionとなってないルールにマッチするAlternate Domain Namesへのアクセスは、弾かれるはずです。
こんな感じで弾くことができました。
API Gatewayで作成した1つのWebアプリケーションを、複数のサブドメインで提供したいけどそれぞれ提供先からのみ許可するようにアクセス制限かけたいなーってときに使えますね。
おわり。
元記事はこちら
「AWS WAFでHost Header +IP Addressでアクセス制限してコミュ症ウェッブアプリケーションを作ろう」