OpenResty Edge で HTTP 基本認証を設定するには、管理コンソールで基本認証ユーザーグループ(単一アプリケーションに限定、またはすべてに共通のグローバル)を作成してユーザーを追加し、「基本認証を有効にする」ページルールアクションでルートに適用します。認証はゲートウェイサーバー上で直接実行され、設定をリリースするとすべてのクラスターへサーバーのリロード・再起動・バイナリアップグレードなしで配信されます。

本チュートリアルでは、アプリケーション単位とグローバルの両方の設定を順を追って解説し、ブラウザと curl で動作を確認します。OpenResty Edge 製品シリーズの一編です。

OpenResty Edge における HTTP 基本認証

HTTP 基本認証はゲートウェイサーバーによって直接処理されます。

図:HTTP 基本認証は OpenResty Edge のゲートウェイサーバーが直接処理する

アプリケーションの HTTP 基本認証の設定

いつものように、OpenResty Edge の Admin Web コンソールにアクセスしましょう。これはコンソールのサンプルデプロイメントです。各ユーザーは独自のローカルデプロイメントを持っています。

OpenResty Edge の Admin Web コンソールのダッシュボード

ゲートウェイアプリケーションの HTTP 基本認証の認証情報を設定しましょう。

以前の例で使用した test-edge.com アプリケーションを引き続き使用できます。

OpenResty Edge の test-edge.com ドメインのサンプルゲートウェイアプリケーション

このアプリケーションに入ります。

OpenResty Edge コンソールで test-edge.com アプリケーションに入る

基本認証ユーザーグループの追加

HTTP 基本認証アカウントのページに移動します。

アプリケーションの HTTP 基本認証アカウントページ

1 つまたは複数の基本認証ユーザーグループを追加することができます。各ユーザーグループには 1 人または複数のユーザーを設定できます。

新しい基本認証ユーザーグループを追加します。

新しい基本認証ユーザーグループを追加する

グループ名として「tutorial-group」を入力します。このユーザーグループはこのチュートリアルのデモンストレーション用です。

基本認証ユーザーグループ名 tutorial-group を入力する

保存します。

新しい基本認証ユーザーグループを保存する

このグループに新しいユーザーを追加します。

tutorial-group グループに新しい基本認証ユーザーを追加する

このボタンをクリックして追加します。

ボタンをクリックして新しい基本認証ユーザーを追加する

ユーザー名「Sam」を入力してください。

基本認証ユーザー名 Sam を入力する

パスワードを入力してください。

基本認証ユーザーのパスワードを入力する

保存してください。

新しい基本認証ユーザーを保存する

これで「tutorial-group」というユーザーグループに新しいユーザーが追加されました。

tutorial-group ユーザーグループに追加された新しいユーザー Sam

なお、基本タブでユーザーグループの設定を編集することができます。ここでは変更を加えません。

基本認証ユーザーグループ設定を編集する基本タブ

このページを閉じてください。

基本認証ユーザーグループのページを閉じる

ページルールで基本認証を有効化

ページルールのページに移動し、基本認証を有効にしてください。

OpenResty Edge アプリケーションのページルールページ

この既存のページルールには、事前に定義されたアップストリームへのリバースプロキシが設定されています。この部分については、以前のチュートリアルで説明しました。

事前定義したアップストリームへのリバースプロキシが設定済みの既存ページルール

新しいページルールを追加しましょう。

基本認証を有効にする新しいページルールを追加する

新しいアクションを追加します。

ページルールに新しいアクションを追加する

「basic auth」と入力して検索します。

基本認証のページルールアクションを検索する

「基本認証を有効にする」オプションを選択します。

「基本認証を有効にする」ページルールアクションを選択する

先ほど作成した基本認証ユーザーグループを選択します。

ページルールに使う基本認証ユーザーグループを選択する

「app-tutorial-group」を選択します。

app-tutorial-group ユーザーグループを選択する

追加の「app-」プレフィックスは、このユーザーグループが現在のアプリケーションにのみ使用されることを示しています。グローバルな基本認証のユーザーグループ名には、追加のプレフィックス「global-」が付きます。グローバル HTTP 基本認証の設定については後ほど説明いたします。

