Keycloakで認証基盤を試してみる
皆さん、こんにちは。技術開発グループのn-ozawanです。
クリスマスですね。サンタクロースが一晩で全世界の子供たちにプレゼントを配りきるにはマッハ1960で高速移動する必要があるのだそうです。
本題です。
ここ近年では認証基盤のクラウド化が進み、Microsoft Entra などが人気かと思います。しかしそういったサービスはお金がかかるもの。なので、オープンソースのKeycloakやOpenAMなどもそれなりに需要があるかと思います。今回はKeycloakを少し触れてみたのでお話ししたいと思います。
目次
Keycloak
概要
Keycloakはオープンソースの認証基盤です。アカウントや権限を管理し、シングルサインオンを実現します。Keycloakの開発元はRedHatであり、認証基盤のオープンソースでは後発ではあるものの、活発に開発が進められています。
競合製品にはOpenAMがあります。機能面ではややOpenAMの方に軍配が上がりますが、Keycloakは軽量で動作し、GUIも操作しやすくメンテナンスに優れていることから注目されています。
コンテナの起動方法
手元で動作確認をする程度であれば、dockerでの起動がお勧めです。公式ドキュメントに記載されているコマンドを実行することで、Keycloakが8080番ポートで起動します。
$ docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:23.0.3 start-dev
上記のコマンドは長いうえ、登録したアカウント情報などを永続化していません。永続化しないとコンテナを再起動するたびにアカウントを登録しなおさなくてはならないので、データを永続化するようにします。以下のyamlファイルを用意します。
version: "3.1"
services:
keycloak:
image: quay.io/keycloak/keycloak:23.0.3
command: start-dev
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
ports:
- 8080:8080
volumes:
- $PWD/pv/data:/opt/keycloak/data/h2
あとは普通にdocker-compose
で実行すればOKです。docker-compose
を実行したフォルダにpv
フォルダが作成されます。このpv
フォルダにKeycloakで登録したアカウントなどの情報が格納されています。不要になった場合はpv
フォルダを削除してください。
$ docker-compose up -d

Realmの作成
Keyclockを立ち上げたら、次はRealm (レルム)を作成します。KeycloakにおけるRealmとは、アカウントやグループ、ロールなどの情報をまとめる領域のことです。アカウントなどの情報はRealmごとに作成します。Realmはデータの領域を定めるものですので、Realm Aで登録したアカウントを、Realm Bで扱うことは出来ません。
Keycloakの立ち上げ直後はMaster Realmだけがあります。Master Realmは最も権限の強いRealmであり、新たに追加したRealmの情報を管理することが出来ます。Master Realmで運用することは推奨されておらず、新たにRealmを追加して運用することが推奨されます。

Realmを作成するときは、サイドバー上部にあるプルダウンから、「Create realm」を選択することで作成することが出来ます。

アカウントの作成
サイドバー上部にあるプルダウンから、作成したRealmを選択します。同様にサイドバーの「Users」から「Add User」でアカウントを作成することが出来ます。

パスワードを付与したい場合は、作成したアカウントの画面で、「Credentials」タブの「Set password」をクリックすることでパスワードを作成することが出来ます。

クライアントの作成
OIDC認証を行うにはクライアントを作成する必要があります。サイドバーの「Clients」から「Create client」でクライアントを作成することが出来ます。クライアントを作成する際にOIDCで認証するのか、SAMLで認証するのかを選択することが出来ます。認証方式に合わせて必要な情報を入力してクライアントを作成します。入力した内容は後から変更可能です。


おわりに
KeycloakはGUIベースなので設定が楽でいいですね。設定項目1つ1つにヘルプが用意されているのも親切で良いです。初めてKeycloakに触れた方も、特に違和感を感じることなく操作できるのではないでしょうか。
今回はアカウントとクライアントの作成をしてみましたが、他にもロールやグループの作成なども出来ます。他にも、試してはいないのですが、他のサービスと連携が可能なようです。興味ある方は是非試してみてください。
次回はTypeScript (Express + Passport) でKeycloakにOIDC認証をしたいと思います。
ではまた。