目的
IBM Cloud Internet Services(CIS)は、Cloudflareを利用したCDNやWAF機能を提供するサービスです。そのEnterpriseプラン(Enterprise Usage、Enterprise Packageなど)では、Edge Functionsという機能を使って、スクリプト処理をリクエストの前後に挟むことができます。
Edge FunctionsはCloudflareではCloudflare Workersと呼ばれる機能です
さて、公開サイトを非公開にするためにベーシック認証を使いたい場合があると思いますが、このときにWebサーバで1つ1つ設定するのは手間です。今回はCISのEdge Functionsを使ってBasic認証をかけてみます。
検証
前提
- CISのEnterpriseプランがオーダー済であること
- 対象となるWebサーバへのGLBは設定済であること
パスワードの生成
Basic認証のパスワードはID:パスワード
をBase64エンコードしたものです。今回はIDをuser1
、パスワードをhogehoge
とし、次のようにBase64エンコード文字列を生成します。
$ echo -n "user1:hogehoge" | base64
dXNlcjE6aG9nZWhvZ2U=
アクションの登録
コンソールから作成を選びます。
次のようなコードを設定します。Basic ~
のところは先ほど生成したBase64エンコード文字列にします。
addEventListener('fetch', event => {
event.respondWith(fetchAndApply(event.request));
});
async function fetchAndApply(request) {
if (request.headers.get('authorization') != 'Basic dXNlcjE6aG9nZWhvZ2U=') {
response = new Response('', { status: 401, statusText: 'Unauthorized' });
response.headers.set('WWW-Authenticate', 'Basic realm="Authentication Required"');
return response;
}
return fetch(request);
}
これにbasic-authという名前をつけて保存します。
次にこれを適用するURLを指定します。トリガータブからトリガーの追加を選択します。
トリガーURLはサイト全体ならFQDNでよいです。アクションにbasic-authを選択し保存します。
動作確認
ブラウザでサイトにアクセスします。ベーシック認証のダイアログが表示されます。
これで、先ほど指定したIDとパスワードでログインできることを確認してください。
以上