当ブログの管理系機能(WordPressの管理系機能)への不正アクセス対策として、GAEの制約上の問題から、
- プラグインの利用
- 複雑なパスワードを設定
という脆弱な対策しか実は取れませんでした。
しかし、GAEとServerless NEGを連携をしたので、ロードバランサが使えるようになり、Cloud Armorが晴れて利用可能となりました。
早速設定し、不正アクセスそのものを遮断することにします。
※Wordpressがいかに攻撃対象となっているか?について、こちらの記事をご覧下さい。
What is Cloud Armor??
- GCPのWAF(Web Application Firewall)サービス
- GCPロードバランサとの連携で利用可能
私見ですが、GCPはグローバルレベルでの高性能・高可用性の実現を追求した設計思想のサービスだなと使っていて感じています。
なので、ロードバランサを中核に据える傾向があり、Cloud Armorもロードバランサ連携を前提に作ったんじゃないかな?と思っています。
料金
ポリシーの料金 | 1ポリシーあたり$5/月 |
ルールの料金 | 1ルールあたり$1/月 ※日割り計算ありとのこと |
着信リクエスト料金 | $0.75$/HTTP(S) リクエスト 100 万件 |
設定における前提条件
- ロードバランサと、ロードバランサのバックエンドで動くサービスが既に構築済である必要があります。
Serverless NEGは当記事執筆時点ではbeta版なので、GCPのSLA保証対象外となります、ご注意下さい。→GAになりました。
※GAEとServerless NEGを連携させる方法については、下記記事をご覧頂けると幸いです。
設定
[Cloud Consoleメニュー]->[ネットワークセキュリティ]->[Cloud Armor]を選択し、設定画面に進みます。
ポリシー作成
[ポリシーを作成]をクリックします。
- 名前の入力
- 説明の入力(任意)
- デフォルトルールのアクション:許可を選択
を行い、[次のステップ]をクリックします。
ルールの追加
[ルールを追加]をクリックします。
今回作成するルールはwp-login.php,wp-aemin/*へのアクセスに対し、
- 自宅のグローバルIPアドレスは接続許可
- 自宅以外のグローバルIPアドレスは接続拒否
となります。
※ロードバランサのログを事前にみてみましたが、ロードバランサに通知されるグローバルIPアドレスはIPv4でした。
ルール設定画面の、
- 条件:詳細モード
- アクション:拒否
- 優先度:任意の値(今回は最優先ルールにするため、小さい数字を設定)
を入力、選択した上で一致に下記条件式を入力後、[完了]をクリックします。
wp-login.phpのアクセス拒否ルールが出来ました。
同様の手順でwp-admin/*のアクセス拒否ルールを追加し、[次のステップ]をクリックします。
条件式:wp-login.phpアクセス拒否
request.path.matches('/wp-login.php') && !inIpRange(origin.ip, '【自宅のグローバルIPアドレス/32】')
条件式:wp-admin/*アクセス拒否
request.path.matches('/wp-admin/*') && !inIpRange(origin.ip, '【自宅のグローバルIPアドレス/32】')
ダーゲットポリシーへの適用
[ターゲットの追加]をクリックし、
- タイプ:ロードバランサバックエンドサービス
- ターゲット:対象となるバックエンドサービス
を選択し、[完了]->[ポリシーを作成]の順でクリックします。
設定が上手くいけば、こんな感じで詳細画面が表示されると思います。
動作確認
スマートフォンで動作確認
スマートフォンのWifiを切って、サイトに通常接続出来る事を確認します。
次にサイトURLの末尾に[/wp-login.php]や[/wp-admin]でアクセスしてみます。
ブロックされていますね。
ロードバランサのログ確認
ログビューアでロードバランサのアクセスログをみてみます。
スマートフォンアクセスのブロックログが出力されています。
まとめ
- ¥1,000/月ほどコスト増にはなりますが、GAEで安心してWordpressを運用できるようになりました。
- 今回は簡単な例ですが、他にも高度なことができるサービスなので、エンタープライズユースでも十分ご利用頂けると思います。