Cloudflareで管理者ページへのアクセス制御

こんにちは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 /admin route 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アカウント認証でセッションが切れる時間を変えるなど。

  1. Gemini曰くWordPressは、記事の自動保存やダッシュボードの表示更新に/wp-admin/admin-ajax.phpを使うから、このパスは「Bypass(認証スキップ)」する必要があるらしい。
    悲劇が1度起きてから考えよう。 ↩︎

コメント

タイトルとURLをコピーしました