KINTO Tech Blog
Development

インストール時の問題に関するソリューション:Keycloak M1

Ashi S
Ashi S
Cover Image for インストール時の問題に関するソリューション:Keycloak M1

こんにちは、Ashi Singh です

私はグローバル開発グループの一員で、KINTOテクノロジーズには2022年2 月に入社しました。私はアプリケーション開発担当です。現在は、グローバル開発グループが開発するバックオフィスシステムのエンジニアをしています。

概要

私のチームは、他のグローバルチームが使用する基盤パッケージとしてのマイクロサービスの開発と保守を担当しています。認証・認可は、この基盤パッケージに含めるべき主な機能です。認証ソリューションは、クラウド技術にあまり依存しないことが求められていますので、Keycloakを候補として検討することにしました。

Keycloakとは?

Keycloakは、アプリケーションとセキュリティサービスに認証機能を最小限の工数で付与できるIDアクセス管理(IAM)ソリューションで、オープンソースとして提供されています。Keycloakにより、ユーザーの認証連携、厳格な認証、ユーザー管理などが可能となります。Keycloakは、OpenID Connect、OAuth 2.0、SAML 2.0 など、主に3種類のプロトコルをサポートしています。シングルサインオンとシングルサインアウトの両方を問題なく実行できます。高速かつ柔軟な動作が可能で、ユーザーアカウントをシームレスに管理でき、データもセッションも保存できます。

Keycloak公式ページ

将来的に、他のクラウドアーキテクチャへの適用も考えられるため、Keycloakはその点において有力な選択肢だと言えます。

課題

Keycloakについての検討を始めるにあたっての最初のステップは、ローカル環境での試行です。

私たちのチームでは、WindowsとMacOSを使用している開発者が同数います。(KINTOテクノロジーズでは、自分が使い慣れたOSを使用できます!)

初期セットアップにおいては、Windowsだけでなく、Intel を搭載したMacOSでも、KeycloakのDockerイメージに問題はありませんでした。ただし、最近のMacOS(主にM1搭載機種)では、スタートアップの際にどうしてもエラーが発生してしまいます。

エラー発生の際に使用していた設定は以下のとおりです。

  • Keycloak Dockerイメージバージョン:jboss/keycloak:16.1.1 (当プロジェクトで使用されていた最新イメージ。設定も簡単。)
  • 私のローカルPCのバージョン:MacBook Air (M1, 2020) Apple M1 [MacOS Monterey]

ソリューション

M1搭載機種を使用していた際、このタスクを担当することになりました。調査したところ、Keycloakで使用しているJBossイメージはM1と互換性がないことが判明しました。

解決策は、Mac M1のDockerイメージの変更です。Mac M1 では、通常の jboss/keycloak:16.1.1 イメージの代わりに wizzn/keycloak:14 を KeycloakのDockerイメージとして使用しています。これを機能させるには、設定ファイルの変更も必要です。

変更内容

  1. docker-compose.yml

ローカルで Keycloakを実行するための最初のステップとして、Dockerイメージをwizzn/keycloak:14.に変更します。

ボリュームセクションの順序を以下のように変更:

docker-compose.yml
volumes:
- ./custom-scripts/:/opt/jboss/startup-scripts/ 
- ./import/backoffice-realm.json:/tmp/backoffice-realm.json.orig #move to after startup-scripts
- ./keycloak/themes/your-default-theme:/opt/jboss/keycloak/themes/your-default-theme
- ./keycloak/configuration/mysql/change-database.cli:/opt/jboss/tools/cli/databases/mysql/change-database.cli #move to the last

このボリュームセクションに追加する必要のある他のすべてのスクリプトは、./import/backoffice-realm.json./keycloak/configuration/mysql/change-database.cli の間に追加できます。

  1. change-database.cli

次に、データベース (change-database.cli) ファイルにすでに定義されているデータベース設定を削除します。

このファイルでは、緑色で示した変更を実施。

change-database-file

  1. Dockerfile内の変更点

Dockerfileでは、Dockerイメージを wizzn/keycloak:14 へ変更。

change-dockerfile

  1. Keycloakを実行

Docker compose up-dを使用してKeycloakを実行します。

Keycloak:長所と短所

この最初の不具合を切り抜けると、WindowsとMacOSの両方でKeycloakを効率的に実行できるようになりました。

ユーザー管理とロール管理はインストール後すぐに動作が可能で、MFA認証、セッション管理などのKeycloakの機能がまちがいなく動作することが確認できました。こういった機能の開発は、自身で行うよりもKeycloakを活用することで工数短縮につながります。Facebook、twitterなどのさまざまなソーシャルネットワークをリンクさせるオプションもあり、必要に応じてソーシャルログインを簡単に実装できます。

ただし、対処しておくべきポイントがいくつかあります。Keycloakはカスタマイズが非常に難しく、変更に時間がかかりがちです。Keycloakが依然としてオープンソースプロジェクトであるがゆえですが、ロードマップについての開発側による保証は何もありません。また、バグ修正などは GitHub issues を通して処理されますが、明確な対応期限が設定されていません。

総じて、ソリューションには常にマイナス面が存在するものです。それでも、管理のしやすさや運用性の高さが他の要件を上回っている点からすると、Keycloakは有力なソリューションとして今後活用していけるものだと考えています。

Facebook

関連記事 | Related Posts

We are hiring!

【プロダクト開発バックエンドエンジニア】共通サービス開発G/東京・大阪

共通サービス開発グループについてWebサービスやモバイルアプリの開発において、必要となる共通機能=会員プラットフォームや決済プラットフォームの開発を手がけるグループです。KINTOの名前が付くサービスやTFS関連のサービスをひとつのアカウントで利用できるよう、様々な共通機能を構築することを目的としています。

【部長・部長候補】/プラットフォーム開発部/東京

プラットフォーム開発部 について共通サービス開発GWebサービスやモバイルアプリの開発において、必要となる共通機能=会員プラットフォームや決済プラットフォームの開発を手がけるグループです。KINTOの名前が付くサービスやTFS関連のサービスをひとつのアカウントで利用できるよう、様々な共通機能を構築することを目的としています。