仕事でIDaaSを使っているのですが、セルフホストのKeycloakを触ってみたくなりました。 せっかくなのでInfrastructure as Codeの実践も兼ねて、TerraformでKeycloakの設定を管理してみました。
モチベーション
仕事でIDaaSを使っていると、「他の製品はどんな管理をしているんだろう?」と気になってきました。 一応自作IDaaSを夢見て作成しては、挫折を繰り返しているのもあります。 クラウドサービスは便利ですが、自分でコントロールできる環境も欲しいです。
加えて、Infrastructure as Codeの勉強として認証基盤の設定もコード化したいと思っていました。 Terraformは名前は聞いたことあるけど実際に書いたことがなく、 自宅のProxmox環境もあるのでこれを機に活用することにしました。
Keycloakとは
KeycloakはOSSのIdentity and Access Management (IAM)ソリューションです。 簡単に言うと、認証・認可を一元管理できるセルフホスト型のIDaaSです。
やったこと
Proxmox LXCコンテナでKeycloakを構築
まずはProxmoxのPVEコンソールからLXCコンテナを作成しました。 proxmox VE Scriptsから拝借しました。 軽量で済むのでVMではなくLXCを選択しました。
コンテナ作成後、Keycloakをインストールして起動。
デフォルトで:8080で管理コンソールにアクセスできます。
Terraform Providerの設定
KeycloakをTerraformで管理するために、mrparkers/keycloak Providerを使いました。
最新バージョン(v4系)を使用しています。
terraform {
required_providers {
keycloak = {
source = "mrparkers/keycloak"
version = "~> 4.4.0"
}
}
}
provider "keycloak" {
client_id = "admin-cli"
username = "admin"
password = var.keycloak_password
url = "http://192.168.x.x:8080"
}
admin-cliはKeycloakのデフォルトクライアントで、管理用のAPIアクセスに使います。
ハマったポイント
Keycloakの画面変更
今回使ったKeycloakはバージョン26だったのですが、ネットで探してきた記事と管理コンソールのUIが微妙に変わっていました。
ネット上のブログ記事やドキュメントは古いバージョン向けのものが多く、「あれ、この設定項目どこ?」となることが多かったです。 特にClientのScope管理(?)画面が大幅に変わっていて、かなり手間取りました。
解決方法としては、公式ドキュメントの最新版を見ながら手探りで設定していくしかありませんでした。
Keycloakの仕様理解
RealmとClientの関係性や、Client Scopeの概念など、最初は理解するのに時間がかかりました。 「なんでこの設定が必要なの?」と思うことも多かったです。
ただ、Terraformでコード化することで、設定の意味を理解しながら進められたのは良かったです。 コードとして書くことで、各リソースの依存関係が見えやすくなりました。
今後の展望
今回はとりあえず動かすところまでできました。 今後は以下のことをやってみたいです。
- Proxmoxダッシュボードや他のHomelabアプリとOIDC連携
- CI/CDパイプラインに組み込んで、設定変更を自動化
Infrastructure as Codeにすることで、設定のバージョン管理や再現性が高まるので、引き続き改善していきます。
まとめ
- TerraformでKeycloakの設定を管理できるようになった
- KeycloakのUI変更で苦労したが、なんとか動いた
まだ改善の余地はたくさんありますが、Infrastructure as Codeの実践として良い経験になりました。 セルフホストのIDaaSに興味がある方は、ぜひ試してみてください!