8 Oracle Fusion Middlewareのセキュリティのチューニング

Oracle Fusion Middlewareのセキュリティ・サービスをチューニングし、Oracle Platform Security Services (OPSS)およびOracle Web Servicesを通じてセキュリティ・サービスのパフォーマンスを最適化できます。

セキュリティ・サービスについて

Oracle Fusion Middlewareは、Oracle Platform Security Services (OPSS)およびOracle Web Servicesを通じてセキュリティ・サービスを提供します。

  • Oracle Platform Security Services

    Oracle Platform Security Servicesは、Oracle Fusion Middlewareの主要コンポーネントです。セキュリティ・サービスの統合スイートであり、Javaセキュリティ・モデルを使用するJava SEアプリケーションやJava EEアプリケーションと簡単に統合できます。セキュリティ・サービスには、開発者がアプリケーション環境に組み込むことのできるユーザー認証、認可および委任のサービスを実装する機能が含まれています。こうしたサービスの開発にリソースをつぎ込むかわりに、アプリケーション開発者はアプリケーションの表現やビジネス・ロジックに集中することができます。

    Oracle Platform Security for Javaを使用すると、アプリケーションのリソース・ユーザーに対してきめ細かなアクセス制御を実施できます。そのための主なステップは次の3つです。

    1. 適宜ログイン・モジュールを構成して呼び出します。付属のログイン・モジュールを使用することも、カスタム・ログイン・モジュールを使用することもできます。

    2. ログインしようとするユーザーを認証します。これはアイデンティティ・ストア・サービスの役割です。

    3. そのロールの権限をチェックすることで、ユーザーを認可します。

  • Oracle Web Services Security

    Oracle Web Services Securityは、XMLベースのメッセージを使用してWebサービスとやり取りするための認可および認証のフレームワークを提供します。

ノート:

ここに記載されている内容は、読者がOracle Fusion Middlewareセキュリティ・サービスの概念および管理についての情報に目を通し、理解していることを想定しています。セキュリティ・パラメータをチューニングする前に、『Webサービスの管理』を参照してください。

チューニングに関する基本的な考慮事項

チューニングを考慮することによって、Oracle Fusion Middlewareセキュリティ・サービスのパフォーマンスを向上させることができます。

パフォーマンス・ボトルネックを見つけた場合、Webサービスのデプロイ全体において、予期されるトラフィック負荷に対応しているかどうかを最初に確認する必要があります。システムが、CPU使用率100%のクリティカル・パスの状態にある場合、クラスタに1つ以上のコンピュータを追加します。

デプロイメントにボトルネックが存在する場合、その発生箇所はおそらく次のいずれかです。

  • エージェントとの低速な接続を介したトラフィック

  • JMSのようなサード・パーティのキューイング・システムへの接続待機時間

どちらの問題についても、次の原因を確認します。

  • 外部リソース(特に次のタイプ)への接続を含むポリシー・アサーションの問題

    • データベース・リポジトリ

    • LDAPリポジトリ

    • セキュア・リソース

    • 独自のセキュリティ・システム

  • データベース・パフォーマンスの問題

これらのいずれかがボトルネックの原因であると判明した場合は、データベースまたはLDAP接続の管理方法、あるいはリソースの保護方法を変更する必要があります。

Oracle Platform Security Servicesのチューニング

Oracle Platform Security Services (OPSS)には、次の基本的なチューニング構成が含まれています。

JVMチューニング・パラメータ

JVMパラメータをチューニングすると、パフォーマンスが大幅に向上します。たとえば、JVMヒープ・サイズはストア内のロールおよび権限の数に応じてチューニングする必要があります。実行時には、ロールおよび権限はすべてメモリー内キャッシュに格納されます。JVMチューニングの詳細は、Java仮想マシン(JVM)のチューニングを参照してください。

JDKチューニング・パラメータ

Java Development Kit 7 (JDK 7)から、現在のデフォルトのキーストア・サイズは2048ビットです。JDK 6以前ではデフォルト・サイズが1024ビットでした。

Javaキーツールを使用してキーストアを生成する際には、-keysizeパラメータをキーストア・サイズの制御に使用できます。キーストアが大きいほど、セキュリティのパフォーマンスの低下という犠牲を払うことになりますが、セキュリティはより強固になります。使用環境のユースケース・シナリオを検討して、キーストアの増加がセキュリティまたはパフォーマンスのしきい値に悪影響を与えないか判断してください。

JDK 7のリリース・ノート(http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html)を参照してください

認証チューニング・パラメータ

