カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

digdag serverへのブラウザアクセス時に認証を設定する

digdagのサーバをローカルで起動するとブラウザからアクセスできるようになりますが、そのログイン時にブラウザで認証する方法がわからなかったので、試してみました。
検証した環境は以下になります。

  • Cloud:AWS
  • OS:Windows Server 2019
  • IIS:Version 10.0.17763.1
  • digdag:0.9.42
    尚、digdag serverの設定は以前の記事で使用したものを流用しています。



目次



実施作業

準備

まずdigdagでの認証の設定方法を調べました。

Hiroyuki Satoさん(@hiroysato)の以下のツイートがかなり参考になりました。



この設定だけだとクライアントからのPushではできるようですが、ブラウザからアクセスする場合はSimpleModifyHeadersというヘッダ情報を付与するプラグインを使用する必要があるようです。

ただ、自分がこのやり方で実施したところ、プロジェクトの作成が401エラーで失敗してしまい、うまく認証されていないようでした。 なので、ちょうどWindows Serverを使用しているので、IISBasic認証と組み合わせてできないかと試行錯誤したところ、うまくいったのでその手順を書いていきます。 f:id:live-your-life-dd18:20201120142746p:plain

Application Request Routingインストール

IISでリバースプロキシを使用するために、以下のURLを参考にARRをIISにインストールします。 Application Request Routing 3.0 をインストールする - Windows Server Tips

インストールが完了すると[Application Request Routing Cache]が表示されるようになります。 f:id:live-your-life-dd18:20201120134731p:plain

Basic認証用サイト作成

このあたりを参考にしつつサンプルサイトを作成します。 codezine.jp

どういう設定が最適かはわかっていませんが、以下のような設定でサイトを作成しました。 f:id:live-your-life-dd18:20201120132700p:plain

物理パス配下のindex.htmlはこんな感じです。 f:id:live-your-life-dd18:20201120133422p:plain

ホスト名でアクセスできるようにhostsを設定します。 URL書き換え設定する際にIPだとわかりづらいため、digdagserverという名前でEC2のプライベートIPを設定しています。 f:id:live-your-life-dd18:20201120132847p:plain

「http:\EC2のホスト名:ポート番号」でブラウザからアクセスして、想定通り表示されることを確認します。 f:id:live-your-life-dd18:20201120135826p:plain

digdag server起動

digdag serverの設定内容はこちらです。 f:id:live-your-life-dd18:20201120133613p:plain

以下のURLを参考にBasic認証用のパラメータを追加しています。 この時、usernameとpasswordにはIISをインストールしているサーバの認証情報(今回はEC2のAdministratorとそのパスワード)を設定します。

server.authenticator-class = io.digdag.standards.auth.basic.BasicAuthenticator
basicauth.username = admin
basicauth.password = password
basicauth.admin = true

digdag basic auth · GitHub

以下のコマンドでdigdag serverを起動します。

# digdag server -c .\server.properties

f:id:live-your-life-dd18:20201120133658p:plain

ブラウザからdigdag serverにアクセスできることを確認します。 この時点では特にBasic認証のポップアップが表示されるとかはありません。 f:id:live-your-life-dd18:20201120133803p:plain

この時点では、このように新しいプロジェクトを作成しようとすると401エラーで失敗してしまいます。 f:id:live-your-life-dd18:20201120133912p:plain

リバースプロキシ設定

ここからIISのリバースプロキシの設定をしていきます。

IISのsamplesiteを選択して、URL書き換えアイコンをダブルクリックします。 f:id:live-your-life-dd18:20201120134637p:plain

右側の規則の追加を押下します。 f:id:live-your-life-dd18:20201120134552p:plain

リバースプロキシを選択してOKを押下します。 f:id:live-your-life-dd18:20201120134906p:plain

転送先にサーバー名(ここではdigdagserver)とポート番号(65432)をコロンで繋げた文字列を記載してOKを押下します。 ※あとでつづりを間違えていたことに気づいたので修正してます→「http://digdagserver:65432/{R:1}」 f:id:live-your-life-dd18:20201120135001p:plain

追加した規則が表示されていることが確認できます。 f:id:live-your-life-dd18:20201120135148p:plain

接続確認

再度8080のポートにアクセスするとBasic認証されていることが確認できます。 f:id:live-your-life-dd18:20201120143401p:plain

認証に成功するとアップロード済みのworkflowやsessionがブラウザから確認できます。 f:id:live-your-life-dd18:20201120140010p:plain

サーバ内からだけでなく、EC2にグローバルIPを付与してSGでインバウンドを許可することで外部からのアクセスも可能です。 f:id:live-your-life-dd18:20201120144211p:plain f:id:live-your-life-dd18:20201120140208p:plain

外部からアクセス可能な設定をしているとこのように65432ポートを指定されると、digdagサーバに直接アクセスができてしまいます。(Basic認証はされていないのでworkflow等は確認できませんが) f:id:live-your-life-dd18:20201120143114p:plain

その場合はEC2のSGの設定で8080からのアクセスのみ許可し、65432のポートへのアクセスは許可しないようにすることでアクセス制御が可能です。 f:id:live-your-life-dd18:20201120140628p:plain f:id:live-your-life-dd18:20201120140654p:plain

このように65432ポートではアクセスできなくなります。 f:id:live-your-life-dd18:20201120141039p:plain

ポイント

以下のツイートのヘッダ情報にauthorizationを追加するという部分から、IISBasic認証を使うとヘッダ情報にauthorizationが付与されてそのまま認証されるんじゃないか、というところに気づいて試したところ、予想通りうまくいくことができました。



このやり方だと別途プラグインをインストールしたりnginxを前に立てる必要がなく、IISが使用可能なWindows Server上で構築するだけでできるのでかなり楽でした。

Tips

注意点として、digdag serverを設定するプロパティのパラメータで、basicauth.usernameとbasicauth.passwordをIISBasic認証で使用するユーザ/パスとそろえる必要があります。 f:id:live-your-life-dd18:20201120142118p:plain

それがされていないとdigdag server側での認証が上手くされずに、ひたすら認証のポップアップが表示され続けます。

2020/11/25追記

あとから判明しましたが、digdag serverの前段にIISのリバースプロキシを設定するとタスクのログがブラウザから見れなくなります。 f:id:live-your-life-dd18:20201125011826p:plain

その場合はIISの要求フィルターで「ダブルエスケープを許可する」にチェックをつけると見れるようになります。尚、この設定は即時反映です。 f:id:live-your-life-dd18:20201125011919p:plain f:id:live-your-life-dd18:20201125011956p:plain

感想及び所感

digdag serverでBasic認証ができました。