Keyclaok 5.0をhttpsで構築する(Nginx)

公開日:2019-04-15
最終更新:2019-04-15

はじめに

本記事では、Standalone server distribution Keycloak5.0を構築する。Keycloakは、Nginxのhttps_proxyを用いてhttpsで動作するように構築する。Standalone server distributionで構築する理由としては、認証要素等の追加を行う場合にwildflyを用いてデプロイしやすいと考えたためである。

開発環境

  • Ubuntu16.04 LTS Server
  • Openjdk 1.8.0_191
  • Maven 3.3.9
  • Nginx 1.14.2

下準備

OpenJDK, Maven, Nginxのインストール

$ sudo apt install openjdk-8-jdk maven nginx  

Openjdkのpathを設定する

~/.bashrcの最終行にPATHの設定を記述する。

$ vim ~/.bashrc  

--.bashrc--  
JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")  
export JAVA_HOME  
PATH=$PATH:$JAVA_HOME/bin  
export PATH  

設定を反映する。

$ source ~/.bashrc  

Keycloakのセットアップ

https://www.keycloak.org/downloads.htmlから、
Server Standalone server distributionを任意の場所にダウンロードする。ここでは例として、/usr/local/としている。

$ cd /usr/local  
$ wget https://downloads.jboss.org/keycloak/5.0.0/keycloak-5.0.0.zip  
$ tar zxvf https://downloads.jboss.org/keycloak/5.0.0/keycloak-5.0.0.zip  

動作確認として、keycloakをstandaloneで起動してみる。

$ cd keycloak-5.0.0/bin  
$ ./standalone.sh  

このコマンドだとデフォルトでlocalhostのみからのアクセスになっており、-bオプションでアクセス可能なIPを指定可能

例) ./standalone.sh -b=0.0.0.0 (全ホストからアクセス可能)  
現段階では、Administration Consoleにもアクセスが可能なため、おすすめしない  

実行したら、INFO [org.jboss.as] Keycloak 5.0.0 started in XXXXms - Started 711 of 972 services的なコメントが表示されることで起動を確認する。

Admin Userのパスワードを設定する

管理者ユーザーの設定を行う。PASSWORDは任意

$ ./bin/add-user-keycloak.sh --user admin --password PASSWORD  

Nginxのセットアップ

Nginxをインストールする

$ sudo apt install -y nginx  

keycloakへのhttps_proxyを設定する

ここで用いる証明書や秘密鍵は事前に、Let's encript等で取得しておくものとする。

$ vim /etc/nginx/conf.d/keycloak.conf (keycloak.confは新規作成)  

--keycloak.conf--  
# OIDCのRedirect URIのサイズが大きいため、bufferサイズを変更しておく  
proxy_buffer_size 128k;  
proxy_buffers 4 256k;  
proxy_busy_buffers_size 256k;  

upstream keycloak {  
    server localhost:8080;  
}  

server {  
    listen       80;  
    server_name  {host_name};  
    return       301 https://$host$request_uri;  
}  

server {  
    listen              443 ssl;  
    server_name         {host_name};  
    ssl                 on;  
    ssl_certificate     {your_fullchain.pem};  
    ssl_certificate_key {your_privkey.pem};  
    ssl_protocols       TLSv1.1 TLSv1.2;  
    ssl_ciphers         'ECDH !aNULL !eNULL !SSLv2 !SSLv3';  

    client_header_buffer_size 64k;  
    large_client_header_buffers 4 64k;  

    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://;  
    }  
}  
{host_name} = サーバーのホストネーム  
{your_fullchain.pem} = 証明書へのPATH  
{your_privkey.pem} = 証明書の秘密鍵へのPATH  

# proxy_redirect http:// https://;を有効にすることで、KeycloakからのRedirectをhttpsに変換することが可能

Nginxを再起動する

$ sudo service nginx restart  

Keycloakの設定を変更する

keycloak-5.0.0/standalone/configuration/standalone.xmlを編集する。

今回編集する箇所は、
<subsystem xmlns="urn:jboss:domain:undertow:8.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other"> ---------- </subsystem>にあり、次からの設定を記載する。

プロキシを有効にする

初期状態では、プロキシアドレスフォワードが有効になっていないため、proxy-address-forwarding="true"を追記する。

<server name="default-server">  
    <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" proxy-address-forwarding="true"/>  
    ----------  
</server>  

Administration ConsoleへのIPアクセス制限を設定

初期状態では、アクセス可能なすべてのユーザーが管理者コンソールにアクセス可能になっているため、特定のIPからのみ管理者コンソールへアクセスを許可する設定にする。

<filter-ref name="ipAccess"/>を追記し、<filters>----------</filters>を新しく宣言する。この時のacl={'192.168.1.0/24 allow'}には、任意のIPレンジを設定する。

<server name="default-server">  
    ----------  
    <host name="default-host" alias="localhost">  
        <location name="/" handler="welcome-content"/>  
        <filter-ref name="ipAccess"/>  
        <http-invoker security-realm="ApplicationRealm"/>  
    </host>  
</server>  
----------  
<filters>  
    # 設定するIPの例、任意のIPに置き換えること  
    <expression-filter name="ipAccess" expression="path-prefix('/auth/admin') -> ip-access-control(acl={'192.168.1.0/24 allow'})"/>  
</filters>  

これで、Administration Consoleへアクセスすると、403 - Forbiddenが表示され、アクセスが制限されていることがわかる。

Keycloakを起動する

最後にKeycloakを起動し、errorが発生しなければ完了

$ cd keycloak/bin  
$ ./standalone.sh  

まとめ

Nginxのhttps_proxyを利用した、Keycloak5.0の構築を行った。
次回は、Keycloakにwildflyをインストールし、keycloakの認証要素パッケージなどを導入する方法をまとめる。

引用

keycloak5.0 日本語ドキュメント

記事が少しでもいいなと思ったらクラップを送ってみよう!
26
+1
@sabamisoの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする