こんにちは。サイオステクノロジーの木村です。
Shibboleth IdP では、設定ファイルの変更を、再起動をせずにリロードすることができます。
SPの追加や送出属性の変更などで設定ファイルを変更したけど、再起動するとサービスの瞬断が発生するから再起動せずに変更を反映したい・・・そんなときにはサービスのリロードが便利です。
検証したShibboleth IdPのバージョン
- バージョン4(V.4.3.1)
- バージョン5(V5.0.0)
上記2つのバージョンで検証しましたが、両方とも同様の手順で行えました。
リロード手順(コマンドライン)
環境変数 IDP_BASE_URL について
リロードを行う際、内部で環境変数「$IDP_BASE_URL」にアクセスしています。
「$IDP_BASE_URL」が設定されていない場合は、デフォルト値(http://localhost/idp)が使用されます。
URLがデフォルト値と異なる場合、適宜設定してください。
設定のリロード
設定のリロードは以下のコマンドで行うことができます。
$ [Shibboleth Idpのインストールディレクトリ]/bin/reload-service.sh -id [サービスID]
リロードしたい設定の内容によって、サービスIDは異なります。
例えば、attribute-filter.xml の場合のサービスIDは、「shibboleth.AttributeFilterService」です。
サービスIDについては、こちらの公式ページの Reference – Beans に記載がございますのでそちらをご参照ください。
- 実行例:attribute-filter.xml の変更をリロードする場合
$ /opt/shibboleth-idp/bin/reload-service.sh -id shibboleth.AttributeFilterService
リロードを行うと、ログには以下のように、リロードを行い、それが成功した旨のログが出力されます。
以上でリロードは完了です。
リロード手順(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. 変更した設定を反映させます。サービスの再起動 または、上記コマンドラインでのリロード手順で反映させてください。コマンドラインのリロード手順で反映する場合のサービスIDは、「shibboleth.ReloadableAccessControlService」です。
設定のリロード
設定のリロードは以下の URL に GET リクエストを発行して行うことができます。
http(s)://[idp-base-url]/idp/profile/admin/reload-service?id=[サービスID]
サービスID は、コマンドラインで実行するときと同じものです。
- 実行例:attribute-filter.xml の変更をリロードする場合
https://idp.example.org/idp/profile/admin/reload-service?id=shibboleth.AttributeFilterService
リロードが成功すると、以下のようなメッセージが返されます。
以上でリロードは完了です。