らくがきちょう

なんとなく

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.xmlhttp-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 のログイン画面が表示されることを確認します。

f:id:sig9:20190714001931p:plain

参考