見出し画像

#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

もちろん、自分でカスタマイズもできて、認証方法に応じて細かく設定ができます。

クライアントスコープ管理

 クライアントで要求される権限のテンプレート設定です。例えば、住所を必要とするクライアントに割り当てるためのスコープを作成して、クライアント管理でクライアントに紐づけることができるようになります。

デフォルトで、以下のクライアントスコープが用意されています。

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など、強力そうなロールが割り当てられています。


ユーザー管理

 Realmに登録しているユーザーです。ユーザーの基本情報やクレデンシャル、ロールなどが確認できます。クレデンシャルは、ハッシュアルゴリズムなどメタ情報のみ閲覧できるようでした。

グループ管理

 グループは、ロールの集合で、複数のロールをまとめてユーザーに割り当てるために使われます。


セッション管理

 セッション情報の一覧が確認できます。ログイン時間やクライアントの情報、IPアドレスまで確認できます。強制的にサインアウトもできます。


イベント管理

 イベントログが閲覧できます。Realmの設定で監視するイベントを登録すると、ログインや会員登録、エラーなどの通知が記録されていきます。

イベント通知を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)


侵害シナリオ

 どんなケースに侵害を許してしまうのか、どんな被害が出るのか、気になります…
使用するプロトコルや設定によって左右されそうです。

※整理中



いいなと思ったら応援しよう!