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

PPTX
Hybrid Azure AD Join 動作の仕組みを徹底解説
PDF
AWS Black Belt Online Seminar AWS Direct Connect
PDF
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
PDF
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
PDF
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
PDF
Keycloak & midPoint の紹介
PDF
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
PDF
20200811 AWS Black Belt Online Seminar CloudEndure
Hybrid Azure AD Join 動作の仕組みを徹底解説
AWS Black Belt Online Seminar AWS Direct Connect
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
Keycloak & midPoint の紹介
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
20200811 AWS Black Belt Online Seminar CloudEndure

What's hot (20)

PPTX
Dockerからcontainerdへの移行
PDF
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用
PPTX
動的コンテンツをオリジンとしたCloudFrontを構築してみた
PPTX
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
PDF
マルチテナント化で知っておきたいデータベースのこと
PDF
Infrastructure as Code (IaC) 談義 2022
PDF
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
PDF
20200630 AWS Black Belt Online Seminar Amazon Cognito
PPTX
KeycloakでAPI認可に入門する
PDF
Serverless時代のJavaについて
PDF
20200826 AWS Black Belt Online Seminar AWS CloudFormation
PDF
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
PDF
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
PDF
ログ管理のベストプラクティス
PDF
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
PPTX
20220409 AWS BLEA 開発にあたって検討したこと
PDF
20210526 AWS Expert Online マルチアカウント管理の基本
PDF
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
PDF
AWS Wavelengthと大阪リージョンのご紹介20210414
PDF
AWS Database Migration Service ご紹介
Dockerからcontainerdへの移行
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用
動的コンテンツをオリジンとしたCloudFrontを構築してみた
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
マルチテナント化で知っておきたいデータベースのこと
Infrastructure as Code (IaC) 談義 2022
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
20200630 AWS Black Belt Online Seminar Amazon Cognito
KeycloakでAPI認可に入門する
Serverless時代のJavaについて
20200826 AWS Black Belt Online Seminar AWS CloudFormation
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
ログ管理のベストプラクティス
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
20220409 AWS BLEA 開発にあたって検討したこと
20210526 AWS Expert Online マルチアカウント管理の基本
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
AWS Wavelengthと大阪リージョンのご紹介20210414
AWS Database Migration Service ご紹介
Ad

Similar to Lightweight Keycloak (18)

PPTX
Keycloak入門
PPTX
Keycloakの紹介と最新開発動向
PPTX
Keycloak入門-OpenID ConnectによるAPIセキュリティ
PPTX
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
PPTX
Keycloakの実際・翻訳プロジェクト紹介
PPTX
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
PPTX
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
PDF
Keycloakの最近のトピック
PDF
Keycloakの動向
PDF
Quarkus による超音速な Spring アプリケーション開発
PDF
Keycloak拡張入門
PDF
Authentication and Authorization of The Latest Keycloak
PPTX
CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現
PDF
Quarkus入門
PDF
KeycloakのCNCF incubating project入りまでのアップストリーム活動の歩み
PPTX
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
PDF
Kongの概要と導入事例
PDF
Keycloak開発入門
Keycloak入門
Keycloakの紹介と最新開発動向
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの実際・翻訳プロジェクト紹介
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
Keycloakの最近のトピック
Keycloakの動向
Quarkus による超音速な Spring アプリケーション開発
Keycloak拡張入門
Authentication and Authorization of The Latest Keycloak
CloudNative Days Spring 2021 Online: Apache CamelおよびKeycloakを用いたAPI管理基盤の実現
Quarkus入門
KeycloakのCNCF incubating project入りまでのアップストリーム活動の歩み
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
Kongの概要と導入事例
Keycloak開発入門
Ad

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はアプリケーションの起動高速化に寄与  今回 (力尽きて) 見ていないですが、複数コンテナで共 有することでメモリ使用量にも効果があるはず