構築が完了したら、設定を確認してみましょう。以下の設定に関しては、認可サービスの挙動に重要な部分のみを説明しています。
Keycloak管理コンソール(https://sso.example.com/auth/admin/)にアクセスし、Keycloak管理者(admin)でログインします。そして、「Demo-authz」レルムの「クライアント」から「authz-app」を選択し、以下の表6〜9の設定意図を確認します。リソースとポリシーを関連付けたパーミッションを定義することが集中管理方式の基本となります。
タブ | 設定項目 | 設定値 | 設定意図 |
---|---|---|---|
設定 | 認可の有効 | オン | 認可サービスを利用するために必要 |
表6 「設定」タブ |
名前 | uris | 設定意図 |
---|---|---|
Default Resource | /* | ※デフォルトで作成されているリソース |
Attribute test Resource | /attr/test/* | 特定の条件でアクセス制御を行うパスを定義 |
Group openstandia Resource | /group/openstandia/* | 特定の条件でアクセス制御を行うパスを定義 |
Lunch Time Resource | /time/lunch/* | 特定の条件でアクセス制御を行うパスを定義 |
Role Admin Resource | /role/admin/* | 特定の条件でアクセス制御を行うパスを定義 |
User user001 Resource | /user/user001/* | 特定の条件でアクセス制御を行うパスを定義 |
表7 「認可」→「リソース」タブ |
名前 | タイプ | 設定項目 | 設定値 | 設定意図 |
---|---|---|---|---|
Default Policy | js | コード | JavaScriptコード(割愛) | ※デフォルトで作成されているポリシー |
Attribute test Only | js | コード | JavaScriptコード(割愛) | ユーザーのメールアドレスに “@test.example.com”が入っている場合のみアクセスを許可する設定 |
Group openstandia Only | group | グループ | /nri/openstandia | openstandiaグループのみのアクセスを許可する設定 |
Lunch Time Only | time | 時 | 12 to 12 | 12:00:00〜12:59:59のみのアクセスを許可する設定 |
分 | 0 to 59 | |||
Role Admin Only | role | レルムロール | admin | adminロールのみをアクセスを許可する設定 |
User user001 Only | user | ユーザー | user001 | user001のみアクセスを許可する設定 |
表8 「認可」→「ポリシー」タブ |
名前 | タイプ | リソース | ポリシー | 設定意図 |
---|---|---|---|---|
Default Permission | resource | Default Resource | Default Policy | ※デフォルトで作成されているパーミッション(認証済みであれば許可される) |
Attribute test Permission | resource | Attribute test Resource | Attribute test Only | Attribute test ResourceとAttribute test Onlyを関連付ける設定 |
Group openstandia Permission | resource | Group openstandia Resource | Group openstandia Only | Group openstandia ResourceとGroup openstandia Onlyを関連付ける設定 |
Lunch Time Permission | resource | Lunch Time Resource | Lunch Time Only | Lunch Time ResourceとLunch Time Onlyを関連付ける設定 |
Role Admin Permission | resource | Role Admin Resource | Role Admin Only | Role Admin ResourceとRole Admin Onlyを関連付ける設定 |
User user001 Permission | resource | User user001 Resource | User user001 Only | User user001 ResourceとUser user001 Onlyを関連付ける設定 |
表9 「認可」→「アクセス権」タブ |
(※)今回の検証では、1つのリソースに1つのポリシーしか関連付けていませんが、複数のポリシーを関連付けることも可能です。複数のポリシーがある場合には、各ポリシーのAND条件(Unanimous)、OR条件(Affirmative)、多数決(Consensus)なのかを「判定戦略」で設定できます。
集中管理方式のクライアントアダプターの設定はシンプルです。基本的に、KeycloakのURLやクライアント名、クレデンシャルを設定するだけです。ただし、認可サービスを利用するためには、「policy-enforcer」という定義を追加しておく必要があります(表10)。
/usr/local/tomcat/webapps/authz-app/WEB-INF/keycloak.json
{ "realm": "demo-authz", "auth-server-url": "https://sso.example.com/auth", "ssl-required" : "external", "disable-trust-manager": true, "resource": "authz-app", "credentials": { "secret": "secret" }, "policy-enforcer": {} }
パラメーター名 | 必須 | 説明 |
---|---|---|
realm | ○ | クライアントが定義されているレルム名を指定 |
auth-server-url | ○ | 認可サーバURLを指定 |
ssl-required | ― | ・SSLが必須かどうかを指定 ・外部からのアクセスの場合に、HTTPSを必須にするため、externalを指定 |
disable-trust-manager | ― | ・SSL証明書の検証を無効にするかどうかを指定。今回の検証ではtrueを指定 ・本番環境では決してこのパラメーターをtrueにしてはいけません |
resource | ○ | クライアント名を指定 |
credentials | ○ | クライアントシークレットを指定 |
policy-enforcer | ― | 認可サービスを利用する場合には指定 |
表10 keycloak.jsonのコア設定 |
(1)認可サービスアプリ(https://authz.example.com/authz-app/)にアクセスします。
(2)登録済みの任意のユーザーでログインします。
(3)認可サービスアプリのトップ画面が開きます(画面1)。
(4)“アクセス制限チェック”以下のさまざまなパスへのアクセスを行い、ログインしたユーザーでアクセスが可能かどうかを確認します。アクセス結果をまとめると、表11のようになり、設計したアクセス制御通りに動作していることが確認できます。
アクセスURI | ログインユーザー | ||||||
---|---|---|---|---|---|---|---|
user001 | user002 | user003 | admin001 | admin002 | admin003 | ||
/authz-app/ | OK | OK | OK | OK | OK | OK | |
/authz-app/role/admin/ | NG | NG | NG | OK | OK | OK | |
/authz-app/user/user001/ | OK | NG | NG | NG | NG | NG | |
/authz-app/group/openstandia/ | NG | NG | OK | NG | NG | OK | |
/authz-app/attr/test/ | NG | OK | NG | NG | OK | NG | |
/authz-app/time/lunch/ | ※ | ※ | ※ | ※ | ※ | ※ | |
表11 ユーザーごとのアクセス結果(※12:00:00〜12:59:59の間にアクセスした場合はOK。それ以外の時間帯はNG) |
Keycloakの認可サービスのうち、集中管理方式についての設定方法や動作について、理解できましたでしょうか。集中管理方式については、Keycloakとクライアントアダプターの設定だけで利用可能となるので、比較的導入しやすいのではないかと考えます。
今回の検証ではシンプルなポリシーばかりでしたが、この検証環境を使えば、より複雑なアクセス制御のルールに変更することもできるので、実際に触ってみて、いろいろと試してみることをお勧めします。リバースプロキシ型では実現が難しいような、複雑なアクセス制御の要件がある場合は、この集中管理方式を検討してみるとよいでしょう。
次回、最終回となる第9回では、今回は説明できなかったUMA方式の認可サービスについて解説します。
野村総合研究所のオープンソースサポートサービス「OpenStandia」で、オープンソースのサポートや製品開発を担当。
Twitter: @wadahiro
野村総合研究所のオープンソースサポートサービス「OpenStandia」で、オープンソースの導入支援やプロジェクト推進を担当。
Twitter: @daian183
野村総合研究所のオープンソースサポートサービス「OpenStandia」で、OpenAMやKeycloakを中心としたOSSの研究開発・テクニカルサポートを担当。
Twitter: @tamura__246
野村総合研究所のオープンソースサポートサービス「OpenStandia」で、OpenAMやKeycloakを中心としたOSSの研究開発・導入支援を担当。
Twitter: @naoki_dx_xb
野村総合研究所のオープンソースサポートサービス「OpenStandia」で、OpenAMやKeycloakを中心としたOSSの障害調査・テクニカルサポートを担当。
Twitter: @yagiaoskywalker
Copyright © ITmedia, Inc. All Rights Reserved.