3.9K Views
November 04, 23
スライド概要
第25回redmine.tokyo勉強会
https://redmine-tokyo.connpass.com/event/297351/
Microsoft MVP for Microsoft Azure
Microsoft Entra/Azure による Redmine の企業内利用向けカスタマイズと運用 株式会社バンダイナムコスタジオ 技術スタジオ オンラインテクノロジー部 サーバソリューションユニット DXセクション 八重樫 剛史 Takeshi Yaegashi 2023/11/04 Redmine Tokyo 勉強会 #25
自己紹介 • 八重樫 剛史 Takeshi Yaegashi • 株式会社バンダイナムコスタジオ (BNS) 技術スタジオ オンラインテクノロジー部 サーバソリューションユニット DXセクション テクニカルディレクター • 社内開発者向けのクラウドサービス導入推進 プラットフォームエンジニアリングのプロジェクトに従事 • Microsoft MVP for Microsoft Azure (2023) https://mvp.microsoft.com/ja-jp/PublicProfile/5005134 • Web (blog) X (Twitter) GitHub https://l0w.dev https://twitter.com/hogegashi https://github.com/yaegashi 2
本日の話題 • 社内で稼働する Redmine を Microsoft Entra/Azure のクラウドインフラに完全移行する取り組み • https://github.com/yaegashi/dx2devops-redmine • Microsoft Entra ID (旧称 Azure Active Directory 略称 ME-ID) • Microsoft が提供する認証基盤 (IDaaS) • Microsoft 365 導入企業であれば必ずついてくる・ほぼ全従業員が利用する • Microsoft Azure • Microsoft による汎用クラウドサービス • Azure App Service: Linux コンテナ Web アプリがホストできる PaaS • Azure Database for MySQL/PostgreSQL: マネージドなデーターベース PaaS 3
経緯 • Redmine は非常に長い間お世話になっているアプリ • 利用歴 15 年以上? 2008年あたりには 1.0 になる前の Redmine を社内で複数使用していたらしい • 歴史的に重要な情報が格納されており、リンク参照もあるので動かし続けなければいけない • 問題点 • 多数の社内向け Redmine インスタンスの運用・維持コスト • アプリのバージョンアップ、独自プラグイン管理、ホストOS管理、オンプレミス機材老朽化、etc. • 解決策 • オンプレミス機材からクラウド IaaS (仮想マシン) への移行 • Redmine アプリのコンテナ化による提供仕様の統一・IaaS から PaaS への移行 • オンプレミス認証 (LDAP, AD) の廃止、クラウド認証 (OpenID Connect, SAML) の採用・ゼロトラスト化 • (実際にとれる解決手段は各 Redmine インスタンスの状況に依存する) 4
Microsoft Entra ID (旧称 Azure Active Directory 略称 ME-ID) の特徴 • ME-ID はクラウド時代のユニバーサルな ID 認証基盤として利用価値が高い • Microsoft 365 導入企業であればどの従業員も必ず ME-ID に登録されている • 社外のゲストユーザーを受け入れることもできる (B2Bコラボレーション: テナント設定に依存) • 業界標準の認証プロトコルに対応: OAuth, OpenID Connect, SAML, etc. HTTPS のみで完結 • Redmine における対応状況 • Redmine では公式・定番といえるクラウド標準認証機能は存在しない • 有志が公開する OpenID Connect や SAML のプラグインは複数見つかるが… • 古い・メンテナンスに不安があるステータスのプラグインが多い (最終更新 n 年前) • 自分の思い通りの仕様・機能を備えたものはほとんどない • 既存のプラグインをベースに、自分向けの機能開発とメンテナンスをしていくしかない状況 5
Azure App Service (Web アプリ PaaS) の特徴 • Linux コンテナ Web アプリ (永続化ボリューム付き) • コンテナ化した Redmine アプリを稼働する • Redmine アプリの /files を永続化ボリュームがマウントされる /home/site/wwwroot への symlink とする • データベースとしては Azure Database for MySQL/PostgreSQL などの PaaS を利用する • 課金単位である App Service Plan に対して複数の Web App サイトをデプロイ • 複数の Redmine インスタンスで単一の App Service Plan と DB PaaS を共有することで容易に高集積化が可能 • Azure App Service 認証・認可 (Easy Auth) • ME-ID や他社 IdP のユーザーをクラウド認証・認可してくれるフロントエンドプロキシサーバー • カスタムドメイン • 独自の名前のカスタムドメインでのサービスが可能で HTTPS 証明書も無料で発行される 6
Azure App Service 認証・認可 (Easy Auth) • Web アプリは Easy Auth で認証されたユーザーを HTTP ヘッダで知ることができる • X-MS-CLIENT-PRINCIPAL, X-MS-TOKEN-AAD-ACCESS-TOKEN, X-MS-TOKEN-AAD-ID-TOKEN, etc. • ID トークンや MS Graph アクセストークンの JWT なども HTTP ヘッダで渡されてくる • Redmine Easy Auth 認証プラグインを開発中 • Easy Auth での ME-ID 認証をしていないユーザーには何も見えない • Easy Auth での ME-ID 認証だけをしたユーザーには Redmine のログイン前の画面が見える (anonymous アクセス) • さらに Redmine Easy Auth 認証をしたユーザーには Redmine のログイン後の画面が見える • オンプレミス Redmine インスタンスの「ログインを必須」としない挙動がクラウドでゼロトラストに再現できる! 7
https://github.com/yaegashi/dx2devops-redmine • Redmine/RedMica のコンテナイメージを GHCR で公開 • ghcr.io/yaegashi/dx2devops-redmine/redmine (Redmine 5.1.0) • ghcr.io/yaegashi/dx2devops-redmine/redmica (Redmica v2.3.2) • Azure Developer CLI (azd) による簡単な Azure PaaS デプロイと運用体制を実現 • Azure Database for MySQL/PostgreSQL (flexible server) を選択可能 • 単一の App Service Plan・Database に対して多数の Web App インスタンスをデプロイ可能 • Azure Portal からの Web App コンテナ内 SSH 接続コンソールによるメンテナンスが可能 • ローカル開発・IaaS デプロイ用の docker-cmpose.yml も提供 8
Azure Developer CLI (azd) • https://github.com/yaegashi/dx2devops-redmine の Dev Container (GitHub Codespaces) で作業 • 環境 "myenv" を作成、DBの種類 "mysql" やアプリの名前 "app" を設定 $ $ $ $ azd azd azd azd env env env env new set set set myenv DB_TYPE mysql APP_NAME app APP_IMAGE ghcr.io/yaegashi/dx2devops-redmine/redmica • Azure ログイン、リソースのプロビジョン $ azd auth login $ azd provision 9
App Service コンテナ SSH 接続 • Azure Portal から稼働中の Redmine アプリコンテナに Web ブラウザのターミナルで SSH 接続が可能 • DB初期設定やマイグレーション、 ユーザーパスワードリセット、 バックアップのダンプ・リストアが簡単にできる rmops CLI を提供 • プラグインのインストールや設定、 Rails console によるメンテナンス、 apt-get で追加ソフトのインストールなどもできる • PaaS だと自分のシェル芸が通用しなくて不安 というベテランでも安心! 10
複数 Web App の高集積デプロイ • 単一の App Service Plan・Database に多数の Web App をぶらさげる高集積デプロイが可能 $ $ $ $ $ $ $ $ azd azd azd azd azd azd azd azd env set APP_NAME provision env set APP_NAME provision env set APP_NAME provision env set APP_NAME provision app app2 app3 app4 • 各 Web App に個別のカスタムドメインを 割り当てて App Service の HTTPS 証明書で サービス提供が可能 https://myenv-6z627fx-app4.azurewebsites.net https://www.your-custom-domain.com 11
App Service Plan 価格表 https://azure.microsoft.com/ja-jp/pricing/details/app-service/linux/ • 2023/11/04時点の 東日本 Linux VM価格 • 単一の App Service Plan の スペックの限界まで Redmine インスタンスを 搭載できる • 開発・テスト環境のでは Basic B1 で十分 プロダクション環境では Premium v3 がおすすめ • Database は別料金 12
Azure Database (flexible server) 料金表 • MySQL または PostgreSQL が選択可能 • https://azure.microsoft.com/ja-jp/pricing/details/mysql/flexible-server/ • https://azure.microsoft.com/ja-jp/pricing/details/postgresql/flexible-server/ • VMの種類やストレージのサイズにより価格はピンキリ 東日本リージョンでは $9.49/月〜 で利用可能 13
おわりに • 社内でも歴史のある Redmine インスタンス群を Microsoft Entra/Azure のクラウドインフラに移行する取り組みを紹介しました (未完) • https://github.com/yaegashi/dx2devops-redmine で実現した Azure Developer CLI による Redmine の Azure PaaS デプロイの特徴を紹介しました • 今後もプロジェクトの進捗や成果物を随時紹介していきますのでよろしくお願いします 14
Thank You!! 15