Keycloakを学ぶ①導入編

記事タイトルとURLをコピーする

こんにちはアプリケーションサービス本部(ちょっと名前が変わりました)の上田です。

最近は自作キーボード沼にハマり夜な夜な某通販サイトや某フリマサイトを徘徊しています。

普段はAmazon Connectに関する業務をしているのですが、以前Keycloakに関する業務をしたことがありその延長線上でもうちょっと詳しく学んでみようかなということで自分の中での整理もかねてアウトプットしてみます。

なお本文中の内容は基本的にKeycloakの公式と「認証と認可 Keycloak入門 第2版」を参考にさせていただいています。

www.keycloak.org

www.ric.co.jp

今回はKeycloakが何者なのか、そしてソフトウェアの導入と管理者ユーザーの作成まで進めます。

Keycloakってなに?

公式サイトの定義によるとIAM(Identity and Access Management)のソフトウェアとされています。

IAMは「IDの管理・認証・認可」を指す言葉で「適切な人が適切なリソースに適切な理由のため適切なタイミングでアクセスできるようにするもの」であり、Keycloakはその中で認証(Authentication)と認可(Authorization)*1を担うIAMソフトウェアになります。

こう書くと少しわかりにくいのですが、Webアプリケーション側からすると煩雑な認証や認可の処理をKeycloakをはじめとするIAMソフトウェアに任せることでいちいち作らなくてもいいし楽だよね、くらいの感じで捉えるといいかと考えています。

また、KeycloakはOSSであり誰でも使用することが可能ですが商用利用向けにKeycloakの特定のバージョンをベースにした「Red Hat build of Keycloak(旧Red Hat SSO)」も存在します。 今回はノーマルのKeycloak(執筆時点で最新のバージョン26.1.4)をベースに進めていきます。

具体的なKeycloakの機能としては以下のものがあります。

  • シングルサインオン (SSO): 複数のアプリケーション間で一度のログインでアクセス可能
  • ユーザー管理: ユーザー登録、プロファイル管理、パスワード管理など
  • ソーシャルログイン: Google、Facebook、Twitter などのソーシャルアカウントでのログインをサポート
  • LDAP/AD 統合: LDAP や Active Directory との統合が可能

Keycloakを導入する

それではさっそくKeycloakを使ってみます。

構築に使用する環境もろもろは以下の通りです。

基本的には公式ドキュメントの進行に従って進めます。

  • OS:Amazon Linux 2023(64bit)
  • インスタンスタイプ:t2.medium
  • JDK:Amazon Corretto
  • Keycloakバージョン:26.1.4(執筆時点で最新)
  • Editor:VSCode

①Amazon Correttoのインストール

Keycloak は Java で実装されているため、動作するには Java ランタイム環境が必要です。

今回はAWSから提供されているJDKのAmazon Correttoを使用しますがお好みのJDKを使用して問題ないです。

以下のコマンドでAmazon Correttoをインストールします。

$ sudo dnf update
$ sudo dnf install -y java-21-amazon-corretto

インストールに成功していれば$ java -versionでバージョン情報が表示されます。

openjdk version "21.0.6" 2025-01-21 LTS
OpenJDK Runtime Environment Corretto-21.0.6.7.1 (build 21.0.6+7-LTS)
OpenJDK 64-Bit Server VM Corretto-21.0.6.7.1 (build 21.0.6+7-LTS, mixed mode, sharing)

②Keycloakのダウンロード

以下のコマンドはバージョン26.1.4を例にしていますが、最新版を使用する場合は公式サイトから最新のURLを確認する必要があります。

ダウンロード後はダウンロードしたファイルを解凍しておきます。

$ cd /opt
$ sudo wget https://github.com/keycloak/keycloak/releases/download/26.1.4/keycloak-26.1.4.tar.gz
$ sudo tar -xzvf keycloak-26.1.4.tar.gz
$ sudo mv keycloak-26.1.4.tar.gz keycloak

