こんにちは。サイオステクノロジーの木村です。
Shibboleth IdP では、Metadata の変更を、再起動をせずにリロードすることができます。
SPの Metadata が変更されてすぐに反映したいけど、再起動するとサービスの瞬断が発生するから再起動せずに変更を反映したい・・・そんなときにはリロードが便利です。
今回は、Metadata のリロード手順について記載します。
検証したShibboleth IdPのバージョン
- バージョン5(V5.0.0)
リロード手順(コマンドライン)
環境変数 IDP_BASE_URL について
リロードを行う際、内部で環境変数「$IDP_BASE_URL」にアクセスしています。
「$IDP_BASE_URL」が設定されていない場合は、デフォルト値(http://localhost/idp)が使用されます。
URLがデフォルト値と異なる場合、適宜設定してください。
Metadata のリロード
Metadata のリロードは以下のコマンドで行うことができます。
$ [Shibboleth Idpのインストールディレクトリ]/bin/reload-metadata.sh -id [リロードしたい Metadata の MetadataProvider id]
尚、「metadata-providers.xml」の記載内容の変更をリロードしたい場合は、『【Shibboleth IdP】再起動せずに設定ファイルの変更をリロードする』に記載の手順で行えます。その際に指定する サービスID は、「shibboleth.MetadataResolverService」です。
- 実行例:MetadataProvider id=”testsp” の Metadata をリロードする場合
$ /opt/shibboleth-idp/bin/reload-metadata.sh -id testsp
以上でリロードは完了です。
リロード手順(Web API)
上記コマンドラインの方法の他に、GET リクエストを発行してサービスをリロードすることもできます。コマンドラインの方法では、Shibboleth IdPサーバの環境で行う必要があるため、外部からリロードを実行したい時などはこちらの方法を使います。
アクセス権の付与
外部から実行する場合は、実行する環境に、AccessControlConfigurationで定義されているアクセス権が必要です。
以下の方法で、実行する環境のIPアドレスを指定してアクセス権を事前に付与しておきます。
1. [Shibboleth Idpのインストールディレクトリ]/conf 配下にある「access-control.xml」の「bean id=”AccessByIPAddress”」の 「p:allowedRanges=」に、アクセスを許可する IP アドレスを記載して保存します。
- access-control.xml
<util:map id="shibboleth.AccessControlPolicies">
<entry key="AccessByIPAddress">
<bean id="AccessByIPAddress" parent="shibboleth.IPRangeAccessControl"
p:allowedRanges="#{ {'127.0.0.1/32', '::1/128', 'xx.xx.xx.xx/32'} }" />
</entry>
2. 変更した設定を反映させます。サービスの再起動 または、『【Shibboleth IdP】再起動せずに設定ファイルの変更をリロードする』に記載のコマンドラインのリロード手順で反映させてください。その際のサービスIDは、「shibboleth.ReloadableAccessControlService」です。
Metadata のリロード
Metadata のリロードは以下の URL に GET リクエストを発行して行うことができます。
http(s)://[idp-base-url]/idp/profile/admin/reload-metadata?id=[MetadataProvider id]
MetadataProvider id は、コマンドラインで実行するときと同じものです。
- 実行例:MetadataProvider id=”testsp” の Metadata をリロードする場合
https://idp.example.org/idp/profile/admin/reload-metadata?id=testsp
リロードが成功すると、以下のようなメッセージが返されます。
以上でリロードは完了です。