OPSS認証チューニングの詳細は、Oracle Technology Networkに掲載されているOracle Fusion Middleware Oracle WebLogic Serverの保護ガイドの、WebLogicおよびLDAP認証プロバイダのパフォーマンスの向上に関する項(http://download.oracle.com/docs/cd/E12840_01/wls/docs103/secmanage/atn.html#wp1199087)を参照してください。

認可チューニング・プロパティ

次のJavaシステム・プロパティを使用して、認可を最適化できます。

表8-1 認可プロパティ

Javaシステム・プロパティ デフォルト値 有効な値 ノート

-Djps.subject.cache.key

4

3

4

5

JPSは、サブジェクト・リゾルバを使用して、プラットフォーム・サブジェクトをuser/enterprise-role情報およびApplicationRole情報を含むJpsSubjectに変換します。この情報は、サブジェクトではプリンシパルとして表されます。

特にサブジェクトのプリンシパル・セットが大規模な場合、この変換はCPUへの負荷が高いです。パフォーマンスを向上するために、JPSコードはプラットフォーム・サブジェクトとJpsSubjectの変換をキャッシュします。2つのサブジェクトは、コンテンツが同じなのにプリンシパルの名前の大/小文字が異なる場合に、混同される可能性があります。

次の設定を使用して、キャッシュ・キーを構成できます。

  • 3: プラットフォーム・サブジェクトをキーとして直接使用します。ノート: WLSでprincipalEqualCaseinsensitiveフラグが有効になっている場合、2つのサブジェクトは、コンテンツが同じなのにプリンシパルの大/小文字が異なる場合に、混同される可能性があります。

  • 4: この設定は3に似ていますが、大/小文字の区別の問題を解決しています。これは、そのまま使用可能な設定です。

  • 5: サブジェクト全体をキーとして使用するかわりに、この設定は、サブジェクト内のプリンシパル・セットの一部をキーとして使用します(実際にはWLSUSerImplタイプのプリンシパルを使用します)。

    この設定により、サブジェクトに多数のプリンシパル・セットがある場合、キャッシュ取得操作が高速になります。WLS以外のプラットフォーム(WASやJBOSSなど)では、これは4の場合に戻るため、この設定はWLS専用です。この場合、後述のキャッシュが有効な期間を制御する存続時間(TTL)設定フラグもあります。

-Djps.subject.cache.ttl

60000ms

 

5の場合(前述)のキャッシュの存続時間(TTL)。このシステム・プロパティは、キャッシュが有効な期間を制御します。有効期限が切れると、キャッシュされた値はダンプされます。設定は、フラグ -Djps.subject.cache.ttl=xxxxによって制御されます(xxxは、ミリ秒単位の期間です)。

このTTL設定の期間を、WLS LDAPオーセンティケータでグループおよびユーザー・キャッシュTTLに使用される値と同じ値に設定することを検討してください。

-Djps.combiner.optimize=true

True

True

False

このシステム・プロパティを使用して、特定のサブジェクトの保護ドメインをキャッシュします。フラグ-Djps.combiner.optimize=trueを設定すると、Java認可パフォーマンスを改善できます。

-Djps.combiner.optimize.lazyeval=true

True

True

False

このシステム・プロパティを使用して、checkPermissionが発生する場合のサブジェクトの保護ドメインを評価します。フラグ-Djps.combiner.optimize.lazyeval=trueを設定すると、Java認可パフォーマンスを改善できます。

-Djps.policystore.hybrid.mode=true

True

True

False

このハイブリッド・モード・プロパティを使用して、SUN java.security.PolicyからOPSS Javaポリシー・プロバイダへの遷移を促進します。

OPSS Java Policy Providerでは、java.policysystem-jazn-data.xmlの両方から読取りが実行されます。混合モードは、WebLogic Serverの起動時にシステム・プロパティjps.policystore.hybrid.modefalseに設定することで無効にできます。-Djps.policystore.hybrid.mode=falseを設定すると、実行時のオーバーヘッドを削減できます。

-Djps.authz=ACC

ACC

ACC

SM

コールをJDK APIのAccessController.checkPermissionに委任します。こうすると、実行時またはデバッグ中のパフォーマンスへの影響を軽減できます。

ACC: AccessController.checkPermissionに呼出しを委任します。

SM: SecurityManagerが設定されている場合、SecurityManagerに呼出しを委任します。

OPSS PDPサービス・チューニング・パラメータ

表8-2に、ポリシー・ストアのOPSSチューニング・パラメータを示します。

表8-2 OPSS PDPサービス・チューニング・パラメータ

パラメータ デフォルト値 有効な値 ノート

oracle.security.jps.policystore.rolemember.cache.type

STATIC

STATICSOFTWEAK

このパラメータには、ロール・メンバーのキャッシュ・タイプを指定します。Java EEアプリケーションでのみ有効です。

有効な値:

  • STATIC: キャッシュ・オブジェクトは静的にキャッシュされ、FIFOなど、適用されたキャッシュ戦略に応じてのみ明示的にクリーンアップされます。ガベージ・コレクタでは、このタイプのキャッシュはクリーンアップされません。

  • SOFT: メモリーが不足している場合、このタイプのキャッシュのクリーンアップはガベージ・コレクタに依存します。

  • WEAK: このタイプのキャッシュの動作は、タイプSOFTのキャッシュとよく似ていますが、ガベージ・コレクタによってより頻繁にクリーンアップされます。

最適なパフォーマンスを確保するために、デフォルト値のままにすることを検討してください。

oracle.security.jps.policystore.rolemember.cache.strategy

FIFO

FIFO

NONE

ロール・メンバーのキャッシュで使用する戦略のタイプ。Java EEアプリケーションでのみ有効です。

有効な値:

  • FIFO: キャッシュでは、先入れ先出し戦略が実装されます。

  • NONE: リフレッシュまたは再起動が実行されるまで、キャッシュ内のエントリはすべて増大します。キャッシュのサイズを制御することはできません。使用はお薦めできませんが、ポリシーのフットプリントがきわめて小さい場合には効率的です。

最適なパフォーマンスを確保するために、デフォルト値のままにすることを検討してください。

oracle.security.jps.policystore.rolemember.cache.size

1000

 

ロール・メンバーのキャッシュのサイズ。参照するロールは、エンタープライズ・ロール(グループ)です。最初にIDストアのグループ数を確認できます。次に、パフォーマンス要件に基づいて、この数値をフル・キャッシュ・シナリオのグループ数に設定できます。または、部分グループ・キャッシュ・シナリオの特定の比率のグループ数に変更できます。

oracle.security.jps.policystore.policy.lazy.load.enable

True

True

False

ポリシーの遅延ロードを有効または無効にします。このパラメータをFalseに設定すると、特に大きいポリシー・ストアでサーバーの初回の起動に時間がかかります。起動時間を短縮する場合、推奨値はTrueです。

oracle.security.jps.policystore.policy.cache.strategy

PERMISSION_FIFO

PERMISSION_FIFO

NONE

パーミッションのキャッシュで使用する戦略のタイプ。Java EEアプリケーションでのみ有効です。

有効な値:

  • PERMISSION_FIFO: キャッシュでは、先入れ先出し戦略が実装されます。

  • NONE: リフレッシュまたは再起動が実行されるまで、キャッシュにあるすべてのエントリは増大し続けます。キャッシュのサイズを制御することはできません。使用はお薦めできませんが、ポリシーのフットプリントが小さい場合には効率的です。

最適なパフォーマンスを確保するために、デフォルト値を使用することを検討してください。

oracle.security.jps.policystore.policy.cache.size

1000

 

パーミッションのキャッシュのサイズ。すべてのポリシーをキャッシュする場合、この値を付与の合計数に設定できます。

oracle.security.jps.policystore.cache.updatable

True

True

False

このプロパティは、リフレッシュを有効にする目的で使用します。最適なパフォーマンスを確保するために、デフォルト値のままにすることを検討してください。

oracle.security.jps.policystore.refresh.enable

True

True

False

このプロパティは、リフレッシュを有効にする目的で使用します。パフォーマンスを確保するために、デフォルト値のままにすることを検討してください。

oracle.security.jps.policystore.refresh.purge.timeout

43200000

 

ポリシー・ストアがリフレッシュされるまでの時間(ミリ秒)。最適なパフォーマンスを確保するために、デフォルト値のままにすることを検討してください。

oracle.security.jps.ldap.policystore.refresh.interval

600000 (10分)

 

ポリシー・ストアで変更がポーリングされる間隔(ミリ秒)。最適なパフォーマンスを確保するために、デフォルト値のままにすることを検討してください。このプロパティは、Java EEおよびJ2SEアプリケーションで有効です。

oracle.security.jps.policystore.rolemember.cache.warmup.enable

False

True

False

このプロパティによって、ApplicationRoleメンバーシップ・キャッシュの作成方法が制御されます。Trueに設定すると、キャッシュはサーバーの起動時に作成されます。それ以外の場合は、必要に応じて作成されます(遅延ロード)。

ユーザーおよびグループの数がアプリケーション・ロールの数を上回っている場合はTrueに設定します。それ以外の場合、つまりアプリケーション・ロールの数が多い場合はFalseに設定します。

Oracle Web Services Securityのチューニング

Oracle Web Services Securityは、XMLベースのメッセージを使用してWebサービスとやり取りするための認可および認証のフレームワークを提供します。Webサービスのパフォーマンスには、影響を与えるいくつかの要因があります。

適切なポリシーの選択

Oracle Web Services Securityでは多くのポリシーがサポートされていますので、デプロイメントのセキュリティ・ニーズに基づいて適切なポリシーを実装する必要があります。追加するセキュリティ・ポリシーはそれぞれパフォーマンスに影響を与える可能性があるため、パフォーマンスを十分に考慮してください。たとえば、トランスポート・レベルのセキュリティ(SSL)は、アプリケーション・レベルのセキュリティより拘束ですが、トランスポート・レベルのセキュリティは多段階トランザクションで脆弱な場合があります。アプリケーション・レベルのセキュリティの方がパフォーマンスへの影響は大きいものの、エンドツーエンドのセキュリティを実現できます。

デプロイメントに必要なセキュリティ・ポリシーを決定するには、Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理使用する事前定義済ポリシーの決定に関する項を参照してください。

ポリシー・マネージャ

データベースベースのポリシー強制を使用する際には、パフォーマンスへの影響がつきものです。データベース・ポリシーの強制を選択した場合、エージェントからデータベースへのポーリングの頻度を慎重に検討する必要があります。

SOAPメッセージを記録するためのログ・アサーションの構成

デフォルト・ポリシーのリクエスト・パイプラインおよびレスポンス・パイプラインには、ポリシー強制ポイント(PEP)でSOAPメッセージをデータベースまたはコンポーネント別ローカル・ファイルに記録するログ・アサーションが含まれています。ロギング・レベルはパフォーマンスに影響を与えることがあります。パフォーマンスの問題を回避するには、デプロイメントに適した最低のロギング・レベルを使用することを検討してください。

ログ・ステップ内に構成できるロギング・レベルには次のものがあります。

  • ヘッダー: SOAPヘッダーのみを記録します。

  • 本文: メッセージの内容(本文)のみが記録されます。

  • エンベロープ: SOAPエンベロープ全体(ヘッダーと本文の両方を含む)が記録されます。添付は記録されません。

  • すべて: メッセージ全体が記録されます。これには、SOAPヘッダー、本文、およびすべての添付(SOAPメッセージそのものの外部に存在するURLなど)が含まれます。

ノート:

通常、ログ・ファイルがトポロジ的に強制コンポーネントに近い場所に配置される場合、システム・パフォーマンスが向上します。可能であれば、著しい分散環境では複数の分散ログを使用してください。

接続プーリングの構成

com.sun.jndi.ldap.connect.pool環境プロパティを使用して、コンテキスト・インスタンスが接続プーリングを使用するように要求した場合、使用される接続はプールされることもありますが、プールされないこともあります。デフォルト・ルールでは、単純な認証を使用する、または認証を使用しないプレーン(非SSL)接続のプールを許可します。このデフォルトは、システム・プロパティを使用して、SSL接続およびDIGEST-MD5認証タイプを含むように変更できます。プレーン接続とSSL接続の両方のプールを許可するには、次に示すように、com.sun.jndi.ldap.connect.pool.protocolシステム・プロパティに文字列plain sslを設定します。

"-Dcom.sun.jndi.ldap.connect.pool.protocol="plain ssl"

Webサービスのパフォーマンスの監視

Oracle Fusion Middleware Controlの「Webサービス」ホームページで、次のOracle Web Servicesのパフォーマンスをモニターできます。

  • 次のエンドポイント有効メトリック

    • ポリシー参照ステータス

    • 違反の合計

    • セキュリティ違反

  • 完了した呼出し

  • レスポンス時間(秒)

  • 次のポリシー違反

    • 違反の合計

    • 認証違反

    • 認可違反

    • 機密保持違反

    • 整合性違反

  • フォルトの合計

Oracle Fusion Middlewareコンポーネントのモニタリングの概要は、を参照してください。

Oracle Fusion Middleware Controlを使用したOracle Webサービスのモニタリングの詳細は、Webサービスの管理パフォーマンスのモニタリング、監査およびチューニングの概要に関する項を参照してください。