こんにちはwoudonです。
Cloudflare Tunnelを使っていて、Wordpressのhttps://hogegoge.com/wp-adminやhttps://hogegoge.com/loginへのアクセスコントロールを設定した備忘録です。
今回はgoogleアカウントでの認証の設定をしました。
やりたいこと
- WordPressで管理者画面やログイン画面への攻撃対策として、Cloudflareのサービスを用いてページにアクセス制限をかけたい。
- 認証はGoogleアカウントを使用したい。
今回はGoogleアカウントでログインし、そのアカウントのメールアドレスが一致した場合のみ通過できるという設定をする。(この認識で合っているのだろうか…)
アクセスコントロールの設定
Identityの追加
Cloudflareのダッシュボード(Cloudflare One)から[Identity]→[Identity providers]に移動し、Add an identity providerを押し、Select an identity providerでGoogleを選択。表示されるInstructions for setupに従って設定する。
Policyの追加
Cloudflareのダッシュボード(Cloudflare One)から[Access Policies]→[Policies]に移動し、Add a policyを押し、policy nameを入力し、ActionをAllow、Session durationを決める。

Add rulesではIncludeのSelectorでEmailsを選択し、Valueに認証に使うGoogleアカウントのメールアドレスを入力する。

最後に右下のsaveを押して保存する。
Applicationの追加
Cloudflareのダッシュボード(Cloudflare One)から[Access controls]→[Applications]に移動し、Add an applicationを押し、Self-hostedを選択。
Application nameを入力し、Session Durationを選択する。さらに、Add public hostnameを押し、認証を追加したいドメインとパスを入力する。パスはwp-admin/*とwp-login.php*に設定。1

次に、その下のAccess policiesでSelect existing policiesから作ったポリシーを選択する。
次に、その下のLogin methodsの設定をする。ここでGoogleアカウントのみの認証にしたい場合は、Accept all available identity providersのチェックを外し、Googleのみを選択する。

そして、右下のnextを2回押し、saveすれば完了。
追記(2026/02/26)
一部のパスをBypassしたい場合には別のアプリケーションを作る必要があるそうです。そのアプリケーションでのポリシーのルールのセレクターはEveryoneにします。
For example, some applications have an endpoint under the
/adminroute that must be publicly routable. In this situation, you could create an Access application for the domain
引用:Cloudflare Docs
最後に
Applicationの設定とPlicyの設定を組み合わせることで、様々なアクセス制御ができます。
例えば、ポリシーのルールにAdd requireでIP範囲の制限をかけることで国内からのアクセスに限定したり、OTPとGoogleアカウント認証でセッションが切れる時間を変えるなど。
- Gemini曰くWordPressは、記事の自動保存やダッシュボードの表示更新に/wp-admin/admin-ajax.phpを使うから、このパスは「Bypass(認証スキップ)」する必要があるらしい。
悲劇が1度起きてから考えよう。 ↩︎


コメント