こんにちは。
タイトルの通り、自社WebサーバにAWS WAFを適用して、
正常に稼働していることが確認できた頃合いだったので、
社内への技術的な共有も兼ねて寄稿することにしました。
全5回以下のような構成となります。
目次
費用の見積もり
おおよそ実現できるだろうと目測が付いたため、社内に話を上げるための費用を算出しました。
今回の構成において、費用を確認したものは以下の通りです。
- ALB
- AWS WAF
- ACM
- CloudWatch Logs
- S3
ALBの利用費用見積
Elastic Load Balancing 料金表
https://aws.amazon.com/jp/elasticloadbalancing/pricing/
クライアント認証は使わないため、
「Application Load Balancer 時間 (または 1 時間未満) あたり、USD 0.0243」
「LCU 時間 (または 1 時間未満) あたり、USD 0.008」を確認しました。
ALB時間は、0.0243×24×31=USD 18を見込みました。
LCU時間は以下のディメンションのうち、最も高いものが請求されます。
(以下引用)
新しい接続: 1 秒あたりの新たに確立された接続の数。通常、接続ごとに多くのリクエストが送信されます。
アクティブ接続: 1 分あたりのアクティブな接続の数。
処理タイプ: ロードバランサーによって処理された HTTP(S) リクエストと応答のバイト数 (GB 単位)。
ルール評価: ロードバランサーにより処理されたルールの数とリクエストレートの積。
最初に処理される 10 個ルールは無料 (ルール評価 = リクエスト率 × (処理されたルールの数 - 無料分の 10 個のルール))。
EC2インスタンスのみ使っており、正確に各ディメンションの算出はできませんでした。
算出できそうなものとしては「処理タイプ」のみだったため、
CloudWatchより確認可能なEC2インスタンスでのトラフィック処理量の統計データをもとに、
LCUを算出しました。
Amazon Elastic Compute Cloud (EC2) インスタンスとコンテナ、
およびターゲットとしての IP アドレスの場合は 1 時間あたり 1 GB、
ターゲットとしての Lambda 関数の場合は 1 時間あたり 0.4 GB です。
1ヶ月の総トラフィック量が660GBだったため、これを1時間当たりに換算します。
660÷(30×24)=0.91LCU
LCUをUSDに変換します。(1時間あたりの費用を出します)
0.91×0.008= 0.00728 (USD)
時間単位なので、これを月単位として換算します。
0.00728×(30×24)=5.4 (USD)
そして、「新しい接続」などの他のディメンションにおいて同じ値になる場合を逆算して、
念のため、妥当性をチェックしました。
※下記は当時まとめた資料です。
ALBの費用は、USD 23/月を見込んでいました。
AWS WAFの利用費用見積
AWS WAF の料金
https://aws.amazon.com/jp/waf/pricing/
Bot ControlとFraud Controlは、初期から利用するつもりがなかったため、下記を参考に算出しました。
(以下引用)
Web ACL:月あたり (時間で案分) USD 5.00
ルール:月あたり (時間で案分) USD 1.00
リクエスト:USD 0.60/100 万件のリクエスト (最大 1500 WCU およびデフォルトの本文サイズの検査*)
※WebACLとは、WAF設定のプロファイルであり、複数のルールを集約するオブジェクトです。
※ルールは、下記のようなイメージです。
例えば、AWS Managed Rule Groupの
[ Amazon IP Reputation list ] [ Anonymous IP list ] [ Core rule set ]
を有効にする場合には、ルール数は3つとカウントされます。
Webサーバは1つだったため、WebACLは1つにしています。
「ルール」については、有効化したいマネージドルール9つを計上しました。
リクエストについては、特に調査せずに1万リクエストくらいとしていました。
100万リクエストあたりUSD 0.6だったため、以下の通り計算しています。
0.6×0.01=0.006
5 (WebACL) + 9 (ルール) + 0.006 となったため、合わせて、USD 14.01/月を見込んでいました。
ACMの利用費用見積
AWS Certificate Managerの料金
https://aws.amazon.com/jp/certificate-manager/pricing/
既に発行されている証明書をインポートすることを目的にしており、
ACMにおいて、AWSプライベートCAを使う想定はしていませんでした。
そのため、費用は掛かりません。
Cloud Watch Logsの利用費用見積
Amazon CloudWatch 料金表
https://aws.amazon.com/jp/cloudwatch/pricing/
(以下引用)
収集(データインジェスト) スタンダード : USD 0.76/GB
保存(アーカイブ) : USD 0.033/GB
おおよそ月に10GB、過去3ヶ月分のログを保管する想定だったため、USD 8/月を見込んでいました。
AWS WAFによる許可ログも含めて収集する想定だったので、見積に誤りがないのか不安だったのですが、
時間をかけて正確に見積をするよりも「導入後しばらくの間頻繁にログ量の推移をみて、
あまりにも多かったら一旦ログ収集をやめてどうするか考えよう」と思い、ざっくりとした計上にしました。
S3の利用費用見積もり
Amazon S3の料金
https://aws.amazon.com/jp/s3/pricing/?nc=sn&loc=4
(以下引用)
S3標準 最初の50TB/月 : 0.025USD/GB
上記を対象に算出をしました。
Webサーバへの全てのアクセスログを収集するため、推測が難しかったのですが、
USD 1/月(40GB)を見込むようにしていました。
費用見積で計上していなかったもの
費用を見積もった時からAWS WAFを適用するまでに期間が空いたことで、
今の環境において実は計上されていなかったものがありました。
- S3に集めたALBのログをCloudWatchへ出力した時のログ量
LogStare Quintを利用するために、CloudWatchへ吐き出す必要があるため、
このログ量も計上するべきでした。
また、ALBの生ログを見たい場合には、S3のファイルを解凍する想定をしているため、
こちらのログ保持期間を1週間にしてもいいかなと思っています。
自社の規模ではあまり問題にならないであろうと思っていたので、下記は計上していませんでした。
- データ転送費用
※私の想定でも漏れがあるかもしれないため、正確な費用の見積をする場合には、
AWSの営業担当へ連絡するようにお願いします。
費用見積合計金額
環境を変更するにあたって追加でかかる費用は、約USD 50/月となりました。
費用見積のまとめ
費用算出結果の答え合わせはのちにやりますが、全体的に「安い」という印象がありました。
当初費用算出はかなり骨が折れるかと思いましたが、ドキュメントを読み進めれば問題なく算出できました。
もし費用ページを見てもよくわからない場合には、
そのサービスについての理解ができていない可能性があるので、
問い合わせるなりドキュメントを調べる必要があるかと思います。
また、費用も100%正確に見積もることは難しいので、
「上振れないように計上する」「ブレそうなものは入れてから様子をみる」
というのが大事だと思いました。
記載されている会社名、システム名、製品名は一般に各社の登録商標または商標です。
当社製品以外のサードパーティ製品の設定内容につきましては、弊社サポート対象外となります。