SlideShare a Scribd company logo
Lightweight Keycloak
OSSセキュリティ技術の会
Keycloakミニ勉強会
@wadahiro
本資料に掲載されている会社名、製品名、サービス名は各社の登録 商標、又は商標です。
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 1
自己紹介
 OpenStandiaの中の人
 最近のコミュニティ活動
 Keycloak FAPI対応のお手伝い
 Keycloak の OAuth 2.0 Device Authorization Grant 対応の提案
 WebAuthn4j JUnit5 Migration対応
 Keycloak ガイドの日本語翻訳
▪ 最新の6.0.1も翻訳済み!
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 2
Keycloak Roadmap
出所: https://docs.google.com/presentation/d/1bijEpuwaaa6jR1D5PAjyW731-j6Xc1TFHJuUh_FwwK8/edit?ts=5ca774e9#slide=id.g5628e016b1_15_54
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 3
Quarkus
 Supersonic Subatomic Java
 A Kubernetes Native Java stack
 低メモリフットプリント
 爆速起動 (1秒以下)
 静的解析によりAOT(Ahead-Of-Time) コンパイルを実行することで実現
 +OracleのGraalVMでネイティブイメージ化で更に低メモリ・起動高速化
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 4
Quarkus
 すべてのJava資産が動くわけではない
 制約がいくつかある
▪Dynamic classloading使っているとNG
▪既存ライブラリを対応させるには別途Extensionで対応が必要
 JBossミドルウェア系は実は対応しつつある
▪JAX-RS、JPA、JTA・・・
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 5
今日話すこと
 Quarkus対応してみる?
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 6
今日話すこと
 Quarkus対応してみる? (Keycloak X prototypeに期待)
 違うアプローチでお手軽に軽量化にチャレンジ
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 7
比較元
 KeycloakオフィシャルDockerコンテナイメージ
 https://hub.docker.com/r/jboss/keycloak/
出所: https://docs.google.com/presentation/d/1bijEpuwaaa6jR1D5PAjyW731-j6Xc1TFHJuUh_FwwK8/edit?ts=5ca774e9#slide=id.g5628e016b1_15_101
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 8
軽量化ポイント
 コンテナイメージサイズ
 起動時間
 メモリ使用量
 ・・・
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 9
オフィシャルイメージはかなりメタボ
 全体: 約1.2G
 Keycloakが半分占めているがOS/JDK部分もそこそこ
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 10
Java系コンテナダイエット方法
 JDK9から使えるJLinkを使いカスタムJREを利用
 Alpine Linuxなどの軽量OSを利用
 その他、一般的なコンテナビルドテクニックを利用
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 11
JLink
 JDK9でモジュールシステム「Jigsaw」が導入
 JLinkにより、配布用のカスタムJREの作成が可能に
 アプリが必要とするモジュールだけを含めることが
可能
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 12
JLink
 Keycloakの場合はこれでいける
 https://gist.github.com/thomasdarimont/94ab3eb748742d2
e793f4f5d32e05932
jlink ¥
--no-header-files ¥
--no-man-pages ¥
--compress=2 ¥
--strip-debug ¥
--vm=server ¥
--exclude-files="**/bin/rmiregistry,**/bin/jrunscript,**/bin/rmid" ¥
--add-modules
java.base,java.instrument,java.logging,java.management,java.naming,java.scripting,java.se,java.sec
urity.jgss,java.security.sasl,java.sql,java.transaction.xa,java.xml,java.xml.crypto,jdk.security.auth,jdk.x
ml.dom,jdk.unsupported ¥
--output /opt/java-runtime
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 13
Alpine Linux
 glibc問題のためにalpine-pkg-glibcを利用
 https://github.com/sgerrand/alpine-pkg-glibc
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 14
Alpine + 色んなJDKでJLink
※ OpenJDK 13 EA はオフィシャルでAlpine版ありのためそちらを利用
87%削減!
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 15
これにKeycloakを足す
# Copy from https://github.com/jboss-dockerfiles/keycloak/blob/6.0.1/server/Dockerfile
ENV KEYCLOAK_VERSION 6.0.1
ARG KEYCLOAK_DIST=https://downloads.jboss.org/keycloak/$KEYCLOAK_VERSION/keycloak-
$KEYCLOAK_VERSION.tar.gz
RUN apk add --no-cache --virtual .build-deps curl ¥
&& mkdir -p /opt/jboss ¥
&& cd /opt/jboss/ ¥
&& curl -L $KEYCLOAK_DIST | tar zx ¥
&& mv /opt/jboss/keycloak-?.?.?* /opt/jboss/keycloak ¥
&& apk del --purge .build-deps
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 16
これにKeycloakを足す
67%削減!
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 17
まだまだいける!?
 Keycloakがそもそもデカイ (WildFly含んでいる)
 これをなんとできないか・・・
