![見出し画像](https://assets.st-note.com/production/uploads/images/165140705/rectangle_large_type_2_6a3d03106c57b360cfe9b7f74e21a071.jpg?width=1200)
#159 Keycloak
オープンソースのIAMにKeycloakがあります。OpenID Connectや、SAML、OAuth2.0など最新の認証規格に準拠しており、柔軟かつ高機能なため、利用者を増やしているようです。
認証周りの理解が浅いように感じたので、遊びながら勉強してみます。
環境構築
このページを参考に、Dockerコンテナを立ち上げます。
docker run -p 8080:8080 -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:26.0.7 start-dev
起動したら、http://localhost:8080にアクセスします。ログイン画面が表示されるので、admin:adminでログインします。
管理コンソール
ログインに成功すると、/admin/master/consoleにリダイレクトされます。管理コンソールには、以下の機能があります。
Realms管理
クライアント管理
クライアントスコープ管理
ロール管理
ユーザー管理
グループ管理
セッション管理
設定
Realms管理
Realmsとは、日本語なら「領域」という意味です。Oasisのワールドツアーで例えてみましょう。東京公演とメキシコ公演では、チケットが全く別のものになりますよね。メキシコ公演のチケットで、東京公演に行けたらおかしなことになります。この場合、認証の環境を分ける必要があります。東京公演Realmとメキシコ公演Realmを別々に作成して、それぞれに対応したチケットを登録することで混乱を起こさずに認証ができます。
Realmsは、独立した認証環境なので、各々にユーザーやロール、グループなどを設定できます。デフォルトでmaster realmが作成され、管理用に使われるようです。
クライアント管理
クライアントとは、ユーザー認証をリクエストするアプリやサービスのことです。OpenID ConnectやSAMLなどを使って、認証情報を送ってきます。
デフォルトで以下のクライアントが登録されています。
account OpenID Connect
account-console OpenID Connect
admin-cli OpenID Connect
broker OpenID Connect
master-realm OpenID Connect
security-admin-console OpenID Connect
もちろん、自分でカスタマイズもできて、認証方法に応じて細かく設定ができます。
![](https://assets.st-note.com/img/1733757870-s1r2LyNwbEP6AvVRtXmhzCnS.png?width=1200)
クライアントスコープ管理
クライアントで要求される権限のテンプレート設定です。例えば、住所を必要とするクライアントに割り当てるためのスコープを作成して、クライアント管理でクライアントに紐づけることができるようになります。
デフォルトで、以下のクライアントスコープが用意されています。
acr
address
basic
email
microprofile-jwt
offline_access
organization
phone
profile
role_list
ロール管理
ロールは、ユーザーがRealm内でできるアクションを定義したものです。デフォルトで以下のロールが用意されています。
admin
create-realm
default-roles-master
offline-access
uma_authorization
adminロールには、create-clientやimpersonationなど、強力そうなロールが割り当てられています。
![](https://assets.st-note.com/img/1733758587-Ou0hNLlD5c2wo73vPqMn1eS8.png?width=1200)
ユーザー管理
Realmに登録しているユーザーです。ユーザーの基本情報やクレデンシャル、ロールなどが確認できます。クレデンシャルは、ハッシュアルゴリズムなどメタ情報のみ閲覧できるようでした。
![](https://assets.st-note.com/img/1733758772-JIxMZop0XCEtjBz3RUP5fOAa.png?width=1200)
グループ管理
グループは、ロールの集合で、複数のロールをまとめてユーザーに割り当てるために使われます。
![](https://assets.st-note.com/img/1733758855-tgSO4yLE3ebpNlV9jGKWs5M1.png?width=1200)
セッション管理
セッション情報の一覧が確認できます。ログイン時間やクライアントの情報、IPアドレスまで確認できます。強制的にサインアウトもできます。
![](https://assets.st-note.com/img/1733758966-nXWSaOZ1RuErc72qbA6kIoPp.png?width=1200)
イベント管理
イベントログが閲覧できます。Realmの設定で監視するイベントを登録すると、ログインや会員登録、エラーなどの通知が記録されていきます。
![](https://assets.st-note.com/img/1733759112-a4R6t3Tp8osjQby27dAx0SEm.png?width=1200)
イベント通知をOnにすると、デフォルトで下記のイベントが記録されるようになります。
Login
Login error
Register
Register Error
Logout
Logout error
Code to token
Code to token error
Client ;ogin
Client login error
設定
設定項目には、Realm設定、認証設定、IdP設定、ユーザー連携設定があります。
Realm設定
Realmに関する細かい設定ができます。重要なもので、メール送信設定や署名キーの設定があります。
認証設定
認証フローの設定ができます。多要素認証の要否やユーザー登録の有効化設定が可能です。フローは、デフォルトで下記のものが用意されています。
browser
clients
direct grant
docker auth
first broker login
registration
reset credential
IdP設定
ソーシャルログインやカスタムアプリによる認証を設定できます。
ソーシャルログインで連携ができるサービスには以下があります。
BitBucket
Facebook
GitHub
GitLab
Google
Instagram
LinkedIn
Microsoft
Openshiftv3
Openshiftv4
PayPal
StackOverflow
Twitter
カスタムアプリでの認証プロトコルとしては、以下に対応しています。
Keycloak OpenId Connect
OpenId Connect v1.0
SAML v2.0
ユーザー連携設定
KerberosやLDAPとの連携を設定できます。
エンドポイント
攻撃者の観点からみると、どんなエンドポイントがあり、どのような情報がとれるのかという点が気になります…
※整理中
Unauthenticated
Authenticated (user)
Authenticated (admin)
侵害シナリオ
どんなケースに侵害を許してしまうのか、どんな被害が出るのか、気になります…
使用するプロトコルや設定によって左右されそうです。
※整理中