2
2

EC2でRedmineを起動し、CognitoでOAuth認証を設定してみる

Last updated at Posted at 2024-03-23

こんにちは。Kaneyasuです。

本記事はこちらの記事の続編です。

今度はCognitoを使ってRedmineにOAuth認証を実装してみます。

本記事の対象者

本記事はCognitoとRedmineを使って、OAuth認証を実装する方法を紹介しています。
RedmineはEC2・ALB・ACM・Route53を用いて構築しています。
Redmine本体のセットアップ方法と、EC2・ALB・ACM・Route53の設定方法については、端折っていますので、これらの基本操作を把握されている方が対象となります。

Redmineのセットアップ

まずはRedmineのセットアップを行います。
サーバーはEC2を使い、各種設定を簡略するためにBitnamiのRedmineのAMIを使用します。

後で出てくるプラグインが、Redmine 5.1.0以上のバージョンを要求するため、Redmine 5.1.0以上のバージョンを選択します。

なお、管理者ログインのためのパスワードは、EC2のシステムログで確認ができます。
Bitnami系の仮想マシンは大体この仕様のようです。

EC2の詳細画面で、アクション>モニタリングとトラブルシューティング>システムログを取得をクリックをクリックします。

EC2の詳細画面で、アクション>モニタリングとトラブルシューティング
システムログを取得をクリック

システムログのどこかに、管理者ユーザーのパスワードが出ています。
ただし、起動して時間がかかっていたり、何度も再起動しているとログが流れている可能性があります。
その場合はEC2を作り直した方が早いでしょう。

HTTPS化

RedmineをCognitoとOAuthで連携するためには、RedmineのHTTPS化が必要です。
前回のGitLabとは異なり、BitnamiのRedmineは単独だとHTTPS化が難しいので、ALB・ACM・Route53を使ってHTTPS化します。
(できないわけではありませんが、私は結構大変だと思います。)

証明書の用意

HTTPS化には、ALBに証明書を登録する必要があります。
証明書はACMで作成しておきます。
ACMで作成した証明書を有効にするには、Route53でドメインを登録して、CNAMEを設定する必要があります。
これらの作業を事前に行なっておきます。

ACMの証明書はALBと同じリージョンに作成してください。
私はいつもCloudFrontを使用しているので、バージニアでACMを作成してしまい、ALB側の選択肢に出てこなくて焦りました。

ターゲットグループとALBの作成

ターゲットグループを作成、RedmineのEC2を登録します。
今回はALB>EC2間の通信はHTTPとしています。

ターゲットグループの設定

ヘルスチェックのURLは、Redmineのログイン画面のURLが使えます。

  • URL
    • /login
  • プロトコル
    • HTTP
  • ステータス
    • 200

ターゲットグループのヘルスチェック設定

ターゲットグループを作ったら、ALBを作成します。
リスナーのプロトコルはHTTPSを選択し、ACMで作成した証明書を選択します。
ターゲットグループは先ほど作成したものを選択します。

リスナーのプロトコルはHTTPS

ALBとドメインの紐付け

Route53でエイリアスレコードがCNAMEレコードを作成し、ドメインとALBを紐付けます。

HTTPSの動作確認

ここまででHTTPS化が完了しているはずです。
ブラウザでドメインを入力して、Redmineのログイン画面が表示されることを確認します。

RedmineのOAuth認証用プラグインの導入

今回はこちらのプラグインを使用させていただきます。

RedmineのEC2にSSHでログインし、OAuth認証用のプラグインを導入します。
プラグインのページにインストールコマンド一式が書いてありますが、BitnamiのRedmineはパスが少し異なります。
パスを調整すると以下のコマンドになります。

cd /bitnami/redmine/plugins
git clone https://github.com/kontron/redmine_oauth.git
chown -R www-data:www-data redmine_oauth
cd /opt/bitnami/redmine
bundle config unset deployment
bundle install
sudo /opt/bitnami/ctlscript.sh restart apache

Cognito側の設定

Cognitoのユーザープールを作成し、アプリケーションクライアントを作成します。
ここの手順は前回の記事を参照してください。

新しく作成したアプリケーションクライアントで、ホストされた UIを有効化します。
ホストされた UIの設定も前回の記事を参照してください。
ホストされた UIのコールバックURLは、プラグインのページに書いてあるURLを使用します。
こちらですね。

https://yourdomain/oauth2callback

yourdomainは、Route53で設定したドメインを入力します。
HTTPSであることがポイントです。
HTTPSでないと、アプリケーションクライアントにコールバックURLとして登録できません。

ホストされた UIの設定

もしかしたら、コールバックURLを追加するだけで、アプリケーションクライアント自体は使いまわしてもいいのかもしれません。
こちらは未検証なので、試してみた方がいいかもしれません。

Redmineの設定

Redmineに管理者でログインし、設定画面を開きます。

Redmineの管理画面を開く

ホスト名とパスをRoute53で設定したドメインに変更します。
プロトコルはHTTPSに変更します。

ホスト名とプロトコルの設定

Redmine OAuth pluginの設定

Redmineに管理者でログインし、プラグインの設定画面を開きます。

Redmineの管理画面を開く

Redmine OAuth pluginの設定画面を開きます。

Redmine OAuth pluginの設定画面を開く

設定内容は下記の通りです。
表に書いていないものはデフォルト値のままとなります。

項目 設定内容
Provider Customを選択します
Clent ID CognitoのアプリケーションクライアントのIDを入力します。
Client Secret Cognitoのアプリケーションのシークレットを入力します。
Provider name 任意の文字列を入力します。Redmineのログイン画面に出るボタンの表記になります。
Auth endpoint Cognitoのホストされた UIのURLを入力します。
Token endpoint Cognitoのアプリケーションクライアントのトークンエンドポイントを記述します。
Profile endpoint CognitoのアプリケーションクライアントのUserinfo エンドポイントを記述します。
UID Field ここで書いた属性がRedmine側のログインIDになります。
今回はemailにしました。

Redmine OAuth pluginの設定内容

これで設定は完了です。

Redmineでログイン確認

Redmineのログイン画面で、Cognitoのボタンが表示されていることを確認します。
クリックするとCognitoのログイン画面に遷移します。

Redmineのログイン画面

ログインするとRedmineの画面に戻り、ユーザーの作成画面に遷移します。
ログインIDにCognitoから取得したemailが入力されていることを確認します。
氏名を入力して保存します。
パスワードは入力しなくても通ります。

Cognitoログイン後のユーザー作成

保存すると一旦、管理者の承認待ちになります。
管理者が承認すると、次回ログインからはRedmineにログインできます。

以上で完了です。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2