出所: https://github.com/thomasdarimont/spring-boot-keycloak-server-example
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 19
結果
86%削減!
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 20
起動時間
 環境
 AWS EC2 t2.small
 Amazon Linux 2
 RDBは組み込みDB (H2 database) を利用
 Keycloakのテーブル作成とmasterレルム初期化は事前に実施済
み
 JVMオプション
 WildFlyとかの起動高速化テクニックでよく使われる -
XX:TieredStopAtLevel=1 オプションを利用
 OpenJ9は -Xquickstart を利用
 -Xverify:none は使わず (セキュリティ重視)
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 21
結果
 -XX:TieredStopAtLevel=1 の効果すごい
40%削減!
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 22
CDSを試す
 CDS = Class Data Sharing
 商用版 Oracle JDK の機能がOpenJDK 10から使えるように
 OpenJ9にも同様の機能あり
出所: http://blog.gilliard.lol/presentations/VirtualJUG-March-2018-Java-in-a-World-of-Containers.html
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 23
ただし・・・
 WildFlyやSpring Boot (Fat JAR) と相性が悪い
 独自のモジュールシステムによりJARがロードされる
 通常のCDSの設定だとモジュールシステムのクラスにしか適用され
ない!
※一方、OpenJ9のClass SharingはFat JARに対応している
▪https://blog.openj9.org/2018/10/30/shared-classes-cache-
now-supports-fat-jar/
出所: https://github.com/simonis/cl4cds
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 25
結果
 CDSにより2~4秒高速化!
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 26
結果 (t2.small => t3.xlarge)
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 27
結果 (t2.small => t3.xlarge)
Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 28
まとめ
 JLinkはコンテナ環境以外でも使えるテクニック、
是非活用してみてください (Keycloak関係なく)
 Attack Surface を小さくするという点で、セキュリ
ティ面でも有効
 CDSはアプリケーションの起動高速化に寄与
 今回 (力尽きて) 見ていないですが、複数コンテナで共
有することでメモリ使用量にも効果があるはず
Lightweight Keycloak

More Related Content

What's hot

9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
 
Keycloak入門
Keycloak入門Keycloak入門
Keycloak入門
Hiroyuki Wada
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
 
Keycloakのステップアップ認証について
Keycloakのステップアップ認証についてKeycloakのステップアップ認証について
Keycloakのステップアップ認証について
Hitachi, Ltd. OSS Solution Center.
 
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
NTT DATA Technology & Innovation
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
Hitachi, Ltd. OSS Solution Center.
 
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Preferred Networks
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
歩 柴田
 
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
 
Keycloakの最近のトピック
Keycloakの最近のトピックKeycloakの最近のトピック
Keycloakの最近のトピック
Hitachi, Ltd. OSS Solution Center.
 
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティKeycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Yuichi Nakamura
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
ichirin2501
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
 
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 

What's hot (20)

9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Keycloak入門
Keycloak入門Keycloak入門
Keycloak入門
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
Keycloakのステップアップ認証について
Keycloakのステップアップ認証についてKeycloakのステップアップ認証について
Keycloakのステップアップ認証について
 
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
 
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
Keycloakの最近のトピック
Keycloakの最近のトピックKeycloakの最近のトピック
Keycloakの最近のトピック
 
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティKeycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティ
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Similar to Lightweight Keycloak

OpenStack Now!
OpenStack Now!OpenStack Now!
OpenStack Now!
Hideki Saito
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
Hiroyuki Wada
 
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみようNTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
Midori Oge
 
OpenStack on Softlayer
OpenStack on SoftlayerOpenStack on Softlayer
OpenStack on Softlayer
Yoshimi Tominaga
 
OpenStack本番環境の作り方 - Interop 2016
OpenStack本番環境の作り方 - Interop 2016OpenStack本番環境の作り方 - Interop 2016
OpenStack本番環境の作り方 - Interop 2016
VirtualTech Japan Inc.
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
Takahiro YAMADA
 
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ uv4l-webrtc 軽くハックしてみたよ!
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ    uv4l-webrtc 軽くハックしてみたよ!ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ    uv4l-webrtc 軽くハックしてみたよ!
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ uv4l-webrtc 軽くハックしてみたよ!
Kensaku Komatsu
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側
Yusuke Naka
 
