AmazonLinux2 に Nginx で SSL/TLS 終端構成で Keycloak をインストールする
AmazonLinux2 に Keycloak をインストールする手順をメモしておきます。
構成
今回は以下の環境を構築します。
- ベースは AmazonLinux2
- 以下をインストール
- Keycloak 6.0.1
- java-11-openjdk-11.0.2.7-0.amzn2.x86_64
- nginx-1.17.1-1.el7.ngx.x86_64
- フロントエンドには 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 から制御出来るよう、サービス登録を行います。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | 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 をインストールします。
Keycloak 用の設定ファイルを作成
Nginx に Keycloak のフロントエンド処理をさせる為、以下の内容で /etc/nginx/conf.d/keycloak.conf
を新規作成します。 証明書 / 秘密鍵は環境に応じて、パスを変更します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | 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 のログイン画面が表示されることを確認します。
参考