RESTベースのIdentity Awareアプリケーションと接続するためのOCI Serverless Fnの設定
Generic REST Orchestrated SystemのOCI関数の使用方法
Oracle Access Governanceでは、REST API統合にOCI Functionsを活用しています。作成する各Generic REST Orchestrated Systemは、リクエストを処理してレスポンスを生成するロジックを含むOCI関数に関連付けられます。Oracle Access Governanceによってトリガーされると、データ・リコンシリエーションおよびプロビジョニング操作のために管理対象システムのREST APIがコールされます。
OCI関数の使用方法の詳細は、Oracle Cloud Infrastructure Functionsを参照してください。
OCI関数を有効にするためのテナンシの構成
OCI Functionsを使用してファンクションを作成およびデプロイする前に、Oracle Cloud Infrastructureリソースを作成してこれをサポートする必要があります。作成する必要があるリソースには、ユーザー・アカウント、ユーザー・アカウントが属するグループ、コンパートメント、仮想クラウド・ネットワーク(VCN)、ボールトとシークレット、およびグループ(およびそのグループに属するユーザー・アカウント)にファンクション関連リソースへのアクセス権を付与するポリシーが含まれます。適切なリソースがすでに存在する場合は、新しいリソースを作成する必要はありません。
コンパートメントの作成
- Oracle Cloud Infrastructure Consoleにテナンシ管理者でサインオンします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」→「アイデンティティ」→「コンパートメント」を選択します。
- 「コンパートメントの作成」を選択し、コンパートメントを追加します(たとえば、ocifn_compartment)。コンパートメントの作成の詳細は、コンパートメントを作成するにはを参照してください
所有するコンパートメントを作成します:
- ネットワーク・リソース
- 機能関連リソース
VCNとサブネットを作成します
- Oracle Cloud Infrastructure Consoleにテナンシ管理者でサインオンします。
- ナビゲーションメニューを開き、Networking→Virtual cloud networksを選択します。
- VCNウィザードの起動を選択して、新しいVCNを作成します。
- ダイアログで、「インターネット接続性を持つVCNの作成」を選択して、「VCNウィザードの起動」をクリックします。
- ウィザードで、次の詳細を入力します。
- VCN名: VCN名(ocifn_vcnなど)を入力します。
- コンパートメント: VCNリソースが作成されるコンパートメント(ocifn_compartmentなど)を入力します。
- 「次」をクリックして、「作成」をクリックして、VCNおよび関連するネットワーク・リソースを作成します。
VCNを作成する際のすべてのオプションの詳細は、OCI関数で使用するVCNおよびサブネットの作成を参照してください。
OCI Vaultおよびシークレットの作成
クライアント資格証明を格納する適切なボールトがない場合:
- Oracle Cloud Infrastructure Consoleにテナンシ管理者でサインオンします。
- ナビゲーション・メニューを開き、「Identity & Security」→「Key Management & Secret Management」を選択します
- 「ボールトの作成」をクリックします。
- Vaultが作成されるコンパートメントを選択し、Vaultに名前を付けます。「ボールトの作成」をクリックします。
- 作成したVaultを開き、「キーの作成」をクリックします。Vaultを作成したのと同じコンパートメントにキーを作成します。キーに名前を付け、「キーの作成」をクリックします。
- 「リソース」メニューから「シークレット」を選択します。「シークレットの作成」をクリックします。
- 「シークレットの作成」ページで、コンパートメント、名前および説明の詳細を追加します。「暗号化キー」ドロップダウン・リストから作成したキーを選択します。「手動シークレット生成」オプションを選択し、クライアント・コードとクライアント・シークレットを次のいずれかの形式で「シークレット・コンテンツ」フィールドに入力します。
-
OAuthベースの認可
OAuthベースの認可用の認可トークンを作成するサンプル・コードについては、OAuth Authorization - Sample Token Creation Codeを参照してください。
{ "clientCode": "69b48365-14e2-430a-bd75-171f89c158fa", "clientSecret": "*/Z9g:gM*SWWLLCGkQhQg2hdWelAZD82" } -
基本認証
.
{ "username": "69b48365-14e2-430a-bd75-171f89c158fa", "password": "*/Z9g:gM*SWWLLCGkQhQg2hdWelAZD82" }
-
OAuthベースの認可
- 「シークレットの作成」を選択して変更を保存します。
作成したシークレットは、リクエスト関数でクライアント・シークレットを渡すために使用できます。作成したシークレットを選択し、シークレットOCIDの値をコピーします。これはocid1.vaultsecret.oc1.iad.dyyyyehdl4ggaawnqt47hfj48ltofzkdg6wy5fjne859jg0のようになります。
<SampleBase>/grc-request-template/src/main/resources/request/applications/<YourApplicationName>/config.yamlファイルを編集し、シークレットおよびリージョンの詳細を追加します。たとえば:secretId: "ocid1.vaultsecret.oc1.iad.dyyyyehdl4ggaawnqt47hfj48ltofzkdg6wy5fjne859jg0"
region: "us-ashburn-1"
OCI Vaultシークレットの詳細は、Vaultシークレットの管理を参照してください。
動的グループの作成または更新
OCI Vaultおよびシークレット・サービスを使用するには、ファンクションが動的グループの一部である必要があります。動的グループの作成方法の詳細は、動的グループの管理の手順に従ってください。
ALL { resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..fdfdfege4om6nat7fue56566556qqvj3eesjqhmjaegeiaxa' }
OCI Vaultおよびシークレットのポリシーの作成
前述のステップで作成した動的グループがテナンシ内のシークレット・ファミリを読み取ることを許可する新しいポリシーを作成します。OCIポリシーの作成の詳細は、ポリシー構文を参照してください
- Oracle Cloud Infrastructure Consoleにテナンシ管理者でサインオンします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」→「アイデンティティ」→「ポリシー」を選択します。
- 「ポリシーの作成」を選択し、ポリシーの名前(ocifn_policyなど)を指定して、テナンシのルート・コンパートメントを選択します。
- 次のようなポリシー・ステートメントを追加します。
Allow dynamic-group <dynamic-group-name> to read secret-family in tenancy
グループおよびサービスのポリシーの作成
- Oracle Cloud Infrastructure Consoleにテナンシ管理者でサインオンします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」→「アイデンティティ」→「ポリシー」を選択します。
- 「ポリシーの作成」を選択し、ポリシーの名前(ocifn_policyなど)を指定して、テナンシのルート・コンパートメントを選択します。
- ポリシー・ビルダーを使用して、「ポリシー・ユース・ケース」リストから「ファンクション」を選択し、「ユーザーによるファンクションおよびアプリケーションの作成、デプロイおよび管理」テンプレートに基づいてポリシーを設定します。
- 前に作成したグループ(ocifn_groupおよびocifn_compartment)を選択します。これにより、次のようなポリシー・ステートメントが提供されます。
Allow group 'Default'/'ocifn_grp' to use cloud-shell in tenancy Allow group 'Default'/'ocifn_grp' to manage repos in compartment ocifn_compartment Allow group 'Default'/'ocifn_grp' to read objectstorage-namespaces in tenancy Allow group 'Default'/'ocifn_grp' to manage logging-family in compartment ocifn_compartment Allow group 'Default'/'ocifn_grp' to read metrics in compartment ocifn_compartment Allow group 'Default'/'ocifn_grp' to manage functions-family in compartment ocifn_compartment Allow group 'Default'/'ocifn_grp' to use virtual-network-family in compartment ocifn_compartment Allow group 'Default'/'ocifn_grp' to use apm-domains in compartment ocifn_compartment Allow group 'Default'/'ocifn_grp' to read vaults in compartment ocifn_compartment Allow group 'Default'/'ocifn_grp' to use keys in compartment ocifn_compartment Allow service faas to use apm-domains in compartment ocifn_compartment Allow service faas to read repos in tenancy where request.operation='ListContainerImageSignatures' Allow service faas to {KEY_READ} in compartment ocifn_compartment where request.operation='GetKeyVersion' Allow service faas to {KEY_VERIFY} in compartment ocifn_compartment where request.operation='Verify'
OCIファンクションのポリシーの作成の詳細は、ネットワークおよびファンクション関連リソースへのアクセスの制御するポリシーの作成を参照してください
OCI関数をグループ化するアプリケーションの作成
OCI関数では、アプリケーションはファンクションの論理グループになります。アプリケーションに指定するプロパティによって、そのアプリケーション内のすべてのファンクションのリソース割当ておよび構成が決まります。OCI Functionsでファンクションを作成するには、アプリケーション内にファンクションを作成する必要があるため、少なくとも1つのアプリケーションが存在している必要があります。
- ファンクション開発者としてOracle Cloud Infrastructure Consoleにサインオンします。
- ナビゲーション・メニューを開き、「開発者サービス」→「機能」→「アプリケーション」を選択します。
- 汎用RESTオーケストレート済システム関数に使用するコンパートメントを選択します。
- 「アプリケーションの作成」をクリックします。
- アプリケーションの名前(agcs-generic-rest-connectorなど)を追加します。ファンクションをこのアプリケーションにデプロイし、ファンクションの起動時にこのアプリケーションを指定します。
- ファンクションを実行するVCNおよびサブネットを選択します。
- 「作成」をクリックします。
OCI関数を使用したアプリケーションの作成の詳細は、アプリケーションの作成を参照してください。
OCI関数を開発するための環境の設定
OCI Functionsを作成およびデプロイするには、開発環境をインストールおよび設定する必要があります。
- Dockerのインストールと起動
- API署名キーおよびOCIプロファイルの設定
- Fn Projectコマンドライン・インタフェースのインストール(CLI)
- Fn Project CLIコンテキスト・プロバイダの設定
- 完全なFn Project CLIコンテキスト構成
- 認証トークンの生成
- レジストリにログインします
開発環境を設定したら、Generic REST Orchestrated Systemのファンクションの開発およびデプロイを開始できます。
OCIへのファンクションの開発とデプロイ
Generic REST Orchestrated Systemをデプロイするには、RESTを使用してOracle Access Governanceと統合するアイデンティティ対応システムに接続できるOCI関数を開発およびデプロイする必要があります。
Generic REST Orchestrated Systemで使用するOCI関数を開発およびデプロイするには:
サンプル実装の設定
OCI Functionsの開発を支援するために、Generic REST Orchestrated Systemにサンプル実装が提供されています。この例をダウンロードするには、Select Systemの手順に従ってください。
詳細は、サンプル実装を解凍したディレクトリを
<SampleBase>と呼びます。これを使用して、前述のファイルを検索します。例:サンプル実装をディレクトリに解凍すると(たとえば、/myagfunctions)、ファイル<SampleBase>/grc-schema-template/src/main/resources/schema/config.yamlは/myagfunctions/grc-schema-template/src/main/resources/schema/config.yamlにあります。
- idm-agcs-serverless-getting-started-sample: これは、最小限のコードを持つ基本的でわかりやすいサンプルであり、関数の動作を示します。このユース・ケースは、単一アプリケーションをGeneric RESTコネクタと統合し、構成を最小限に抑える必要があるお客様に最適です。初期設定は、Oracle Identity Cloud Service (IDCS)アプリケーションを使用します。このファンクションを構成およびデプロイする詳細なステップは、このディレクトリ内の`README.md`ファイルを参照してください。
- idm-agcs-serverless-IDCS-application-sample: このサンプルでは、最小限の構成でIDCSアプリケーションの例に焦点を当てています。この機能には、将来、さらにアプリケーションを追加するフレームワークが含まれています。構成およびデプロイメントのステップの詳細は、このディレクトリにある`README.md`ファイルを参照してください。
- idm-agcs-serverless-azuread-application-sample: このサンプルは、最小限の構成でAzureADアプリケーションの例を必要とするお客様を対象としています。この機能には、将来、さらにアプリケーションを追加するフレームワークが含まれています。このファンクションを構成およびデプロイする詳細なステップは、このディレクトリ内の`README.md`ファイルで確認できます。
- idm-agcs-serverless-multi-application-sample: このサンプルは、最小限の構成でIDCSとAzureADアプリケーションの両方のサンプルを必要とするお客様を対象としています。この機能には、将来、さらにアプリケーションを追加するフレームワークが含まれています。このディレクトリの`README.md`ファイルには、このファンクションを構成およびデプロイするために必要なすべてのステップが用意されています。
アプリケーションのファンクションの作成
参照テンプレートを参照し、次に定義する関数をアプリケーションに固有の値で構成することで、独自のRESTベースのアイデンティティ対応システムの関数を作成します。
| アイテム | 説明 |
|---|---|
| 入力 | オーケストレート済システム名 |
| 構成 |
構成済カスタムRESTアイデンティティ対応システムのリスト: たとえば、サンプル実装から:
カスタムRESTアイデンティティ対応システムにリンクされたオーケストレート済システムのリスト: たとえば、サンプル実装から:
|
| 出力 |
次のいずれかのエンティティ・タイプを含む1つ以上のエンティティ・スキーマを含むJSONスキーマ・テンプレート・ドキュメント。
サンプル実装の例は、「スキーマ出力」を参照してください。 |
| アイテム | 説明 |
|---|---|
| 入力 |
|
| 構成 |
構成済カスタムRESTアイデンティティ対応システムのリスト: たとえば、サンプル実装から:
カスタムRESTアイデンティティ対応システムにリンクされたオーケストレート済システムのリスト: たとえば、サンプル実装から:
|
| 出力 |
定義済エンティティおよび操作用のJSONリクエスト・テンプレート・ドキュメント:
エンティティ
操作
サンプル実装の例については、Request Outputを参照してください。 |
| アイテム | 説明 |
|---|---|
| 入力 |
|
| 構成 |
構成済カスタムRESTアイデンティティ対応システムのリスト: たとえば、サンプル実装から:
カスタムRESTアイデンティティ対応システムにリンクされたオーケストレート済システムのリスト: たとえば、サンプル実装から:
|
| 出力 |
定義済エンティティおよび操作用のJSONレスポンス・テンプレート・ドキュメント:
エンティティ
操作
サンプル実装の例については、レスポンス出力を参照してください。 |
| アイテム | 説明 |
|---|---|
| 入力 | オーケストレート済システム名 |
| 構成 |
構成済カスタムRESTアイデンティティ対応システムのリスト: たとえば、サンプル実装から:
カスタムRESTアイデンティティ対応アプリケーションにリンクされた編成済システムのリスト: たとえば、サンプル実装から:
|
| 出力 |
JSONテスト・リクエストのテンプレート・ドキュメント: たとえば、サンプル実装から:
|
テストインフラモジュールガイド
リクエスト・テンプレートとレスポンス・テンプレートは複雑で、開発中にエラーが発生する可能性があります。構成されているすべてのリクエスト・テンプレートおよびレスポンス・テンプレートを識別して検証し、ビルド時間自体で正確性を保つことが重要です。
この課題に対処するために、grc-test-infraモジュールが導入されました。このモジュールには、構成された各リクエストおよびレスポンス・テンプレートに対応するテストが含まれています。これらのテストは、ターゲット・アプリケーションのREST APIに対して行われたリクエストと受信したレスポンスを検証することを目的としています。これを実現するために、テストでは汎用リクエスト・プロセッサやレスポンス・プロセッサなどのユーティリティを利用し、モジュール内で開発されたREST APIコールを処理できます。基本的に、ターゲット・アプリケーションのエンドポイントと内部的に相互作用し、構成されたレスポンス・テンプレートに基づいてレスポンスを検証します。
- 次に示す例に従って、テストを開発します。grc-test-infraサンプルテスト
package com.oracle.idm.agcs.grc.fn.test.infra; public class RequestResponseTemplateValidationTest { public void validateSearchUserAsIdentityRequestResponseTemplate() throws IOException, URISyntaxException, InterruptedException { // Get the configured Request template by passing the connectedSystem Name, entity name, and operation RequestTemplateOutput requestTemplate = getRequestTemplateOutput(connectedSystemName, UserAsIdentityEntity, Operation.SEARCH); // Get the configured Response template by passing the connectedSystem Name, entity name, and operation ResponseTemplateOutput responseTemplate = getResponseTemplateOutput(connectedSystemName, UserAsIdentityEntity, Operation.SEARCH); // Pass the required attributes in the request template by putting them in the attribute map HashMap<String, Object> attributesMap = new HashMap<>(); // Call the generic utility method to validate request and response template Map<String, Object> lastRecord = processAndValidateRequestAndResponseTemplate(requestTemplate, responseTemplate, attributesMap); // Retrieve the necessary data from the response for further processing userAsIdentityUid = ((ArrayList<String>) lastRecord.get("uid")).get(0); } }- テストの最初の行は、connectedSystemの名前、エンティティ名および操作を渡して、構成されたリクエスト・テンプレートを取得することです。
- 2行目は、同様のパラメータを使用して構成済のレスポンス・テンプレートを取得します。
- ユーザーは、属性マップに必須属性を配置して、要求テンプレートで必須属性を渡す必要があります。
- 次に、ユーザーは汎用ユーティリティ・メソッドprocessAndValidateRequestAndResponseTemplateをコールするだけで、APIを起動し、そのレスポンスを構成済のレスポンス・テンプレートにマップすることで、リクエスト・テンプレートとレスポンス・テンプレートの両方を内部的に検証して正確性を確保できます。
- 構成されたリクエスト・テンプレートおよびレスポンス・テンプレートが正しく構成されている場合、テストは成功します。正しく構成されていない場合は失敗し、ユーザーは失敗理由を確認してテンプレートを適切に修正できます。
サンプル・テスト・ファイルは、次の場所にあるサンプル実装にあります。
<SampleBase>/grc-test-infra/src/test/java/com/oracle/idm/agcs/grc/fn/test/infra/RequestResponseTemplateValidationTest.java - テストを実行する前に、次の前提条件を追加します。
<SampleBase>/grc-test-infra/src/test/resources/configファイルを環境に応じて次の値で更新します。[DEFAULT] user=<<USER>> fingerprint=<<FINGERPRINT>> key_file=<<PEM_FILE_RELATIVE_PATH>> tenancy=<<TENANCY>> region=<<REGION>>- 使用している環境の次の値で
<SampleBase>/grc-test-infra/src/test/resources/config.propertiesファイルを更新します。connectedSystemName=<connectedSystemName> - API署名キーの秘密SSHキー(.pemファイル)を次の場所に追加します。
<SampleBase>/grc-test-infra/src/test/resources/oci_api_key.pem
- 開発したテストを実行し、関数を構築します。
- サンプル実装の
functionsディレクトリに移動します。 - ファンクションのコンパイルおよびパッケージ化
mvn clean package-DisDevMode=true
- サンプル実装の
ファンクションの作成およびデプロイ
- 機能を構築します。
cd <SampleBase> mvn package - OCIにファンクションをデプロイします。各機能に対してステップを実行する必要があります
- grcスキーマ・テンプレート
- grc-requestテンプレート
- grc-responseテンプレート
- grc-testテンプレート
cd <SampleBase>/grc-schema-template fn -v deploy --app <ApplicationName>