💻

Install Keycloak 4.8.3 on CentOS 7

2020/10/23に公開

この記事について

本記事は、CentOS 7.x への Keycloak 4.8.3 のインストールについて記載しています。

対象読者

  • SSO (シングルサインオン) に興味がある方
  • OIDC (OpenID Connect) に興味がある方
  • SAML (Security Assertion Markup Language) に興味がある方

Keycloak とは

Keycloak(キークローク)とは、最新のアプリケーションとサービスを目的としたオープンソースのIDおよびアクセス管理ソリューションです。
※詳細は、公式サイト をご確認ください。

SSO や API アクセスの認証・認可制御を実現することができます。

対応する SSO 機能

  • OpenID Connect
  • OAuth 2.0
  • SAML 2.0
  • LDAP 連携
  • Active Directory 連携

※Google や Twitter などのアカウントを使用したログインにも対応しています。

ライセンス

Keycloak は Apache License 2.0 で提供されています。※GitHub

インストール

基本的に、公式ガイドに記載されている手順通りに進めます。

環境

  • OS:CentOS 7.5

システム要件

Keycloak を構築するのに必要なシステム要件は、以下の通りです。

  • Java 8 JDK
  • RAM 512GB 以上
  • 1GB 以上のディスクスペース

OpenJDK 8 のインストール

Keycloak の動作には、Java 8 JDK が必要 になります。
インストールされていない場合は、Java 8 JDK をインストールします。
※本書では、OpenJDK 8 を使用します。

Java インストール有無の確認

環境に Java がインストールされているかどうか確認します。
既に Java 8 JDK がインストールされている場合は、以下のようなメッセージが表示されます。

# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

Java 8 がインストールされていない場合は、下記コマンドを使用して、OpenJDK 8 をインストールしてください。

# yum install -y java-1.8.0-openjdk

Keycloak のダウンロード

公式サイト より、最新の Keycloak の圧縮ファイルをダウンロードします。

Keycloak 圧縮ファイルの解凍

ダウンロードした Keycloak の圧縮ファイルを解凍します。
※ ファイルは、/opt 以下に配置します。

# cd /opt
# unzip keycloak-4.8.3.Final.zip
# mv keycloak-4.8.3.Final keycloak

ファイアウォールの設定

外部から Keycloak にアクセスできるよう、ファイアウォールの設定を行います。

# firewall-cmd --zone=public --add-service=http --permanent
# firewall-cmd --zone=public --add-service=https --permanent
# firewall-cmd --zone=public --add-port=8080/tcp --permanent
# firewall-cmd --reload

管理者ユーザーの作成

Keycloak の管理者ユーザーを作成します。

# /opt/keycloak/bin/add-user-keycloak.sh -r master -u admin -p admin

-u オプションでユーザー名-p オプションでパスワードを設定しています。
こちらは任意で変更してください。

Keycloak の起動

Keycloak Server を起動します。

# /opt/keycloak/bin/standalone.sh -b=0.0.0.0

起動オプションに -b=0.0.0.0 を付与しているのは、すべてのホストからのアクセスを許可しているためです。
Keycloak は WildFly という RedHat が中心になって開発している Java EE コンテナが同梱されています。FildFly は、デフォルト設定ではリモートホストからのアクセスを許可していません。
Keycloak は、この WildFly の上で動作しているため、-b オプションでアクセスを許可するホストを指定する必要があります。

コマンド実行後、以下のようなメッセージが表示されれば、起動に成功しています。

05:22:25,628 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
05:22:25,628 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990
05:22:25,628 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: Keycloak 4.8.3.Final (WildFly Core 6.0.2.Final) started in 14037ms - Started 577 of 834 services (557 services are lazy, passive or on-demand)

管理コンソールへのログイン

起動に成功したら、管理コンソールへアクセスします。
http://<host-name-or-IP>:8080/auth

  • <host-name-or-IP>:OSのホスト名、またはIPアドレス

正常にアクセスできた場合、以下のような画面が表示されます。
Administration Console を選択して、ログイン画面に移動します。

add-user-keycloak.sh 実行時に入力したユーザー名、パスワードを入力して、Keycloak にログインします。

日本語化対応

Keycloak は、国際化対応で日本語にも対応しています。
Realm Settings -> Themes に移動します。

Internationalization Enabled を ON にし、Default Localeja に変更します。
変更後、いったんシステムからログアウトしてください。
※キャッシュの都合上、変更が即時反映されない場合があります。

再度、ログイン画面に戻ると、画面表示が日本語に切り替わっているのを確認できます。

サービス登録

サーバー起動時に、Keycloak が自動起動するための設定を行います。
/etc/systemd/system/keycloak.service の12行目にある-b オプションについては、前述同様です。

/etc/systemd/system/keycloak.service
[Unit]
Description=Jboss Application Server
After=network.target

[Service]
Type=idle
Environment=JBOSS_HOME=/opt/keycloak JBOSS_LOG_DIR=/var/log/keycloak "JAVA_OPTS=
-Xms1024m -Xmx20480m -XX:MaxPermSize=768m"
User=keycloak
Group=keycloak
ExecStart=/opt/keycloak/bin/standalone.sh -b=0.0.0.0
TimeoutStartSec=600
TimeoutStopSec=600

[Install]
WantedBy=multi-user.target
# mkdir /var/log/keycloak
# useradd --system --user-group keycloak
# chown -R keycloak:keycloak /opt/keycloak
# chown -R keycloak:keycloak /var/log/keycloak
# chmod -R g+w /opt/keycloak
# chmod -R g+w /var/log/keycloak

# systemctl daemon-reload
# systemctl enable keycloak
# systemctl start keycloak

参考情報

Discussion