20150101勉強会 dokku alt
20150101勉強会 dokku alt20150101勉強会 dokku alt
20150101勉強会 dokku altShugo Numano
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方
Takahiro YAMADA
 
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpJavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jp
Yuji Kubota
 
使ってみよう CloudStack
使ってみよう CloudStack 使ってみよう CloudStack
使ってみよう CloudStack
samemoon
 
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
JPCERT Coordination Center
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
Masahito Zembutsu
 
はてなのサービスの開発環境
はてなのサービスの開発環境はてなのサービスの開発環境
はてなのサービスの開発環境
ast_j
 
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付きInsight Technology, Inc.
 
PTLのお仕事とリリースパイプラインの裏側
PTLのお仕事とリリースパイプラインの裏側PTLのお仕事とリリースパイプラインの裏側
PTLのお仕事とリリースパイプラインの裏側
masahito12
 
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
Naoto Gohko
 
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
aokomoriuta
 
The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)
Kimihiko Kitase
 

Similar to Lightweight Keycloak (20)

OpenStack Now!
OpenStack Now!OpenStack Now!
OpenStack Now!
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
 
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみようNTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
 
OpenStack on Softlayer
OpenStack on SoftlayerOpenStack on Softlayer
OpenStack on Softlayer
 
OpenStack本番環境の作り方 - Interop 2016
OpenStack本番環境の作り方 - Interop 2016OpenStack本番環境の作り方 - Interop 2016
OpenStack本番環境の作り方 - Interop 2016
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
 
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ uv4l-webrtc 軽くハックしてみたよ!
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ    uv4l-webrtc 軽くハックしてみたよ!ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ    uv4l-webrtc 軽くハックしてみたよ!
ラズパイでWebRTC ヾ(*´∀`*)ノキャッキャ uv4l-webrtc 軽くハックしてみたよ!
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側
 
20150101勉強会 dokku alt
20150101勉強会 dokku alt20150101勉強会 dokku alt
20150101勉強会 dokku alt
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方
 
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpJavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jp
 
使ってみよう CloudStack
使ってみよう CloudStack 使ってみよう CloudStack
使ってみよう CloudStack
 
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
 
はてなのサービスの開発環境
はてなのサービスの開発環境はてなのサービスの開発環境
はてなのサービスの開発環境
 
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
 
PTLのお仕事とリリースパイプラインの裏側
PTLのお仕事とリリースパイプラインの裏側PTLのお仕事とリリースパイプラインの裏側
PTLのお仕事とリリースパイプラインの裏側
 
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
 
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
 
The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)
 

Recently uploaded

アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
Yoshitaka Kawashima
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
ooishi1
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
fisuda
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 

Recently uploaded (6)

アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 

Lightweight Keycloak

  • 2. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 1 自己紹介  OpenStandiaの中の人  最近のコミュニティ活動  Keycloak FAPI対応のお手伝い  Keycloak の OAuth 2.0 Device Authorization Grant 対応の提案  WebAuthn4j JUnit5 Migration対応  Keycloak ガイドの日本語翻訳 ▪ 最新の6.0.1も翻訳済み!
  • 3. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 2 Keycloak Roadmap 出所: https://docs.google.com/presentation/d/1bijEpuwaaa6jR1D5PAjyW731-j6Xc1TFHJuUh_FwwK8/edit?ts=5ca774e9#slide=id.g5628e016b1_15_54
  • 4. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 3 Quarkus  Supersonic Subatomic Java  A Kubernetes Native Java stack  低メモリフットプリント  爆速起動 (1秒以下)  静的解析によりAOT(Ahead-Of-Time) コンパイルを実行することで実現  +OracleのGraalVMでネイティブイメージ化で更に低メモリ・起動高速化
  • 5. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 4 Quarkus  すべてのJava資産が動くわけではない  制約がいくつかある ▪Dynamic classloading使っているとNG ▪既存ライブラリを対応させるには別途Extensionで対応が必要  JBossミドルウェア系は実は対応しつつある ▪JAX-RS、JPA、JTA・・・
  • 6. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 5 今日話すこと  Quarkus対応してみる?
  • 7. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 6 今日話すこと  Quarkus対応してみる? (Keycloak X prototypeに期待)  違うアプローチでお手軽に軽量化にチャレンジ
  • 8. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 7 比較元  KeycloakオフィシャルDockerコンテナイメージ  https://hub.docker.com/r/jboss/keycloak/ 出所: https://docs.google.com/presentation/d/1bijEpuwaaa6jR1D5PAjyW731-j6Xc1TFHJuUh_FwwK8/edit?ts=5ca774e9#slide=id.g5628e016b1_15_101
  • 9. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 8 軽量化ポイント  コンテナイメージサイズ  起動時間  メモリ使用量  ・・・
  • 10. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 9 オフィシャルイメージはかなりメタボ  全体: 約1.2G  Keycloakが半分占めているがOS/JDK部分もそこそこ
  • 11. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 10 Java系コンテナダイエット方法  JDK9から使えるJLinkを使いカスタムJREを利用  Alpine Linuxなどの軽量OSを利用  その他、一般的なコンテナビルドテクニックを利用
  • 12. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 11 JLink  JDK9でモジュールシステム「Jigsaw」が導入  JLinkにより、配布用のカスタムJREの作成が可能に  アプリが必要とするモジュールだけを含めることが 可能
  • 13. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 12 JLink  Keycloakの場合はこれでいける  https://gist.github.com/thomasdarimont/94ab3eb748742d2 e793f4f5d32e05932 jlink ¥ --no-header-files ¥ --no-man-pages ¥ --compress=2 ¥ --strip-debug ¥ --vm=server ¥ --exclude-files="**/bin/rmiregistry,**/bin/jrunscript,**/bin/rmid" ¥ --add-modules java.base,java.instrument,java.logging,java.management,java.naming,java.scripting,java.se,java.sec urity.jgss,java.security.sasl,java.sql,java.transaction.xa,java.xml,java.xml.crypto,jdk.security.auth,jdk.x ml.dom,jdk.unsupported ¥ --output /opt/java-runtime
  • 14. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 13 Alpine Linux  glibc問題のためにalpine-pkg-glibcを利用  https://github.com/sgerrand/alpine-pkg-glibc
  • 15. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 14 Alpine + 色んなJDKでJLink ※ OpenJDK 13 EA はオフィシャルでAlpine版ありのためそちらを利用 87%削減!
  • 16. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 15 これにKeycloakを足す # Copy from https://github.com/jboss-dockerfiles/keycloak/blob/6.0.1/server/Dockerfile ENV KEYCLOAK_VERSION 6.0.1 ARG KEYCLOAK_DIST=https://downloads.jboss.org/keycloak/$KEYCLOAK_VERSION/keycloak- $KEYCLOAK_VERSION.tar.gz RUN apk add --no-cache --virtual .build-deps curl ¥ && mkdir -p /opt/jboss ¥ && cd /opt/jboss/ ¥ && curl -L $KEYCLOAK_DIST | tar zx ¥ && mv /opt/jboss/keycloak-?.?.?* /opt/jboss/keycloak ¥ && apk del --purge .build-deps
  • 17. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 16 これにKeycloakを足す 67%削減!
  • 18. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 17 まだまだいける!?  Keycloakがそもそもデカイ (WildFly含んでいる)  これをなんとできないか・・・
  • 20. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 19 結果 86%削減!
  • 21. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 20 起動時間  環境  AWS EC2 t2.small  Amazon Linux 2  RDBは組み込みDB (H2 database) を利用  Keycloakのテーブル作成とmasterレルム初期化は事前に実施済 み  JVMオプション  WildFlyとかの起動高速化テクニックでよく使われる - XX:TieredStopAtLevel=1 オプションを利用  OpenJ9は -Xquickstart を利用  -Xverify:none は使わず (セキュリティ重視)
  • 22. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 21 結果  -XX:TieredStopAtLevel=1 の効果すごい 40%削減!
  • 23. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 22 CDSを試す  CDS = Class Data Sharing  商用版 Oracle JDK の機能がOpenJDK 10から使えるように  OpenJ9にも同様の機能あり 出所: http://blog.gilliard.lol/presentations/VirtualJUG-March-2018-Java-in-a-World-of-Containers.html
  • 24. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 23 ただし・・・  WildFlyやSpring Boot (Fat JAR) と相性が悪い  独自のモジュールシステムによりJARがロードされる  通常のCDSの設定だとモジュールシステムのクラスにしか適用され ない! ※一方、OpenJ9のClass SharingはFat JARに対応している ▪https://blog.openj9.org/2018/10/30/shared-classes-cache- now-supports-fat-jar/
  • 26. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 25 結果  CDSにより2~4秒高速化!
  • 27. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 26 結果 (t2.small => t3.xlarge)
  • 28. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 27 結果 (t2.small => t3.xlarge)
  • 29. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 28 まとめ  JLinkはコンテナ環境以外でも使えるテクニック、 是非活用してみてください (Keycloak関係なく)  Attack Surface を小さくするという点で、セキュリ ティ面でも有効  CDSはアプリケーションの起動高速化に寄与  今回 (力尽きて) 見ていないですが、複数コンテナで共 有することでメモリ使用量にも効果があるはず