連載
» 2019年04月03日 05時00分 公開

Keycloak超入門(8):Keycloakで認可サービスを試してみよう[前編] (3/3)

[和田広之, 相田洋志, 田村広平, 上田直樹, 青柳隆,野村総合研究所/野村総合研究所/フリーランス/株式会社リック/フリーランス]
前のページへ 1|2|3       

Keycloak側の設定確認

 構築が完了したら、設定を確認してみましょう。以下の設定に関しては、認可サービスの挙動に重要な部分のみを説明しています。

●集中管理方式に関連するクライアント設定

 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.json設定

 集中管理方式のクライアントアダプターの設定はシンプルです。基本的に、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)。

画面1 画面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


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。