4 複数のテナントに対するサービスの保護
OWSMは、マルチテナント・システムのポリシー強制をサポートしています。OWSMは、テナントに固有の複数のデータ・ソースを処理できます。OWSMでは、GPAによって、テナント固有のセキュリティが強制されます。
この章の構成は、次のとおりです。
4.1 ユース・ケース: 複数のテナント向けのRESTful Webサービスの保護
RESTful Webサービスを開発し、テナントのプロビジョニングとテナント固有のGPAの強制により、複数のテナントに対してそのRESTful Webサービスを保護できます。
- ユース・ケース
-
複数のテナント向けのRESTful Webサービスを保護します。
- 実装サマリー
-
RESTful Webサービスを開発し、テナントのプロビジョニングとテナント固有のGPAの強制により、2つのテナント(tenant1およびtenant2)に対してそのRESTful Webサービスを保護します。
- コンポーネント
-
-
Oracle WebLogic Server
-
Oracle Fusion Middleware
-
Oracle Web Services Manager(OWSM)
-
- 必須ドキュメント
-
このユース・ケースを完了するには、次のドキュメント・リソースを参照してください。
このユース・ケースには、次のステップが含まれています。
-
WebLogicドメインを作成して、テンプレートをインストールします。
-
テナントのプロビジョニング: テナントに対するデータベース・スキーマとデータ・ソースを作成します。
-
テナントに対するGPAを作成します。
-
実行時に特定のテナントに対するポリシーを強制します。
4.2 複数のテナント向けのWebサービスの実装 - 前提条件
複数のテナント向けのWebサービスを実装する前に、製品コンポーネントのダウンロードとインストールを行い、WebLogicドメインを構成して、リモート・サーバーを起動し、Oracle Enterprise Manager Fusion Middleware ControlおよびOracle WebLogic Serverリモート・コンソールへのアクセス権を取得します。
始める前に、次のことを確認してください。
-
Oracle Fusion Middleware (OWSMを含む)をダウンロードしてインストールします。
詳細は、Oracle Fusion MiddlewareのインストールのプランニングのOracle Fusion Middlewareインストールの準備に関する項を参照してください。
Oracle Fusion Middleware製品の検索やダウンロードの詳細は、OTNでOracle Fusion Middlewareダウンロード、インストール、構成のREADMEファイルを参照してください。
4.3 WebLogicドメインの作成およびテンプレートのインストール
OWSMテンプレートoracle.wsmpm_cloud_template.jar
またはoracle.wsmpm_cloud_file_template.jar
を使用して、WebLogicドメインを作成します。
-
oracle.wsmpm_cloud_template.jar: このテンプレートでは、ドメインの作成中にMDS dbスキーマが必要になります。
-
oracle.wsmpm_cloud_file_template.jar: これは、ファイル・ベースのテンプレートで、ドメインの作成中にMDS dbスキーマは必要ありません。この場合、ドメイン・ホーム内にOWSMシード・ドキュメントが作成されます。このテンプレートを推奨します。
完全な手順は、『構成ウィザードによるWebLogicドメインの作成』のWebLogicドメインの作成に関する項を参照してください。
前述のドメイン・テンプレートを作成する手順の詳細は、『WebLogic Scripting Toolの理解』の「ドメイン・テンプレートの作成および使用(オフライン)」を参照してください
4.4 テナントのプロビジョニング
特定のテナントのdbまたはpdbにMDSスキーマをインストールします。次に、作成したMDSスキーマのWebLogicドメインに、テナント固有のデータ・ソースを作成します。
この章の構成は、次のとおりです。
4.4.1 RCUを使用したデータベース・スキーマの作成
RCUを使用してデータベース・スキーマを作成します。RCUは、LinuxおよびWindowsプラットフォームでのみ使用できます。UNIXでサポートされるデータベースの場合はインストールにLinux RCUを使用し、Windowsでサポートされるデータベースの場合はWindows RCUを使用します。
ノート:
操作を最小限にするためにコマンド・ラインから—silent
モードでRCUを実行するには、『リポジトリ作成ユーティリティによるスキーマの作成』の-silentコマンドの使用に関する項を参照してください。
次の手順を実行して、tenant1およびtenant2にデータベース・スキーマを作成します。
たとえば、tenant1のテナントにデータベース・スキーマを作成するには、次のようにします:
4.4.2 テナントのデータ・ソースの作成
Oracle WebLogic Serverリモート・コンソールを使用して、使用しているアプリケーションのWebLogic Serverインスタンス内にJDBCデータ・ソースを設定します。
次の手順を実行して、tenant1およびtenant2の2つのテナントにデータ・ソースを作成します
tenant1など、特定のテナントのデータ・ソースを構成するには、次のようにします:
- Oracle WebLogic Serverリモート・コンソールにログインします。
- 「WebLogic Serverリモート・コンソール」ページで、「JDBC」→「データ・ソース」を選択します。「新規」をクリックします。
- JDBCデータ・ソースのプロパティ・ページで、次の作業を行います。
- 「名前」フィールドに、一意のJDBCデータ・ソースの名前を入力します。たとえば、
mds-owsm-tenant1
です。 - 「JNDI」フィールドで、接続の名前を入力します。たとえば、
mds/owsm/tenant1
です。 - 「データベースのタイプ」には、
「Oracle」
を選択します。 - 「データベース・ドライバ」に、
Oracleドライバ(thin)
を選択します
- 「名前」フィールドに、一意のJDBCデータ・ソースの名前を入力します。たとえば、
- 「次へ」をクリックします。
- 「トランザクション・オプション」ページで、デフォルトのオプションをそのまま使用し、「次へ」をクリックします。
- 「接続プロパティ」ページで次の作業を行います:
- データベース名にOracle SIDを入力します。たとえば、rdbms.example.comです。
- ホスト名にデータベースのマシン名を入力します。たとえば、host.example.comです
- データベースにアクセスするために使用するポート番号を入力します。
TENANT1_MDS
など、先ほど作成したスキーマ名を、ユーザー名として入力します。データベースのスキーマ・パスワードを入力します。「次へ」をクリックします。
- 「データベース接続のテスト」ページで、「構成のテスト」をクリックして接続をテストします。
- 「ターゲットの選択」ページで、JDBCデータ・ソースをデプロイするサーバーを選択します。
- 「終了」をクリックします。
4.4.3 テナントのデータ・ソースの設定
汎用データ・ソースは、実際のデータベース接続を、その基礎となる接続プールとともに管理するデータ・ソースです。サービス・インスタンスのプロビジョニングの一環として、PODで新しいサービス・インスタンスが作成される場合は、汎用データ・ソースが作成されます。すべての汎用データ・ソースが作成されたら、プロキシ・データソースの切替えプロパティを更新します。
切替えプロパティでは、次の形式を使用します。
serviceInstanceId1=datasourceJNDIName1;serviceInstanceId2=datasourceJNDIName2;
例: serviceInstance1=mds/owsm/tenant1;serviceInstance2=mds/owsm/tenant2;
WebLogic Serverの切替えプロパティの更新
汎用データ・ソースは、WLSTスクリプト・シェルまたはJMXを使用して作成できます。データ・ソースが作成されたら、次のステップに従い、WLSTを使用してプロキシ・データ・ソースの切替えプロパティを更新します。
-
新しいスクリプトUpdateSwitchingPropertiesProxyDatasource.pyをローカル・サービス・インスタンス・プロビジョニングに追加します。
-
次のコード・ブロックに記述されているスクリプトをコピーして、次の変更を行います:
-
ユーザー名とパスワードを、自分のWebLogic Server資格証明に置き換えて、WebLogic管理サーバー資格証明を更新します: connect("weblogic","password","t3://"+example+":7001")。
-
updatePropsによって指定されるサービス・インスタンスIDと基礎となるデータ・ソースのJNDI名を変更して、プロキシ・データソースの切替えプロパティを更新します。
updatedProps = switchingProps + ';serviceInstance1=jdbc/instancejndi'
""" Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. This script updates Switching Properties of a Proxy JDBC Datasource. """ import sys, socket import os hostname = socket.gethostname() connect("weblogic","password","t3://"+hostname+":7001") edit() startEdit() cd ('/JDBCSystemResources/ProxyDS') jdbcResource = cmo.getJDBCResource() jdbcDataSourceParams = jdbcResource.getJDBCDataSourceParams() switchingProps = jdbcDataSourceParams.getProxySwitchingProperties() if (switchingProps != None): updatedProps = switchingProps + ';serviceInstance1=jdbc/instancejndi' else: updatedProps = 'serviceInstance1=jdbc/instancejndi' jdbcDataSourceParams.setProxySwitchingProperties(updatedProps) save() activate()
-
-
次のコマンドを実行します。
java weblogic.WLST -i UpdateSwitchingPropertiesProxyDatasource .py
JavaSEアプリケーションの切替えプロパティの更新
データ・ソースが作成されたら、次のステップに従って、プロキシ・データ・ソースの切替えプロパティを更新します。
-
context.xmlに対応するアプリケーション・サーバーを編集し、既存の値に';serviceInstanceId=jdbc/instancejndi'を追加して、switchingPropertiesの値を更新します。
例:
switchingProperties="1e8b59b2=jdbc/mds/owsm/tenant1;2efba34c=jdbc/mds/owsm/tenant2"
4.5 OWSMセキュリティ・アーティファクトの作成
オンラインのWLSTコマンドまたはREST APIを使用して、OWSMセキュリティ・アーティファクトを作成できます。
次の項を参照してください。
4.5.1 WLSTを使用したOWSMセキュリティ・アーティファクトの作成
オンラインのWLSTコマンドを使用して、OWSMセキュリティ・アーティファクトを作成できます。
tenant1およびtenant2のセキュリティ・アーティファクトを作成します。
oracle/multi_token_rest_service_policy
ポリシーを使用してtenant1のセキュリティ・アーティファクトを作成するには、次のWLSTコマンドを順に実行します:
connectWSMRest('weblogic','password','example.com:22001') startWSMTenantContext('tenant1') beginWSMSession() createWSMPolicySet('myPolicySet','rest-resource','Domain("*")') attachWSMPolicy("oracle/multi_token_rest_service_policy") commitWSMSession() listWSMPolicySets() endWSMTenantContext()
ノート:
グローバル・ポリシー・セット、トークン発行者信頼、構成カスタマイズなどのようなOWSMセキュリティ・アーティファクトを作成する場合は、まずconnectWSMRest()コマンドを実行して、次にstartWSMTenantContext()コマンドとendWSMTenantContext()コマンドの間に対応するOWSMコマンドをラップします。oracle/http_jwt_token_service_policy
ポリシーを使用してtenant2のセキュリティ・アーティファクトを作成するには、次のWLSTコマンドを順に実行します:
connectWSMRest('weblogic','password','example.com:22001') startWSMTenantContext('tenant2') beginWSMSession() createWSMPolicySet('myPolicySet','rest-resource','Domain("*")') attachWSMPolicy("oracle/http_jwt_token_service_policy") commitWSMSession() listWSMPolicySets() endWSMTenantContext()
4.5.2 REST APIを使用したOWSMセキュリティ・アーティファクトの作成
OWSMアーティファクトを作成するためにRESTコマンドを実行しているときに、X-RESOURCE-IDENTITY-SERVICE-GUIDヘッダーにテナントIDの値を渡します。
tenant1のOWSMポリシー・セットを作成するREST API:
curl -i -H "X-RESOURCE-IDENTITY-SERVICE-GUID:tenant1" -H "Content-Type:application/json" -u username:password -X POST -d @- http://example.com:22001/wsm-pmrest/v2/policyset [{ "name": "myPolicySet", "type": "rest-resource", "scope": "Domain('*')", "policyReferences":[{ "uri":"oracle/multi_token_rest_service_policy", "status":"enabled" } ] }]
tenant2のOWSMポリシー・セットを作成するREST API:
curl -i -H "X-RESOURCE-IDENTITY-SERVICE-GUID:tenant2" -H "Content-Type:application/json" -u username:password -X POST -d @- http://example.com:22001/wsm-pmrest/v2/policyset [{ "name": "myPolicySet", "type": "rest-resource", "scope": "Domain('*')", "policyReferences":[{ "uri":"oracle/http_jwt_token_service_policy", "status":"enabled" } ] }]