AmazonLinux2 に Keycloak をインストールする手順をメモしておきます。
構成
今回は以下の環境を構築します。
- ベースは AmazonLinux2
- 以下をインストール
- フロントエンドには Nginx を配置し、SSL/TLS を終端する
- バックエンドに Keycloak を配置
- クライアントからの通信は Nginx で Proxy し、Keycloak へ転送する
Keycloak とは
Keycloak については daian183 さんがお書きになっている下記の Qiita が参考になります。
端的に述べると、シングルサインオン等に伴う認証・認可の司る OSS で、先行ソフトウェアには OpenAM があります。
Java のインストール
Keycloak は Java で書かれている為、まず Java をインストールします。
amazon-linux-extras enable java-openjdk11 yum clean metadata yum -y install java-11-openjdk
Kyecloak 環境構築
Keycloak の環境構築を行っていきます。
インストール
Keycloak をダウンロードし、展開するだけです。
curl -O https://downloads.jboss.org/keycloak/6.0.1/keycloak-6.0.1.tar.gz tar zxvf keycloak-6.0.1.tar.gz mv keycloak-6.0.1/ /opt/keycloak
管理用ユーザの作成
初期状態ではユーザが存在しないので、Keycloak を起動する前に管理ユーザを作成します。
/opt/keycloak/bin/add-user-keycloak.sh -r master -u [USERNAME] -p [PASSWORD]
proxy-address-forwarding の設定
今回は SSL/TLS 終端を Nginx に担当させる Proxy 構成になります。 その為、/opt/keycloak/standalone/configuration/standalone.xml
の http-listner
定義箇所を探し、下記のように proxy-address-forwarding="true"
の設定を追加します。
変更前
<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
変更後
<http-listener name="default" socket-binding="http" proxy-address-forwarding="true" redirect-socket="https" enable-http2="true"/>
サービス登録 及び 自動起動&起動設定
systemd から制御出来るよう、サービス登録を行います。
cat << EOF > /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=root Group=root ExecStart=/opt/keycloak/bin/standalone.sh TimeoutStartSec=600 TimeoutStopSec=600 [Install] WantedBy=multi-user.target EOF
用意が出来ましたので、自動起動&起動設定を実施します。 Keycloak が完全に起動するまでには、やや時間がかかるかも知れません。
systemctl daemon-reload systemctl enable keycloak systemctl start keycloak
Nginx 環境構築
続いて、フロントエンドになる Nginx 環境を構築していきます。
インストール
AmazonLinux 標準リポジトリ上の Nginx はややバージョンが古いので、Nginx の Mailline リポジトリからインストールします。 下記の内容で /etc/yum.repos.d/nginx.repo
を新規作成します。
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key
Nginx をインストールします。
yum -y install nginx
Keycloak 用の設定ファイルを作成
Nginx に Keycloak のフロントエンド処理をさせる為、以下の内容で /etc/nginx/conf.d/keycloak.conf
を新規作成します。 証明書 / 秘密鍵は環境に応じて、パスを変更します。
upstream keycloak { server localhost:8080; } server { listen 80; server_name www.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/certificates/CERT.crt; ssl_certificate_key /etc/letsencrypt/certificates/KEY.key; ssl_protocols TLSv1.1 TLSv1.2; ssl_ciphers 'ECDH !aNULL !eNULL !SSLv2 !SSLv3'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://keycloak; proxy_redirect http:// https://; } }
自動起動&起動設定
Nginx の自動起動&起動設定を実施しておきます。
systemctl enable nginx systemctl start nginx
Keycloak へアクセスする
ブラウザから https:://www.example.com
(FQDN は環境に応じて修正) へアクセスすることで以下のように Keycloak のログイン画面が表示されることを確認します。