Weitere ähnliche Inhalte Ähnlich wie Keycloakの実際・翻訳プロジェクト紹介 (20) Kürzlich hochgeladen (11) Keycloakの実際・翻訳プロジェクト紹介2. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 1
和田 広之 @wadahiro
野村総合研究所
主にOSS系 (OpenStandia) 担当
コミュニティ活動
▪Keycloak 日本語化対応やパッチのContributor
▪Keycloak 脆弱性報告 (CVE-2016-8609)
▪その他、各種ライブラリ(React.js/Jenkins, Bitbucketプラグイン etc.)の
Contributeなど
▪Qiitaでもたまに記事を書いています
(近年はフロントエンド成分多め)
▪今年はKeycloakのAdvent Calendarを
やります!
https://qiita.com/advent-calendar/2017/keycloak-by-openstandia
自己紹介
3. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 2
今日の内容
Keycloakの実際
弊社での適用事例を紹介
翻訳プロジェクトの紹介
ドキュメントの日本語化プロジェクトはじめました!
5. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 4
プロジェクト概要
SSOを含むWebシステムの老朽化対応
OSや各種ミドルウェアがEOLを迎えるため入れ替えたい
インフラもクラウド(AWS)に変えて運用効率化したい
6. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 5
現行システム概要
SSO
OpenAM 9系 コミュニティ版
SSO保護対象アプリケーション
エージェント型のSSO構成
JavaEE アプリ ×2
▪ 独自エージェント実装
▪ アプリの認証処理でOpenAMのAPIを呼び出し認証連携
IIS アプリ
▪ OpenAMのIISエージェントを利用し、アプリはHTTPヘッダで認証連携
インフラ・運用周り
VMwareで仮想化はされているものの、各サーバのOS・ミドル・アプリを手動で構築・メン
テナンス
運用監視はZabbixを自前で構築して運用
手動ビルド&リリース
7. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 6
移行後
SSO
Keycloak 2.5系 (RH SSO 7.1)
SSO保護対象アプリケーション
Apache HTTPD Server + mod_auth_openidc によるリバプロ型のSSO構成
JavaEE アプリ ×2
▪ HTTPヘッダで認証を行うように修正して対応
IIS アプリ
▪ こちらは修正不要
インフラ・運用監視周り
クラウド (AWS) 上に構築 & マネージドサービスをフル活用
運用もクラウドサービスを利用 & Prometheusによる監視
CI/CDパイプラインによるリリース自動化
8. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 7
システム構成 (SSO関連部分のみ)
OpenLDAP
MySQL
JavaEE App
IIS App
IIS Agent
OpenAM
Keycloak
(RH SSO)
Apache
HTTPD
mod_auth_openidc
(出所) https://github.com/keycloak
https://github.com/ForgeRock
https://www.docker.com/brand-guidelines
JavaEE App
/ID管理
独自Agent
JavaEE App
独自Agent
Amazon
ECS
Amazon
RDS
IIS App
JavaEE App
/ID管理
9. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 8
Keycloak 採用の理由
高度認証・認可系の要件はなし
リスクベース認証、細かい認可制御 etc. の要件はない
(OpenAMが得意とするところ)
LDAP不要の構成が容易
運用コストをその分下げることが可能
Immutable Infrastructure を実現しやすい
インフラ周りの設定ファイル内で環境変数の値を参照可能
レルム設定は外部RDBMSに保存されるため本体はステートレスに
Admin REST APIによるレルム設定更新の自動化が容易
10. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 9
Keycloak vs. OpenAM
カテゴリ Keycloak (RH SSO) OpenAM
認証 多要素認証 ○ ○
OTP ○ ○
リスクベース認証 ☓ ○
デスクトップSSO ○ ○
外部IdP認証 ○ ○
代理認証 ☓ ○※1
認可 ユーザ属性アクセス制御 △※2 ○
ロールベースアクセス制御 △※2 ○
その他アクセス制御 △※2 ○
セルフサービス アカウント登録 ○ ○
パスワードリセット ○ ○
ユーザ属性管理 ○ ○
エージェント/
Client Adapter
対応プラットフォーム 少ない 多い
その他 コードベース 小さくて比較的シンプル※3 巨大でツライ※3
拡張のしやすさ 易※3 難※3
オープン/クローズド オープン 最新版はクローズド
最新仕様への追随 そこそこ 早い
ドキュメント そこそこ 充実
※1 周辺プロダクトのOpenIG との組み合わせで実現
※2 RH SSOではまだ Technology Preview 扱い
※3 あくまで個人の感想です
11. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 10
Keycloak vs. OpenAM
カテゴリ Keycloak (RH SSO) OpenAM
認証 多要素認証 ○ ○
OTP ○ ○
リスクベース認証 ☓ ○
デスクトップSSO ○ ○
外部IdP認証 ○ ○
代理認証 ☓ ○※1
認可 ユーザ属性アクセス制御 △※2 ○
ロールベースアクセス制御 △※2 ○
その他アクセス制御 △※2 ○
セルフサービス アカウント登録 ○ ○
パスワードリセット ○ ○
ユーザ属性管理 ○ ○
エージェント/
Client Adapter
対応プラットフォーム 少ない 多い
その他 コードベース 小さくて比較的シンプル※3 巨大でツライ※3
拡張のしやすさ 易※3 難※3
オープン/クローズド オープン 最新版はクローズド
最新仕様への追随 そこそこ 早い
ドキュメント そこそこ 充実
※1 周辺プロダクトのOpenIG との組み合わせで実現
※2 RH SSOではまだ Technology Preview 扱い
※3 あくまで個人の感想です
・機能面ではOpenAMにまだまだ劣る
・でも、過去のしがらみが少ないので中身はシンプル
・SPIによる拡張が開発者フレンドリー
・オープンソース!
12. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 11
Client Adapterどうする問題
Client Adapterは各種 Javaアプリケーションサー
バやSpring、NodeJS用のみ
加えてRH SSOでは、 JBossEAP / JBossFuse / NodeJS 用のみが
商用サポートの範囲
▪Red Hat Single Sign-On Supported Configurations
https://access.redhat.com/articles/2342861
今回のシステム構成では...
▪IISにはそもそも使えない
▪JBossのバージョンが古いため対応するClient Adapterがない
13. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 12
Client Adapter以外の選択肢
KeycloakではClient Adapterのようなエージェント型だけではなく、
リバースプロキシ型も実現可能
プロキシが OIDC/SAML2.0 に対応していれば基本的には連携可能
バックエンドのアプリはHTTPヘッダで認証するだけでよく、SSOプロダクトと
疎結合にもなる
リバプロ
エージェント型 リバースプロキシ型
UID: foo
UID: foo
UID: foo
14. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 13
リバプロ型方式のOSS候補
Keycloak Security Proxy
Keycloakオフィシャルのプロキシ実装(Undertowを利用)
ただし、RH SSOに含まれていない
アクセスログがない、任意項目をHTTPヘッダにマッピングできない、バックエンドは1つしか設定できないなど機能的に不十
分
コミットログを見るとやる気のなさを感じる
mod_auth_mellon
SAML SP用のApacheモジュール
RHEL6/7に付属 (ただしバージョンは0.8.0/0.11.0とちょっと古い)
RH SSOのSupported Configurationsに含まれている
mod_auth_openidc
OIDC RP/OAuth2 RS用のApacheモジュール
RHEL7に付属 (ただしバージョンは1.8.8とちょっと古い)
lua-resty-openidc
OIDC RP/OAuth2 RS用のNginx向け実装
mod_auth_openidcと同じ作者による開発
Keycloak Proxy
Go言語によるKeycloakに特化したOIDC RP用のプロキシ実装
1年半前くらいに軽く評価したときは他と比べると性能がいまいちだった
oauth2_proxy
Go言語によるOAuth2/OIDC RP用のプロキシ実装
GitHubのStar数は一番多い(3015)
バックエンドは1つしか設定できない
15. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 14
リバプロ型方式のOSS候補
Keycloak Security Proxy
Keycloakオフィシャルのプロキシ実装(Undertowを利用)
ただし、RH SSOに含まれていない
アクセスログがない、任意項目をHTTPヘッダにマッピングできない、バックエンドは1つしか設定できないなど機能的に不十
分
コミットログを見るとやる気のなさを感じる
mod_auth_mellon
SAML SP用のApacheモジュール
RHEL6/7に付属 (ただしバージョンは0.8.0/0.11.0とちょっと古い)
RH SSOのSupported Configurationsに含まれている
mod_auth_openidc
OIDC RP/OAuth2 RS用のApacheモジュール
RHEL7に付属 (ただしバージョンは1.8.8とちょっと古い)
lua-resty-openidc
OIDC RP/OAuth2 RS用のNginx向け実装
mod_auth_openidcと同じ作者による開発
Keycloak Proxy
Go言語によるKeycloakに特化したOIDC RP用のプロキシ実装
1年半前くらいに軽く評価したときは他と比べると性能がいまいちだった
oauth2_proxy
Go言語によるOAuth2/OIDC RP用のプロキシ実装
GitHubのStar数は一番多い(3015)
バックエンドは1つしか設定できない
下記理由により、今回はこちらを利用
・OIDCはSAMLと比べて軽量なプロトコル
・OpenAMとの組み合わせで使用実績あり
・Apache有識者が多い(Committer在籍)
・性能も要件に対して十分
16. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 15
OpenAMとの性能比較
Keycloakの標準構成では認証処理が遅い?
SSOサーバ側でパスワードのハッシュ化が行われCPU負荷が高い
使用アルゴリズムは PBKDF2WithHmacSHA1/ソルト付き/20000回
(Keycloak 2.5系の場合)
OpenAM/OpenLDAP 構成 (SHA512/ソルト付き/5000回)
と比較すると3割くらいのスループット
UserStorageを使いKeycloak/OpenLDAPの同構成にすると、
OpenAMの1.4倍のスループットに
▪ Keycloakの方が実装がシンプルな分、同条件だと性能は良さそう
セキュリティとのトレードオフ
今回は後述の UserStorage SPI を利用してLDAPなし構成としたが、移行
前と同等性能を確保できた
17. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 16
その他工夫したポイント
既存アカウント(PW含む)をそのまま新基盤に移行
ユーザ影響を考えるとPWリセットせずに移行したい
そこで、 UserStorage SPI を利用して認証処理をカスタマイズ
既存のID管理アプリが利用するユーザ情報DBをKeycloakから直接参照して認
証するようにした
▪ KeycloakのRDBMSに徐々にアカウント情報を移し緩やかにマイグレーション
する方法もある - Migrate to Keycloak with Zero Downtime
https://tech.smartling.com/migrate-to-keycloak-with-zero-downtime-
8dcab9e7cb2c
管理コンソールへのログイン時に接続元IPをチェックする
Authenticatorを実装
社内セキュリティルール対応のためにIPチェックが必須だった
Authentication SPIを利用すれば認証時に任意のロジックを差し込める
ただし、現状のRH SSOでは本SPIはprivate扱いでありサポートは受けられない
ので注意 (早く対応して欲しい...
18. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 17
その他工夫したポイント
運用まわりの工夫
Dockerを活用したImmutable Infrastructureの実現
レルム設定はJSONで管理し、設定変更のリリース時にCDパイプラ
インから自動適用
▪Keycloak管理コンソールは手動で設定変更しない!
▪レルムインポート機能 / Admin REST API を活用して自動化
▪OpenAMだと設定変更を自動化するのがかなり大変だが
Keycloakは比較的容易
19. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 18
その他工夫したポイント
運用まわりの工夫
Amazon ECS利用によるスケーリング、障害復旧の自動化
Keycloakのログも含めてAmazon CloudWatch Logsで一元管理
PrometheusでKeycloakのメトリクスも取得、Grafanaで可視化
▪JMX ExporterをKeycloakに組み込み
▪JDBCデータソース/HTTPリクエストの統計情報を収集
20. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 19
まとめ
Keycloakは発展途上中
機能面でいうとOpenAMと比べるとまだまだ
ThoughtWorks社の Technology Rader (MAR 2017) でも
ASSESS (ウォッチせよ) の段階
毎月リリースされており成長著しい
実際に適用してみて...
認証・認可要件によっては既に十分戦える
安定性も問題なし
モダンなUI/アーキテクチャで開発者フレンドリー
クラウドネイティブな環境に適用しやすく、
新(ネオ)OSS認証基盤 としてのポテンシャルは高い!
22. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 21
keycloak-documentation-i18n
有志メンバーで翻訳はじめました!
GitHubで OSS として翻訳作業しています
https://github.com/openstandia/keycloak-documentation-
i18n
23. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 22
keycloak-documentation-i18n
HTMLは弊社OpenStandiaサイトにて公開中
http://openstandia.jp/oss_info/keycloak/document.html
24. Copyright(C) Nomura Research Institute, Ltd. All rights reserved. 23
Transifexで翻訳
Gitは不要で、Transifex上で訳文を書くだけでOK
対象ファイルの翻訳を完了すると、GitHubにプルリクエストを自動
発行 & CircleCIでHTMLドキュメントを自動ビルド
翻訳者のGitHubアカウントがある場合はContributionに加算され
ます