このルールを「トップルール」として設定し、常に最初に実行されるようにします。任意の順序を設定することができます。

基本認証のページルールをトップルールに設定する

このルールを保存します。

基本認証のページルールを保存する

通常通り、この新しい変更をプッシュするためにリリースする必要があります。

ページルールを配信するために新しい設定をリリースする

このボタンをクリックします。

ボタンをクリックして設定リリースを開始する

リリースします!

設定リリースを確定する

変更が全てのゲートウェイサーバーに同期されました。

設定がゲートウェイクラスターへ完全に同期された状態

新しいページルールが全てのゲートウェイクラスターとサーバーにプッシュされました。

新しいページルールがすべてのゲートウェイクラスターとサーバーへプッシュされた

設定の変更にはサーバーのリロード、再起動、バイナリアップグレードが不要です。そのため、非常に効率的でスケーラブルです。

設定変更はサーバーのリロード・再起動・バイナリアップグレードなしで反映される

ブラウザと curl で基本認証をテスト

ゲートウェイアプリケーションにアクセスしてみましょう。ウェブページの内容を表示する代わりに、ウェブブラウザの認証ダイアログがトリガーされることが確認できます。

HTTP 基本認証によって表示されるブラウザの認証ダイアログ

まず、「キャンセル」ボタンをクリックしてみましょう。ページが「401 Unauthorized」エラーページに変わることが確認できます。

ブラウザの認証ダイアログでキャンセルをクリックする

認証をキャンセルした後に表示される 401 Unauthorized エラーページ

ページを再読み込みします。

ページを再読み込みして基本認証を再試行する

今回は、事前に準備した正しいユーザー名とパスワードを入力します。

認証ダイアログに正しいユーザー名とパスワードを入力する

これでウェブページにアクセスできるようになりました。

HTTP 基本認証を通過した後に表示されるウェブページの内容

次に、curl ツールを使用してコマンドラインで HTTP 基本認証の設定をテストしましょう。

ターミナルでテストリクエストを送信します。

curl -sSI http://test-edge.com

コマンドラインで curl を使ってテストリクエストを送信する

レスポンスが 401 Unauthorized であることが確認できます。

401 Unauthorized を示す curl のレスポンス

今回は「u」オプションを使用して、基本認証の認証情報を指定しましょう。

curl の -u オプションで基本認証の認証情報を指定する

こちらがユーザー名です。

curl の基本認証の認証情報に含まれるユーザー名

こちらがプレーンテキストのパスワードです。

curl コマンドにプレーンテキストで表示されるパスワード

このコマンドを実行します。

現在、レスポンスが 200 OK であることが確認できます。認証に成功し、サーバーが最終的なレスポンスを返しました。

基本認証を通過した後に 200 OK を示す curl のレスポンス

すべてのアプリケーションでグローバル HTTP 基本認証を設定

Edge アプリケーション内で基本認証を設定するだけでなく、Edge のグローバル設定でも設定することができます。グローバル認証ユーザーグループは、すべての Edge アプリケーションで利用可能です。

基本認証は、OpenResty Edge が備える複数のゲートウェイレベルのセキュリティアクションの一つです。より強固な保護が必要な場合は、ボットをブロックする組み込み CAPTCHAWeb アプリケーションファイアウォール と組み合わせられます。いずれも同じページルールの仕組みで有効化できます。

グローバル基本認証ユーザーグループの追加

グローバル設定ページに移動します。

OpenResty Edge コンソールのグローバル設定ページ

グローバル基本認証認証情報ページに進みます。

グローバル基本認証認証情報ページ

このボタンをクリックして、新しい基本認証ユーザーグループを追加します。

新しいグローバル基本認証ユーザーグループを追加する

グループ名を入力します。

グローバル基本認証ユーザーグループ名を入力する

保存します。

新しいグローバル基本認証ユーザーグループを保存する

これで新しいグローバル基本認証ユーザーグループが作成されました。

