これは、なにをしたくて書いたもの?
Infinispan Serverの管理コンソールにアクセスしたり、RESTエンドポイントに認証設定をしたいと思いまして。
なお、Hot Rodでは以前に認証・認可設定を行っています。
Infinispan Server(Hot Rod)で、認証・認可設定を行う - CLOVER🍀
今回は、「認証」のみで設定します。
環境
今回の環境では、Infinispan Server 12.0.2.Finalを使用します。Infinispan Serverが動作しているサーバーのIPアドレスは、
172.17.0.2とします。
Infinsipan Serverを動作させているJavaのバージョンは、こちら。
$ java --version openjdk 11.0.10 2021-01-19 OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9) OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.10+9, mixed mode)
なお、Infinispan Serverをバインドさせているアドレスは、0.0.0.0
とします。
管理コンソールにアクセスする
まずはなにも考えずにInfinipan Serverの管理コンソール(http://[Infinispan ServerのIPアドレス]:11222/
)にアクセスして
みます。
すると、こんなページが表示されます。
「Open the console」と書かれているボタンを押すと、まだユーザーを作成していないため、こんなメッセージが
表示されます。
どうやら、認証設定が必須なようです。
では、ユーザーを作成します。
$ bin/cli.sh user create ispn-admin -p ispn-password
この状態で管理コンソールにアクセスすると、Basic認証の入力ダイアログが出現するようになりますが、先に進むことが
できません。
先に進めるようになるのは、Infinispan Serverの再起動後ですね。
というわけで、Infinispan Serverを再起動してアクセスすると、管理コンソールが表示されます。
とりあえず、cache
という名前でDistributed Cacheを作成してみます。
Cacheが作成され、server/data/caches.xml
ファイルにCacheの定義が追加されました。
server/data/caches.xml
<?xml version="1.0" ?> <infinispan xmlns="urn:infinispan:config:12.0"> <cache-container> <distributed-cache mode="SYNC" remote-timeout="17500" name="cache" statistics="true"> <locking concurrency-level="1000" acquire-timeout="15000" striping="false"/> <state-transfer timeout="60000"/> </distributed-cache> </cache-container></infinispan>
Cacheにエントリを追加してみましょう。
一覧。
追加。
確認。
RESTエンドポイントに対して、curl
でアクセスしてみます。
URLは、こちらのドキュメントを見るとわかります。
Using the Infinispan REST Server
Using the Infinispan REST Server / Creating and Managing Caches
データの取得。
$ curl -i -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key1 HTTP/1.1 401 Unauthorized WWW-Authenticate: Digest realm="default", nonce="AAAACAAAD+Go2DNCRI+1FO8ewue2abPkThl1BYwlgsWM3Q0Amq3q0bqRjOU=", opaque="00000000000000000000000000000000", algorithm=MD5, qop=auth content-length: 0
401になりました。では、先ほど作成したユーザーをBasic認証で指定してみましょう。
$ curl -i -u ispn-admin:ispn-password -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key1 HTTP/1.1 403 Forbidden content-length: 73 ISPN080052: The request authentication mechanism 'BASIC' is not supported
403になりました。Basic認証をサポートしていない、と言われます。
データの登録も同様です。
$ curl -i -u ispn-admin:ispn-password -XPUT -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key2 -d 'value2'HTTP/1.1 403 Forbidden content-length: 73 ISPN080052: The request authentication mechanism 'BASIC' is not supported
ちなみに、ユーザーを作成したので認証が通らないのではなく、ユーザーを作らない状態でも同じです。
つまり、RESTエンドポイントを使うためには認証設定が必須になります。
例外は、CacheManagerのヘルスチェックのみで、こちらは認証が不要です。
Using the Infinispan REST Server / Getting Cache Manager Health Status
$ curl -i 172.17.0.2:11222/rest/v2/cache-managers/default/health/status HTTP/1.1 200 OK Content-Type: text/plain content-length: 7 HEALTHY
というわけで、RESTエンドポイントに認証設定を入れてみます。
Using the Infinispan REST Server / REST Authentication
Deploying and Configuring Infinispan 12.0 Servers / Manually Configuring REST Authentication
server/conf/infinispan.xml
のendpoints
の箇所を
<endpoints socket-binding="default" security-realm="default"/>
以下のように設定します。今回はrest-connector
のみ設定しました(hotrod-connector
はパスします)。
<endpoints socket-binding="default" security-realm="default"> <rest-connector> <authentication mechanisms="DIGEST BASIC"/> </rest-connector> </endpoints>
RESTエンドポイントがサポートしている認証方法は、BasicとDigestのようです。
HTTP (REST): Basic and Digest
Deploying and Configuring Infinispan 12.0 Servers / Securing Access to Infinispan Servers
設定が終わったら、Infinispan Serverを再起動。
これで、RESTエンドポイントを使ってCacheへアクセスできるようになります。
$ curl -i -u ispn-admin:ispn-password -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key1 HTTP/1.1 404 Not Found content-length: 0
ですが、再起動したのでデータがなくなったのでした…。もう1度、データを管理コンソールで登録してから、取得。
$ curl -i -u ispn-admin:ispn-password -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key1 HTTP/1.1 200 OK Etag: 282873 Content-Type: application/octet-stream content-length: 6 value1
今度は取得できました。
データの登録と、取得。
$ curl -i -u ispn-admin:ispn-password -XPUT -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key2 -d 'value2'HTTP/1.1 204 No Content etag: 1200749911 $ curl -i -u ispn-admin:ispn-password -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key2 HTTP/1.1 200 OK Etag: 1200749911 Content-Type: application/octet-stream content-length: 6 value2
こちらもOKです。
以前、Hot Rodで認証・認可設定を調べた時には認可設定まで行ったのですが、
Infinispan Server(Hot Rod)で、認証・認可設定を行う - CLOVER🍀
単に認証を設定するだけならエンドポイントに認証設定を入れるだけでよいみたいです。
この設定だと、認証さえ通ってしまえばCacheにアクセスすることができます。
Cacheに認可設定を行いたい場合は、cache-container
とcache
にsecurity
の設定を入れましょう。
まとめ
Infinispan Serverの管理コンソールへのアクセスと、RESTエンドポイントの認証設定、および確認を行ってみました。
どちらもあまり使っていないので、1度確認しておいてもよかったかなと思います。