恒例となったOSSセキュリティ技術の勉強会、今回はSSOソフトウェア「Keycloak」に注目!
去る7月13日(金)、東京・レッドハット株式会社のセミナールームにて「OSSセキュリティ技術の会」による第3回勉強会「"Keycloak"で、"認証王"に!!!おれはなるっ!!!!」が開催された。昨年11月に開催された第2回同様に定員を上回る参加申し込みがあり、OSS セキュリティに対する技術者の関心の高まりを伺わせた。今回は注目のシングルサインオン(SSO)ソフトウェアである Keycloakをテーマに、「入門編」と「最前線」の2部構成で基本的な知識やユースケースを紹介したほか、5月に米国で行われたコンファレンスへの参加報告などが行われた。
OSSセキュリティに関する最新の技術情報の発信を目指す
セッションに先立ち、OSS セキュリティ技術の会の中村雄一氏が挨拶。「OSSセキュリティ技術の会(以下、技術の会)」が設立された経緯やこれまでの活動を簡単に紹介した。
技術の会は2006年当時、中村氏が旧「SELinuxユーザ会」や「セキュアOSユーザ会」の仲間と共同で海外コミュニティとの連携や最新情報の発信、組み込みSELinuxなどの開発を手がけていた活動に始まるという。その後この活動は、運営メンバーの異動などで休止。その結果、国内での OSS セキュリティ技術の情報発信が止まったままになってしまった状況を憂慮した中村氏が、有志との協力のもと、2017年3月に再度 OSS セキュリティ技術に関するコミュニティとして技術の会を設立。最新の OSSセキュリティ技術の情報発信や海外コミュニティとの交流などを積極的に進めてきた。
半年に1回のペースで開催され今回で第3回目を迎えたこの勉強会も、そうした活動の拡がりの一環だと中村氏は位置付け、回を重ねるごとにOSS セキュリティ技術に関心を持つ方々からの注目が高まっていると報告。「こうした成果を踏まえ、今後はより気軽に参加していただける座談会や飲み会的なコミュニケーションの場など、新しい企画も前向きに検討していきたい」と語った。
Keycloakの最大の特長は「簡単インストール&セットアップ」
中村氏の挨拶に続いて行われた最初のセッションでは、「Keycloak入門」と題して、野村総合研究所の和田 広之氏よりKeycloakがカバーする基本的なセキュリティの範囲や特長的な機能について紹介された。
Keycloakとは、ひと言で言うとOSSのIAM(Identity and Access Management)だ。大きな特長はOOTB(Out of the Box)、すなわちインストールもセットアップも簡単で、すぐに使い始められる点だと和田氏は語る。
「KeycloakはJavaで開発されているため、JVMがあれば解凍するだけで、あらかじめWildFlyが組み込まれているため、別にアプリケーションサーバを用意する必要もありません」(和田氏)。
セットアップも、画面を見ながらGUIで設定できるコンソールが用意されており、初心者にとっては大変ありがたい。もちろん、詳細にこだわって設定したいプロ向けにはCLIツールも用意されている。
和田氏は、Keycloakの代表的な機能として、以下の5つを挙げた。
- シングルサインオン(OpenID Connect、SAML 2.0)
KeycloakはOpenID ConnectとSAML 2.0に対応している。いずれもユーザー認証における標準的なプロトコルだが、一方で昔ながらのcookieベースの認証連携は持たない。
典型的なユースケースとして、企業内システムのSSOがある。この場合OpenID ConnectとSAML 2.0の両方が使えるため、社内と社外のクラウドサービスの両方にアクセスできるのが便利だ。 - API認可(OAuth 2.0)
例えば、サードパーティーベンダーにAPIを使ってこちらの提供するアプリケーションを利用してもらう際のアクセス認証といった使い方がある。「最近普及が進むMicroserviceのAPI保護にも活用できるのではないか」と和田氏は示唆する。
Microserviceは小さなサービスの集合体なので、それぞれのモノリシックなサービスの認証情報を制御するのは大変だし、サービス間によって仕様が異なることも珍しくない。
「これを解決するプロダクトに『Istio』がある。これはAPIゲートウェイとなるサイドカーProxyをコンテナで立ち上げ、Microservice間の通信を制御するツールだ」(和田氏)。 - アプリケーション向けのライブラリ提供(Client Adapter)
「SSO対象アプリケーション」「OAuth2クライアント」「リソースサーバーのAPI保護」のそれぞれにライブラリを提供する。基本的にこのClient AdapterはJava向けで、Javaユーザーでない場合は標準プロトコル(OpenID Connect、SAML)が使えるため不要。なおかつ、昔ながらのReverse Proxy方式も利用可能だ。 - 外部IdP(Identity Brokering / Social Login)
ユーザー認証をKeycloakのサーバーではなく、外部の認証サーバーで同意した情報を認証連携する機能を提供している。現在すでに複数のプロバイダがサポートしている。 - 外部ユーザーデータストアとの連携(User Federation)
KeycloakはデフォルトでRDBをデータストアとして使っており、そこに設定情報やユーザー情報が格納されている。User Federationは、このユーザー情報だけを別のデータストアから取得できる機能だ。標準でLDAPやActive Directoryに接続できるので、企業内システムの既存のLDAPサーバーをそのまま使えるなどのメリットがある。 - 豊富なカスタマイズポイント
ここでは書ききれないくらい豊富にある。その内のThemeやUserStorage SPIについては、Red Hat SSOでサポートされておりAPI互換が保たれている。その他の拡張ポイントは現状private扱いでバージョンアップにより予告なく互換性が失われる場合があるため、カスタマイズする場合は注意が必要だ。
「こうした特長の他に、Keycloakは新技術対応にも積極的で、FIDO 2.0やFAPIなどの取り組みがすでに具体的に進められています」と和田氏は語り、セッションを締めくくった。
サミットでは現地のメンテナやエバンジェリストとの対話も実現
続いて再び中村 雄一氏が登壇し、この5月に米国サンフランシスコで開催された「Red Hat Summit」で得た最新情報およびKeycloakの最新動向について報告した。もともとKeycloakのOSSコミュニティはRed Hat社により運営されており、メンテナも同社所属の技術者が担当しているという。
「厳密に言うと、Red Hat社が提供しているのは商用サポート付きのKeycloakである『Red Hat Single Sign-on(Red Hat SSO)』ですが、いずれにしてもRed Hat SummitでRed Hat SSOの最新動向を聞けばKeycloakの動向もわかります。また主要な開発者に会ったり、現地のメンテナとコミュニティに関する対話もできると期待して参加しました」(中村氏)。
講演ではRed Hat SSOのロードマップが紹介され、2019年春頃に向けてさまざまな機能の開発が進んでいることが明らかにされた。具体的には「Istio連携」や「UML2.0」、「Web OAuth」など。Red Hat社として最も力を入れている印象を受けたのが、Microservice系との連携だ。中村氏は「OpenShiftのデフォルトのOAuthサーバ(OSIN)の代わり、もしくは並列してKeycloakを使えるようになっていくのではないか」と予想している。
この他にも、さらにホットになりそうなのがIstio連携だ。IstioはKubernetes上の新たなサービスメッシュとして最近急速に注目が高まってきたが、これにKeycloakを対応させていく動きが見られるという。
さらに中村氏は未知数を含む注目のトピックとして「UMA 2.0への対応」「WebAuthn対応」「Go言語のProxy」の3つを挙げた。
- UMAはWebベースのアクセス管理プロトコルで、Keycloakが持っているアクセス管理のエンジンとのインターフェースがUMA 2.0では提供される見込み
- WebAuthn対応はパスワードに依存しない認証プロトコルで、すでにGoogle ChromeやFirefox、Microsoft Edgeがサポートしており、W3Cによる標準化の動きも始まっている。現在Keycloak側では実装は進んでいないが、今後Red Hat SSOも対応していく方針を表明
- Go言語のProxyは、これまでProxy型のSSOを行う場合は他のOSSと組み合わせる必要があったが、今後はRed Hat SSOとしてもProxy(Go言語ベース)を用意する方針
この他、Red Hat Summit会場では、Keycloakの主要メンバーでありメンテナのStian Thorgersen氏とエバンジェリストのSébastien Blanc氏、そして日本コミュニティとの打ち合わせを開催。FAPI向けの開発項目など具体的な課題について、盛んな意見交換を行うことができたという。
「今回はKeycloakとはいっても商用製品がベースなので、クローズドなコミュニティなのかなと思っていましたが、私たちのようなまったくの部外者でも積極的にパッチを出しているうちに先方も非常に良い反応を返してくれるようになりました。最近もOffline Tokenの有効期限に関して改良のパッチを出したら、すぐに適用してもらえました。日本からもどんどんパッチを出して、みんなでさらに良いOSSにしていきたいと願っています」と中村氏は語り、報告を終えた。
パッチ開発を通じてコミュニティとの意思疎通のノウハウを学ぶ
最後に登壇した日立製作所の茂木 昴士氏は「Keycloakパッチ開発事例紹介」と題し、自ら取り組んだパッチ開発の経験からわかったことや苦労したポイントなどを紹介した。
今回この開発に取り組んだ背景を、茂木氏は「Keycloakはオープンソースとして開発が進んでおり、誰でもパッチを投稿できるが、これまで日本国内からのKeycloakコミュニティへのパッチ投稿の事例があまりなく、難しく感じられるかもしれない。そこで、実際のパッチ開発の事例を見てもらうことで、今後の投稿の活性化に少しでもつながればと考えた」と語る。
今回実装したのは、Keycloakの認証画面だ。KeycloakにはTheme機能が提供されているものの、「それだけでは足りない、すごいロジックをカスタマイズしたかった」との目的を実現するために、Identity BrokerのSPIという機能を利用した。
ロジックが入るカスタマイズだと標準のTheme機能では足りないし、OpenID Connectで規定されていない独自パラメータも利用したい。もともとKeycloakにはSPIという仕組みがあり、カスタマイズを可能にしている。そこで、Identity BrokerのSPIを利用して目的の機能を実現することにした。
だがカスタマイズしたライブラリには、この先いずれアップデートが必要になる。「インターフェースが変わった場合など、自分たちでライブラリを抱えていると大変なので、コミュニティに管理してもらおうと考えたのです」と茂木氏は明かす。
コミュニケーションツールにはGitHubとJIRA、そしてメーリングリストを利用した。新しい機能を開発する、バグを報告する際には、まずJIRAでチケットを切って、新規のプルリクエストを出すという手順を整えた。実装作業では、IDE(Eclipse)による開発を行い、最終的にGitHubに上げて全工程を完了した。
コミュニティとやり取りをしながらの今回のパッチ開発の経験をもとに、茂木氏はいくつかのパッチ開発における留意ポイントを紹介した。
- やりたいことを正しく伝える
「当たり前ですが、相手に理解してもらえないと的外れな指摘しかもらえません。また日本流の『よしなにお願いします』では、相手は動いてくれない。具体的にイメージを伝えるのには、テストケースも有効な手段です」。 - タイムゾーンの違いに気をつける
「特に日本と時差の大きいヨーロッパ諸国などとのやりとりでは、日本の17時過ぎくらいから先方のワークタイムが始まります。うまく調整しないと帰るに帰れないということもあるので、技術だけでなくその辺も念頭において進めるのがよいでしょう」。
* * *
全セッション終了後、挨拶に立った中村氏は、「Keycloakとその応用の3scale(API管理)についてQiitaに記事を公開しました。これからも関連記事をさまざまな場所に公開していくので、ぜひ折りに触れて検索してみてください」と参加者に呼びかけ、勉強会を締めくくった。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 注目のWebAuthnと公式より早いKeycloak最新動向を紹介!OSSセキュリティ技術の会 第5回勉強会
- Keycloakの最前線を体感できるイベント「Keyconf 23」レポート
- CNCFプロジェクトとKeycloakの動向
- CNSC 2022、日立のエンジニアがNISTの仕様をベースにIstioのセキュアな設定を解説
- 高まるOSSセキュリティへの関心に応え、認証に関する最新技術&情報を徹底紹介!
- KeycloakによるAPIセキュリティの基本
- FAPIとKeycloakの概要
- CloudNative Days Tokyo 2023から、業務でのOSSコントリビューションのありかたとKeycloakについて解説したセッションを紹介
- 3scaleの基本的な使い方
- Keycloakのインストールと構築例