2 全般的なセキュリティ対策の有効化
この章の内容は次のとおりです。
- Javaセキュリティ・マネージャの使用方法
Javaセキュリティ・マネージャを有効化して、Coherenceでアクセスするリソースを制御および使用できます。 - ホストベースの認可の使用方法
ホストベースの認可は、指定されたホスト(ホスト名またはIPアドレス・ベース)のみがクラスタに接続できるようにするタイプのアクセス制御です。 - 不正なクライアントの管理
疑いのあるプロトコルを使用して、許容範囲外で操作する不正なクライアントから保護することができます。
Javaセキュリティ・マネージャの使用方法
COHERENCE_HOME
/lib/security/security.policy
ポリシー構成ファイルでは、Oracle Coherenceの最小限のパーミッションのセットが指定されています。提供されているファイルを使用するか、追加のパーミッションを設定するようにファイルを変更します。ローカル(非クラスタ化)・パーミッションのセットも提供されます。
この項の内容は、次のとおりです。
Javaセキュリティ・マネージャの有効化
Javaセキュリティ・マネージャを有効にし、COHERENCE_HOME
/lib/security/security.policy
ファイルを使用するには、クラスタ・メンバーで次のプロパティを設定します。
ノート:
セキュリティ・ポリシー・ファイルでは、デフォルトのJava Runtime Environment (JRE)セキュリティ・パーミッションが付与されていることが想定されています。そのため、java.security.policy
システム・プロパティを設定するときは、2つの等号(==
)ではなく、1つの等号(=
)を使用するように注意してください。
親トピック: Javaセキュリティ・マネージャの使用方法
パーミッションの指定
必要に応じて追加のパーミッションを含むようにCOHERENCE_HOME
/lib/security/security.policy
ファイルを変更します。『Java SEセキュリティ』のJava Development Kit(JDK)での権限に関する項を参照してください。
security.policy
ファイルで追加のパーミッションを指定するには:
親トピック: Javaセキュリティ・マネージャの使用方法
ローカル・パーミッションのプログラムでの指定
com.tangosol.net.security.LocalPermission
クラスにより、パーミッションをローカル(非クラスタ化)のCoherence API操作に設定できます。クライアントは、宣言された操作(ターゲットを指します)の実行を許可される、または許可されないのいずれかに設定されます。たとえば:
LocalPermission lp = new LocalPermission("Cluster.shutdown");
ローカル・パーミッションを使用するには、Javaセキュリティ・マネージャを有効化する必要があります。「Javaセキュリティ・マネージャの有効化」を参照してください。
表2-1に、宣言できるターゲット名の一覧および説明を示します。
表2-1 ローカル・パーミッションのターゲット
ターゲット名 | 説明 |
---|---|
|
カスタム・キャッシュ・ファクトリ・ビルダのプログラムでのインストールを保護します。パーミッションを付与する際には、十分注意する必要があります。このパーミッションを付与すると、コードを使用してキャッシュ・ファクトリ・ビルダーを設定して、任意のキャッシュへのアクセスまたは変更リクエストをインターセプトできるようになり、これらのキャッシュとの間でやりとりされる任意のデータへのアクセスも可能になります。 |
|
すべてのサービスが停止するのを保護します。このパーミッションを付与すると、コードを使用してクラスタ・ノードをプログラムで停止できます。 |
|
バッキング・マップへの直接アクセスを保護します。パーミッションを付与する際には、十分注意する必要があります。このパーミッションを付与すると、コードを使用してバッキング・マップへの参照を取得でき、追加のセキュリティ・チェックなしに格納された任意のデータにアクセスできます。 |
|
ストレージで使用されるクラス・ローダーへの変更を保護します。クラス・ローダーは、システム・クラス・ローダーに存在しない可能性のあるアプリケーション・クラスをロードするためにキャッシュ・サービスによって使用されます。この権限を付与すると、コードを使用して、特定のサービスで使用するクラス・ローダーを変更できます。 |
|
内部サービス、クラスタまたはキャッシュ参照へのアクセスを保護します。このパーミッションを付与すると、コードを使用して基盤となるサービス、クラスタまたはキャッシュ・ストレージ実装への直接アクセスが取得できます。 |
|
サービス・レジストリを保護します。この権限を付与すると、コードを使用して、サービスに関連付けられたさまざまなリソースを再登録または登録解除できます。 |
|
プログラムでのインストールを保護します。パーミッションを付与する際には、十分注意する必要があります。このパーミッションを付与すると、コードを使用して、キャッシュ・サービスに関連付けられたイベント・インターセプタを変更または削除でき、つまり、基盤となるデータへのアクセス、またはデータの一貫性を保護するために設計されたライブ・イベントの削除のいずれかが可能です。 |
親トピック: Javaセキュリティ・マネージャの使用方法
ホストベースの認可の使用方法
この項には次のトピックが含まれます:
ホストベースの認可の概要
ホストベースの認可では、クラスタ・メンバーまたはExtendクライアントのホスト名およびIPアドレスを使用して、クラスタへの接続が許可されるかどうかを決定します。特定のホスト名、アドレスおよびアドレス範囲を定義できます。カスタム処理では、カスタム・フィルタを作成してホストの検証ができます。
ホストベースの認可は、相対的な静的ネットワーク・アドレスを持つ既知のホストがクラスタに参加またはアクセスしている環境に適しています。動的な環境の場合、またはDNSサーバーの更新中の場合は、IPアドレスが変わり、クラスタ・メンバーまたはExtendクライアントが認可に失敗する可能性があります。クラスタ・メンバーまたはExtendクライアントが認可されない場合、キャッシュ操作が完了しないことがあります。Extendクライアントは、一時的な性質が原因となるアクセスの問題が起きる可能性があります。
ホストベースの認可を使用する場合、ネットワーク環境の動的性質を考慮します。認可されるホストのリストを再構成するという要求は、現実的ではない場合があります。可能な場合、特定のホスト名を使用するかわりに、常にIPアドレスの範囲を使用します。または、変更されたアドレスを解決できるカスタム・フィルタを作成します。ホストベースの認可が現実的ではない場合、ExtendクライアントIDトークンまたはSSLの使用を考慮します。それぞれ、「IDトークンを使用したクライアント接続の制限」および「SSLを使用した通信の保護」を参照してください。
親トピック: ホストベースの認可の使用方法
クラスタ・メンバーの認可済ホストの指定
クラスタのデフォルトの動作では、いずれのホストもクラスタに接続し、クラスタ・メンバーになることができます。ホストベースの認可は、この動作を変更して、特定のホスト名またはIPアドレスを持つホストのみがクラスタに接続できるようにします。
<cluster-config>
要素内の<authorized-hosts>
要素を使用して、オペレーション・オーバーライド・ファイルで認可済のホストを構成します。<host-address>
要素を使用して特定のアドレスを入力するか、<host-range>
要素を使用してアドレスを範囲を入力します。<host-address>
要素および<host-range>
要素は、複数の要素を一意に識別するid
属性をサポートします。
次の例では、IPアドレスが192.168.0.5か192.168.0.6であるか、または192.168.0.10から192.168.0.20および192.168.0.30から192.168.0.40の範囲内であるクラスタ・メンバーのみを受け入れるようにクラスタを構成します。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <authorized-hosts> <host-address id="1">192.168.0.5</host-address> <host-address id="2">192.168.0.6</host-address> <host-range id="1"> <from-address>192.168.0.10</from-address> <to-address>192.168.0.20</to-address> </host-range> <host-range id="2"> <from-address>192.168.0.30</from-address> <to-address>192.168.0.40</to-address> </host-range> </authorized-hosts> </cluster-config> </coherence>
親トピック: ホストベースの認可の使用方法
Extendクライアントの認可済ホストの指定
拡張プロキシ・サーバーのデフォルトの動作では、いずれのExtendクライアントもクラスタに接続できます。ホストベースの認可は、この動作を変更して、特定のホスト名またはIPアドレスを持つホストのみがクラスタに接続できるようにします。
プロキシ・スキーム定義の<tcp-acceptor>
要素内の<authorized-hosts>
要素を使用して、キャッシュ構成ファイルで認可済のホストを構成します。<host-address>
要素を使用して特定のアドレスを入力するか、<host-range>
要素を使用してアドレスを範囲を入力します。<host-address>
要素および<host-range>
要素は、複数の要素を一意に識別するid
属性をサポートします。
次の例では、IPアドレスが192.168.0.5か192.168.0.6であるか、または192.168.0.10から192.168.0.20および192.168.0.30から192.168.0.40の範囲内であるクライアントからの接続のみを受け入れるように拡張プロキシを構成します。
<proxy-scheme> <service-name>ExtendTcpProxyService</service-name> <thread-count>5</thread-count> <acceptor-config> <tcp-acceptor> ... <authorized-hosts> <host-address id="1">192.168.0.5</host-address> <host-address id="2">192.168.0.6</host-address> <host-range id="1"> <from-address>192.168.0.10</from-address> <to-address>192.168.0.20</to-address> </host-range> <host-range id="2"> <from-address>192.168.0.30</from-address> <to-address>192.168.0.40</to-address> </host-range> </authorized-hosts> ... </tcp-acceptor> </acceptor-config> <autostart>true</autostart> </proxy-scheme>
親トピック: ホストベースの認可の使用方法
フィルタ・クラスを使用した認可の決定
フィルタ・クラスは、特定のホスト接続を受け入れるかどうかを決定します。Extendクライアント接続とクラスタ・メンバー接続の両方とも、フィルタ・クラスの使用をサポートしています。フィルタ・クラスでは、com.tangosol.util.Filter
インタフェースを実装する必要があります。インタフェースのevaluate()
メソッドに、ホストのjava.net.InetAddress
が渡されます。実装は、true
を返して接続を受け入れます。
フィルタ・クラスを有効にするには、<host-filter>
要素内の<class-name>
要素を使用して、完全修飾クラス名を入力します。<init-params>
要素を使用して、初期化パラメータを設定します。
次の例では、MyFilter
という名前のフィルタを構成します。このフィルタは、ホスト接続が許可されるかどうかを決定します。
<authorized-hosts> <host-address id="1">192.168.0.5</host-address> <host-address id="2">192.168.0.6</host-address> <host-range id="1"> <from-address>192.168.0.10</from-address> <to-address>192.168.0.20</to-address> </host-range> <host-filter> <class-name>package.MyFilter</class-name> <init-params> <init-param> <param-name>sPolicy</param-name> <param-value>strict</param-value> </init-param> </init-params> </host-filter> </authorized-hosts>
親トピック: ホストベースの認可の使用方法
不正なクライアントの管理
サスペクト・アルゴリズムを使用してクライアント接続をモニターし、異常に遅い、または悪用されているクライアントを探します。不正なクライアント接続が検出されると、プロキシ・サーバーがメモリー不足になることを防ぐために、アルゴリズムによって接続が閉じられます。プロトコルは、クライアントの送信接続バッファ・バックログのサイズ(バイト数)と長さ(メッセージ数)の両方をモニタリングすることによって機能します。様々なレベルによって、クライアントが疑わしいとき、正常に戻ったとき、または不正と見なされるときが判断されます。
サスペクト・プロトコルは、プロキシ・スキーム定義の<tcp-acceptor>
要素内で構成します。『Oracle Coherenceでのアプリケーションの開発』のtcp-acceptorに関する項を参照してください。疑いのあるプロトコルはデフォルトで有効です。
次の例は、サスペクト・プロトコルの構成方法を示しており、デフォルト設定に類似しています。クライアントの送信接続バッファ・バックログが10MBまたはメッセージ数が10000個に達すると、クライアントは疑わしいと見なされ、モニターされます。クライアントの接続バッファ・バックログが2MBまたはメッセージ数が2000個まで戻ると、クライアントは安全と見なされ、モニターされなくなります。クライアントの接続バッファ・バックログが95MBまたはメッセージ数が60000個に達すると、クライアントは安全でないと見なされ、プロキシは接続を閉じます。
<proxy-scheme> <service-name>ExtendTcpProxyService</service-name> <thread-count>5</thread-count> <acceptor-config> <tcp-acceptor> ... <suspect-protocol-enabled>true</suspect-protocol-enabled> <suspect-buffer-size>10M</suspect-buffer-size> <suspect-buffer-length>10000</suspect-buffer-length> <nominal-buffer-size>2M</nominal-buffer-size> <nominal-buffer-length>2000</nominal-buffer-length> <limit-buffer-size>95M</limit-buffer-size> <limit-buffer-length>60000</limit-buffer-length> </tcp-acceptor> </acceptor-config> <autostart>true</autostart> </proxy-scheme>
親トピック: 全般的なセキュリティ対策の有効化