最近の Keycloak はとてもえらい

[Keycloak](https://www.keycloak.org/) という OSS があります。
簡単に説明するなら、独立した Web Application として認証プロバイダーの役割を担うことが可能なソフトウェアです。
機能としては IDaaS の代替になるため、[Auth0](https://auth0.com/) と並べて紹介されたりします。これを使うことにより、容易に OpenID Connect による認証処理を導入するだけでなく、さまざまな認証・認可の機能要件を満たすことが可能になります。

この記事では、そんな Keycloak の運用や導入と向き合う自分が最近の変化について思っている、嬉しいことを共有します。

## 最近の Keycloak

Keycloak は認証・認可の分野で注目を集める OSS です。
最近のアップデートでは、さらに多くのユースケースに対応することが可能になりました。
例えば「組織の管理機能」や「セッション永続化」など、今まで課題だった部分が次々に解決されつつあります。

本記事では、これらの新機能やコミュニティの動きについて詳しく紹介していきます。

## この記事の想定読者

Keycloak に少し関わった人からがっつり関わった人にまで伝わってほしいと思っています :cat2:  

- Keycloak の書籍に目を通したことがある
- ちょっと検討したことがある
- 運用していたけど大変だった

## 最近の Keycloak 周辺のイベントごと

- 大型の機能アップデート
- リリースサイクルの刷新
- コミュニティの強化
      
それぞれの変化は Keycloak を運用する立場の自分にとって、メリットが非常にあります。それらを紹介していきます

## Keycloak Version 26.0.0 における大きな機能面の update

特に大きな update が、下記の二点です。

- 組織機能のフルサポート
- デフォルト設定でのセッション永続化

### 組織機能

これまでの Keycloak では、いわゆるテナントを分けるような仕組みとして realm という概念を用いていました。

バージョン 25 では realm とは別に Organization 、つまり「組織」という概念を扱う機能ができました。
26 では、この組織機能のフルサポートが実装されました。これから先は積極的に使っても良さそうです :thumbsup: 

この機能によって、これまで realm という独特の単位でしか管理できなかったユーザーの組織を、部門などの単位で捉えて管理することが可能になりました。

またこれまで realm の機能としては具備しておらず、独自に開発する必要があった招待機能についての API も追加されています。
今までは諦めていたユースケースもこれによって対応できる道もあるのではないかと思います。

### セッション永続化

これまでの Keycloak では、[Infinispan](https://infinispan.org/) という In-Memory Database の仕組みでしかユーザーのセッションを保存することができませんでした。

そのため通常の設定では、Keycloak のアプリケーションを停止・再起動したタイミングで全てのセッションが削除されてしまいます。
その際ユーザーは再度ログインする必要が生じてしまっていました。

バージョン 25 にて、RDB へセッションを保存することで永続化する Persistent Session の機能が導入されました。
25 時点ではプレビュー機能でしたが 26 からの Keycloak ではむしろこちらをデフォルトにしており、特別な設定をすることなく活用することができます。

このおかげで、たとえばバージョンアップのためにコンテナを切り替えるような際でも、ログイン状態が途切れないようになりました :thumbsup: 


## リリースサイクルの刷新

これまでのリリースサイクルについて、方針が変更されました。

### 2019 年から今までのリリース戦略

2019 年から 2024 年まで Keycloak は、年に 4 回メジャーアップデートするという攻めのスケジュールを引いていました。

Keycloak では基本的にはセマンティックバージョニングにそってバージョン更新が行われています。
また、current つまり現在最新の `major.minor` バージョンを中心に脆弱性の対応を行う旨が決められているため、基本的には最新の minor バージョンまで追従していくことが推奨されています。

メジャーアップデートでは破壊的な変更を伴うことがそこそこあり、年 4 回のタイミングではそれぞれ注意してアップデートしていく必要がありました。

これがこれまでの Keycloak のリリースサイクルでした。正直結構負担が大きいです。


### 新しいリリース戦略

バージョン 26.0 以降では、**minor バージョンアップを年に 4 回行い、2,3年に一度 major バージョンアップを行う**ように改めていくようです。

この結果、年に 4 回も頭を悩ませていたことが 2,3 年に一度になるため、実質負荷は 1/8~1/12 くらい（ザル勘定）になります。素晴らしいです！

また、次のメジャーバージョンを待つ間にも機能の変更を入れられるよう、代替されるべき過去の機能であってもそのメジャーバージョンの間は削除せず、deprecated であることだけを明示するようです。
とても良さそうです :thumbsup: 

## コミュニティの強化

機能面の刷新やリリース戦略の変化だけでなく、それらを支えていくコミュニティについても様々な取り組みを始めています。

### ユーザー向けの KeyConf と開発者向けの Keycloak DevDay

近年 Keycloak はユーザー向けと開発者向けに分けてカンファレンスを開催しています。

- KeyConf：https://keyconf.dev/
- Keycloak DevDay：https://keycloak-day.dev

おそらく[CNCF への参加](https://thinkit.co.jp/article/22308)などの契機から、いろんなコミュニティ活動を活発化させているんだと思います。
これによって今後の開発の見通しや対応していくユースケースが明確になるので、非常に良い流れかと思います。

KeyConf の 2023 については ThinkIT にて、レポートが掲載されています。熱量を感じるいいレポートだと思います。

- ThinkIT の KeyConf 2023 レポート：https://thinkit.co.jp/article/22325

### SRE SIG の設立

Keycloak は、実際の運用についてのノウハウがあまり一般化されていない印象があります。それぞれの組織で頑張ってやっている、という感じです。
そんな状況を是正するため、SRE のノウハウ集約を行うコミュニティ（SIG）が設立されました

すでに何度か Meeting も行われており、負荷テストのノウハウなど、そこでの知見が公開されています。

[SRE SIG の成果公開場所](https://github.com/keycloak/keycloak-sre-sig)

この流れが大きくなると、さまざまな規模の組織で導入や運用が楽になっていくため、非常に期待しています。楽しみです。

### Terraform Provider を公式化

今年最も嬉しいニュースでした。

Keycloak は管理画面から GUI で行う設定が多いです。さらに、実現したいことによってはさまざまな機能をまたがるため、片手間で行うには難易度が高く、ミスが致命的になり得ます。
公式による IaC としての推奨事項も特には定まってはおらず独自のノウハウで個々がやってみる状況があったと思います。

Keycloak のコミュニティでは、[設定管理のツールに何を利用しているかという調査](https://www.keycloak.org/2024/09/realm-config-management-tools-survey-results.html)が行われました。
その結果、どうやら公式管理ではない Terraform Provider によって設定を管理している人たちが多勢だったようです。

そしてこの結果を受けて、公式として Terraform Provider のメンテナンスを受け持つことを決めたようです。[公式の repositpory](https://github.com/keycloak/terraform-provider-keycloak) はすでに移行済みです。

最新バージョンへの対応もすでに進んでいるようで、大変に期待が持てます :thumbsup: 。
今後の動きに注目しつつ、自分たちも積極的に導入していきたいところです :smile_cat: 

## まとめ

ここまでみてきたように、Keycloak では最近、非常に気持ちの良い変更がたくさん行われています！

日本語訳されている [O'Reilly の書籍](https://www.oreilly.co.jp/books/9784814400096/)や、[リックテレコムの書籍](https://www.ric.co.jp/book/new-publication/detail/2081)では、最新でも 2022 年の情報です。
そこからもかなり大きく変化していることが、現在の熱量を表していると思います。

変化を掴んでいい感じに利用していくには、最新の情報にキャッチアップし続けることが有効です。
一介の Keycloak ユーザーとしては最新バージョンで最新の issue をも踏み抜いていくつもりで、これからも追っていこうと思います。

やっていきましょう！


## 参考 URL など

Keycloak の開発についてやりとりが行われているコミュニティについては、このページを参考にしてください：https://www.keycloak.org/community

最新の仕様や FAQ については Slack や GitHub の discussion で盛んに行われている印象です。

### 各種の repository

- [Keycloak 本体](https://github.com/keycloak/keycloak)
- [Keycloak 用の Terraform Provider](https://github.com/keycloak/terraform-provider-keycloak)
- [Keycloak SRE SIG の成果公開先](https://github.com/keycloak/keycloak-sre-sig)

### リリースノート

大きな変化は基本的にメジャーアップデートのタイミングで導入されるので、まずはメジャーバージョンのリリースノートから目を通すのがおすすめです。

- [25.0.0](https://www.keycloak.org/2024/06/keycloak-2500-released)
- [26.0.0](https://www.keycloak.org/2024/10/keycloak-2600-released)

また、アップグレードのためのガイドにも細かい単位の変化は掲載されます。こちらも参照すると理解が増すと思います。

- [Keycloak Upgrading Guide](https://www.keycloak.org/docs/latest/upgrading/)

### 機能開発について

- [組織機能についてのアナウンス](https://www.keycloak.org/2024/06/announcement-keycloak-organizations)
- [セッション永続化についてのアナウンス](https://www.keycloak.org/2024/06/persistent-user-sessions-in-preview)
    - セッション永続化については [discussion](https://github.com/keycloak/keycloak/discussions/28271) も読むといいと思います :thumbsup: 

### リリース戦略について

- [脆弱性対応を含むセキュリティポリシー](https://www.keycloak.org/security)
    - `Depending on the severity of a vulnerability the issue may be fixed in the current major.minor release of Keycloak, or for lower severity vulnerabilities or hardening in the following major.minor release. Refer to https://www.keycloak.org/downloads to find the latest release.`

- [2019 時点でのリリース戦略とバージョニングの話](https://www.keycloak.org/2019/04/versioning)
    - `We have also decided to drop the Final suffix from releases. That is simply because it is not needed as we have not done any beta or release candidates for a long time. In the spirit of continuous delivery, we will have individual features marked as preview rather than whole releases.`

- [バージョン 26.0 以降のリリース戦略と後方互換性についてのアナウンス](https://www.keycloak.org/2024/10/release-updates.html)

### ナレッジ集約に向けた動き

- カンファレンス情報
    - KeyConf：https://keyconf.dev/
    - Keycloak DevDay：https://keycloak-day.dev
- [SRE SIG のアナウンス](https://www.keycloak.org/2024/09/announcement-sre-sig.html)
- [Terraform Provider のアナウンス](https://www.keycloak.org/2024/12/terraform-provider-adoption)