情シス担当の内です。
総務省やIPAの「企業・組織の情報セキュリティ対策」ページでは以下のように書いてあります
https://www.soumu.go.jp/main_sosiki/joho_tsusin/security_previous/business/admin03.htm
複数のサービス間で同じパスワード使い回さないこと、同一のパスワードを長期間使い続けることは避けなければなりません。ユーザーには定期的にパスワードを変更するように指導しましょう。また定期的な変更といっても、2つか3つのパスワードをあらかじめ決めて、使いまわすのも避けるように指導した方が良いでしょう。パスワードをWebブラウザなどのソフトウェアに記憶させないこと
IT業界で働く人にとっては百以上のシステムを利用してID/パスワードを管理することは、珍しく無いと思います。パスワードを管理するのってものすごい記憶力を要求されますよね。なのでシングルサインオン大好きです。
社内で使う情報システム全てでシングルサインオン対応目指して奮闘しております。
ということで、今回はGoogle Workspace(G Suite)と自前で構築したredmine間でのsaml認証によるシングルサインオンの実現手順と設定について説明したいと思います。
redmineではデフォルトでldap認証やOpenIDによる登録には対応していますが、SAMLはプラグインをインストールして設定する必要があります。会社でGoogle Workspaceを契約していて、プロジェクト管理システムとしてredmineを利用しているような会社向けの情報となります。Google WorkspaceがIdPで、redmineがSPという位置づけになります。
ギークフィードで業務効率化をアップさせる製品の開発や販売を行っている関係上、自社内でも積極的に効率化を推進しています。
会社で使用するシステムはなるべくシングルサインオンにすることで、入退社時のアカウント、ID・パスワードの発行や削除の管理の手間が減り、セキュリティの向上も図れますし、利用者にとってもID管理が楽になり業務効率もアップします。
自社製品のビジネス音声データ蓄積・活用DXサービス「YouWire」も当然シングルサインオン対応してあります。
目次
前提環境
本番環境用redmineはAlmaLinuxをAWSのec2上で動かしており、その上でpassengerを使ってapacheで動かしております、本番環境のAMIを作成して、saml認証検証用インスタンスを作成して実行します。
本番同様の環境が瞬時につくれるのはクラウドのメリットですね。
弊社では都度バージョンアップをして使っており、対象Redmineのバージョンは4.2.1、2021年10月1日現在での最新版が4.2.2なので、新しめのバージョンです。
redmineを運用するドメインは仮にhttps://redmine.geekdev.tokyo/としておきます。
設定をするためには、Goole Workspaceの特権管理者権限と、redmineの管理者権限が必要です。
SAML認証はredmineのデフォルトの機能では提供されていないため、こちらのプラグインを利用します。
https://github.com/chrodriguez/redmine_omniauth_saml
ありがたいことに、2019年6月時点のコミットでredmineバージョン4対応がされており、今回の環境につかえます。
では早速手順に入っていきましょう。
Google Workspaceの設定
- SAMLアプリの追加
Google管理コンソールにログインし、アプリ->ウェブアプリとモバイルアプリ->アプリを追加->SAMLアプリの追加を選びます。
- アプリ名とアプリアイコンを好きなもの設定してください。
- SSOのURLは後で使うのでコピーして控えておき、証明書も後で使うのでダウンロードしておきます。
- ACSのURL
redmineのURLプラス、/auth/saml/callback
を入力してください。
今回のケースだとhttps://redmine.geekdev.tokyo/auth/saml/callback
となります。 - エンティティID
redmineのURL
を入力してください。
今回のケースだとhttps://redmine.geekdev.tokyo/
となります。 - 名前IDの形式
EMAILを選択 - 名前ID
Primary emailを選択
- 属性マッピングを追加
をクリックしそれぞれ
First name -> firstname
Last name -> lastname
Primary email -> email
とします。
- サービスステータスの有効化
保存後、今作成したアプリにアクセスすると、ユーザーアクセスがオフになっているので、オフのところをクリック
サービスのステータスをオンにして保存します。
redmineの設定
プラグインのインストール
基本的にプラグインのreadmeに記載の手順に従って実行するだけとなります。
- サーバーにログインしてプラグインディレクトリに移動
1cd /var/www/redmine-4.2.1/plugins/ - プラグインのclone
1git clone https://github.com/chrodriguez/redmine_omniauth_saml.git - 環境に応じて適切な権限に変更してください。
1chown -R apache:apache redmine_omniauth_saml - redmineのHOMEディレクトリに移動
1cd /var/www/redmine-4.2.1/ - bundlerで依存関係のインスト-ル
1bundle install - assetsのコピーを実行
1RAILS_ENV=production bundle exec rake redmine:plugins - apacheの再起動
1systemctl restart httpd
プラグインの設定ファイル設定
- sha1フィンガープリントの生成
GoogleWorkspaceの設定時にダウンロードしておいた証明書をredmine上サーバーに置いて、
以下コマンドでsha1のフィンガープリントを生成します。1openssl x509 -sha1 -fingerprint -noout -in Google_2025-11-2-21149_SAML2_0.pem今度は出力結果のフィンガープリントをコピーしておきます。
- SAMLプラグインのサンプル設定ファイルをコピーして編集します。
12cp plugins/redmine_omniauth_saml/sample-saml-initializers.rb config/initializers/saml.rbvi config/initializers/saml.rb設定のポイントは以下のコメントに記載します。
12345678910111213141516171819Redmine::OmniAuthSAML::Base.configure do |config|config.saml = {:assertion_consumer_service_url => "https://redmine.geekdev.tokyo/auth/saml/callback", #redmineのURL + /auth/saml/callback:issuer => "https://redmine.geekdev.tokyo/", # redmineのurl:single_logout_service_url => "https://redmine.geekdev.tokyo/auth/saml/sls", # redmineのurl + /auth/saml/sls:idp_sso_target_url => "https://accounts.google.com/o/saml2/idp?idpid=xxxxxxx", # Google Workspaceの設定にて控えておいたSSOのURL:idp_cert_fingerprint => "2E:9D:C9:88:79:09:5D:12:8B:7D:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX", # 先ほど生成したsha1のフィンガープリント:name_identifier_format => "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", #persistentからemailAddressに変更#:signout_url => "http://sso.example.com/saml2/idp/SingleLogoutService.php?ReturnTo=",# 不要なのでコメントアウトする。:idp_slo_target_url => "https://redmine.geekdev.tokyo/auth/saml/sls",# googleのsamlがSLOをサポートしてないのでしかたなくredmineのlogout callback url:name_identifier_value => "mail", # mailのまま変更しない:attribute_mapping => {# How will we map attributes from SSO to redmine attributes:login => 'extra.raw_info.email',#先ほど設定した属性に合わせてる。:mail => 'extra.raw_info.email',#先ほど設定した属性に合わせてる。:firstname => 'extra.raw_info.firstname',#先ほど設定した属性に合わせてる。:lastname => 'extra.raw_info.lastname'#先ほど設定した属性に合わせてる。}} - 設定を読み込ませるためにまた再起動
1systemctl restart httpd
redmineの管理画面からプラグイン設定
redmineにログインし、
管理->プラグイン->Redmine Omniauth SAML pluginの設定に行きます。
- Enable SAML authentication
チェックを入れます。これを有効化するとログインページにsaml認証リンクが表示されます。 - Login page text
saml認証リンクのテキストになります/、何も設定しないと「Login with SAML」と表示されます。 - Replace Redmine login page
今回はチェックを入れません。チェックを入れると、redmineのURLにアクセスするといきなり
googleのsaml認証ページに飛ばされます。saml以外の認証でログインができなくなります。
ログインをsamlに限定したい場合にはチェックを入れます。 - Create users automatically?
チェックを入れます。
チェックを入れると、redmine側で同メールアドレスのユーザーがいなくても、
saml認証の初回ログイン時に自動的にユーザーが作成されます。
また、samlを導入する前に既にユーザーがいる場合は、メールアドレスでユーザーが紐付いて、
既存ユーザーとしてsamlログインが可能になります。
実運用を想定した追加設定
既存ユーザーをsamlログインのみに限定する
これまでの設定だけだと、既存ユーザーはID/パスワードでもsamlでもログインできる状態になります。
これはセキュリティ的によろしくないので、samlに限定するには、DBにログインして以下2つの手順を実行します。
パスワードログインできないようにパスワードhashをリセット
1 |
update users set hashed_password='' where id=該当ユーザーid |
ただ、これだけだとsamlでログインした後にパスワード変更画面からパスワード変更をすると、
ログインできてしまうので、samlログイン時のパスワード変更画面自体を無効化します。
パスワード変更を無効化
1 |
update users set created_by_omniauth_saml=1 where id=該当ユーザーid; |
samlで自動的に作成されたユーザーの場合はもともとこの値が1になってます。
これでsamlを使用しない、顧客用のアカウントは既存のID/パスワード認証で、
従業員はsamlに限定するといった運用が可能になります。
ID/パスワード運用ユーザーの個人設定画面
パスワード変更が可能。
SAMLユーザーの管理画面
パスワード変更が不可能
逆にGoogle Workspaceの障害でSAMLログイン自体ができない発生したときは、hashed_passwordを一時的に生成して上記カラムをupdateすれば障害回避して一時的にID/パスワード運用に戻して業務の続行が可能となります。
ID/パスワードログインユーザーのセキュリティ設定
redmine4.2から二要素認証に対応してますので、バージョンが古く、ID/パスワード運用をしている方は4.2以上にアップグレードすることをお勧めします。
またパスワードポリシーの設定もありますのできっちり設定致しましょう。
Google Workspaceとredmineのsaml認証まとめ
- IDパスワードは使い回さない、定期的に変えて、記憶力を鍛えましょう。
- 記憶力に限界が来たらシングルサインオンだ。
- redmineはプラグインを使えばsaml認証に対応してます。
- プラグインの各設定項目を詳しくご紹介しました。
- 実運用では既存社内ユーザー、IDパスワード運用の社外ユーザーのことも検討が必要です。
- ID/パスワード運用の場合は二要素認証を必須にするなど、よりセキュリティを意識しましょう。
- 2023年ギークフィードが評価されて表彰されたことの振り返りとアピール - 2023-12-24
- Linuxコンソールで、本番、ステージング、テスト環境を混同しないための4つの工夫 - 2023-09-13
- Amazon Linux 2023を触ってみて質問がありそうなことをまとめてみました。 - 2023-03-22
- AmazonLinux3じゃなくってAmazon Linux 2022 (AL2022) だってさ。 - 2022-01-31
- 【祝:月間PV6万越え】2021年のギークブログ大賞を発表します。 - 2022-01-10