③任意)環境変数の設定

Keycloakを使用するための環境変数を設定します。

/etc/profile.d/keycloak.shに以下の内容を追加します。

$ export KEYCLOAK_HOME=/opt/keycloak-26.1.4
$ export PATH=$PATH:$KEYCLOAK_HOME/bin

④Keycloakの起動

③の部分で環境変数を設定しているので以下のコマンドで起動します。

また、今回は開発用に使用するためstart-devオプションで開発者モードで起動します。

$ cd $KEYCLOAK_HOME/bin
$ sudo ./kc.sh start-dev

起動に成功すると以下のように開発者モードですよと表示されます。

Running the server in development mode. DO NOT use this configuration in production.

⑤一時的管理ユーザーの作成

初回起動後は一時的な管理者ユーザーを作成します。

これは初期の設定管理ユーザーだとアクセスが緩すぎるからですね、そのために一時的なユーザーで永続的な管理者ユーザーアカウントを作成した後に一時的なアカウントを削除する必要があります。

まずはhttp://localhost:8080にアクセスしユーザー名とパスワードを入力。

管理者ユーザー作成画面

できた

その後http://localhost:8080/adminにアクセスして先ほど設定したユーザー名とパスワードを入力すると管理コンソールが表示されます(自分はアカウントをtmpadmとしました)。

ページ上部を確認すると何やら黄色で注意マークのバナーが出ていますが、これは一時的なアカウントだからちゃんとしたアカウントを作ってねとKeycloakが警告してくれています。

とりあえず一時的な管理ユーザーを作成したので次は永続的な管理ユーザーを作成します。

⑥永続的な管理ユーザーの作成

左側メニューの「User」に移動すると現在のレルム(レルムについては後の記事で紹介しますがKeycloakの管理単位のことです)内のユーザーが確認できます。今はまだ一時的なユーザーしか作っていないのでtmpadmのみが存在します。

このページで「Add User」ボタンを押下。

アカウント作成画面になるのでもろもろ入力して「Create」ボタンを押下します。

この時上の方の「Required user actions」を選択するとアカウント認証のためにユーザーに初期パスワード変えろとかメールアドレスで認証しろとかアクションを要求できます(なくてもOK)。

必須なのはUsernameのみなのでここだけ入れても作成は可能

作成しユーザー一覧画面に戻ると先ほど作成したユーザーが増えています。

作成したユーザーを選択し、「Credentials」タブから初期パスワードを設定します。

パスワードを入力し「Save」押下でパスワードが設定されます。初期パスワード設定時に「Temporary」をオンにすると初回ログイン時に新しいパスワードを要求します。

次に作成したユーザーネームをクリックしてロール設定に進みます。アカウントを作っただけでは権限が付与されていないので、管理者用のロールを設定します。

タブを「Role mapping」に切り替えて「Assign role」を押下。

フィルターを「Filter by realm roles」にして「admin」を選択後「Assign」を押下。

これでユーザーに管理者ロールの付与ができました。

ログアウトして入りなおして確認してみるとアカウントが切り替わり、ページ上部に出ていた警告が消えています。

最後は一時的な管理ユーザーを削除して作業完了です。

まとめ

というわけでKeycloakの導入までやってみました。

まだまだ学習の最中ですがこんな感じでアウトプットしていって認証や認可に関する知識も深めつつ、最終的にはAmazon ConnectとKeycloakのSAML連携とかできたらいいなと考えています。

ここまでお読みくださりありがとうございました。

*1:認証は「誰かを確認する処理」のこと。クレデンシャル情報を元に本人であるかを確認します。 認可は「アクセス権限を与える行為」のこと。特定のアプリケーションやAPIからリソースにアクセスする際ユーザーは許可するための認可を行う必要があります。

上田幹也(執筆記事の一覧)

アプリケーションサービス部

趣味は飲酒と長風呂、音楽とM:tGです。どちらかというと犬派。