新しく作成されたグローバル基本認証ユーザーグループ

編集ボタンをクリックして新しいユーザーを追加することもできます。

編集ボタンをクリックしてグローバルグループにユーザーを追加する

このボタンをクリックして新しいユーザーを追加します。

ボタンをクリックしてグローバルグループに新しいユーザーを追加する

ユーザー名「Kelly」を入力します。

グローバル基本認証ユーザー名 Kelly を入力する

パスワードを入力します。

グローバル基本認証ユーザーのパスワードを入力する

保存します。

新しいグローバル基本認証ユーザーを保存する

アプリケーションへのグローバル基本認証の設定

「tutorial-global-group」ユーザーグループに新しいユーザーが追加されました。ゲートウェイアプリケーションにグローバル認証情報を設定する方法を見てみましょう。

tutorial-global-group ユーザーグループに追加された新しいユーザー Kelly

このページを閉じます。

グローバル基本認証認証情報ページを閉じる

アプリケーション一覧ページに移動します。

OpenResty Edge コンソールのアプリケーション一覧ページ

test-edge.com ドメインを検索します。

test-edge.com ドメインを検索する

このアプリケーションに入ります。

test-edge.com アプリケーションに入る

ページルールページに移動します。

アプリケーションのページルールページを開く

このルールを編集します。

この基本認証のページルールを編集する

ドロップダウンリストをクリックして、ユーザーグループを切り替えます。

ドロップダウンリストをクリックして基本認証ユーザーグループを切り替える

ここでグローバルユーザーグループを選択できます。この変更が保存してリリースされると、そのグローバルユーザーグループ内のユーザー認証情報が使用されるようになります。

基本認証のページルールにグローバルユーザーグループを選択する

以上が本日お伝えする内容です。

よくある質問

OpenResty Edge で HTTP 基本認証を有効にするには?

基本認証ユーザーグループを作成してユーザーを追加し、「基本認証を有効にする」アクションを持つページルールを追加してそのユーザーグループを指定します。設定をリリースしてルールをゲートウェイサーバーへプッシュします。以降、保護されたルートは有効なユーザー名とパスワードが提供されるまで 401 を返します。

基本認証の変更にゲートウェイのリロードや再起動は必要ですか?

いいえ。設定をリリースすると、新しいページルールがすべてのゲートウェイクラスターとサーバーへ、リロード・再起動・バイナリアップグレードなしでプッシュされます。そのため大規模環境でも変更が効率的に反映されます。

curl で HTTP 基本認証をテストするには?

curl -sSI http://test-edge.com のように通常のリクエストを送ると 401 Unauthorized が返ります。-u オプションで認証情報を付けると——curl -sSI -u Sam:PASSWORD http://test-edge.com——正しいユーザー名とパスワードで 200 OK が返ります。

基本認証を有効にした後に「401 Unauthorized」が出るのはなぜですか?

認証情報が送信されていない、または誤っている場合の想定どおりの挙動です。ブラウザは認証ダイアログを表示し、キャンセルすると 401 ページが表示されます。ユーザーグループに設定したユーザー名とパスワードを入力するとリクエストが通ります。

OpenResty Edge について

OpenResty Edge は、マイクロサービスと分散トラフィックアーキテクチャ向けに設計された多機能ゲートウェイソフトウェアで、当社が独自に開発しました。トラフィック管理、プライベート CDN 構築、API ゲートウェイ、セキュリティ保護などの機能を統合し、現代のアプリケーションの構築、管理、保護を容易にします。OpenResty Edge は業界をリードする性能と拡張性を持ち、高同時接続・高負荷シナリオの厳しい要求を満たすことができます。K8s などのコンテナアプリケーショントラフィックのスケジューリングをサポートし、大量のドメイン名を管理できるため、大規模ウェブサイトや複雑なアプリケーションのニーズを容易に満たすことができます。

著者について

章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。

章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay動的トレーシング技術を活用した非侵入型のプロファイリング・トラブルシューティングツール)と OpenResty Edge(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJITGDBSystemTapLLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!