ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を完了するときは、これらの値をクラウド環境に固有の値に置き換えます。
Enable OAuth2 Authentication in OCI API Gateway to Call OCI Services using OCI Functions and OCI SDK
イントロダクション
We often need our applications to consume Oracle Cloud Infrastructure (OCI) REST services.コンポーネント間のセキュリティを保証するいくつかの方法があり、アプリケーションがバックエンド・サービスに安全に認証できるようにします。
このタスクは、ネットワークを保護し、既存のサービスにアクセスするためのいくつかの方法があるため、Oracle Cloud内でネイティブです。いくつかの設定だけで完了です。ただし、アプリケーションが追加のセキュリティおよび接続要件を提供する場合があります。この資料のユースケースは、ハイブリッドまたはマルチクラウドのシナリオ(Oracle Cloudに接続されたオンプレミス、または別のクラウドに接続されたOracle Cloud)における非常に一般的なニーズを満たしています。
次のシナリオについて説明します。
-
Application on an on-premises network connected to Oracle Cloud through Fast-Connect/VPN.
-
Application needs to consume an OCI Data Science service.
-
OCI service does not have an authentication mechanism that meets the application consumer’s possibilities.
-
アプリケーションがサービスに安全にアクセスできるようにするには、OAuth2を使用して認証する必要があります。
したがって、チュートリアルでは次の解決策を提供します。
-
OAuth2を介して認証するように、Oracle Identity Cloud Serviceクラウド独自のアイデンティティ・プロバイダを構成します。
-
Configure OCI API Gateway to integrate with Oracle Identity Cloud Service to authenticate via an obtained token.
-
Code an OCI Functions to call an OCI service that allows the use of resource principal (in our example, we will use the Data Science Model Deployment service).
-
グループおよびポリシーを作成して、クラウド・リソースへのアクセスを制限します。
-
Deliver an identity provider that allows you to pass the client ID and secret ID and obtain an authentication token.
-
Deliver a functional OCI API Gateway REST service that authenticates through the obtained token and provides the result of the Data Science service.
ノート: OCI Functionsは、OAuthOCIService-fn.zipからダウンロードできます。
目的
-
Allow an external application to consume REST services with OAuth2 authentication.
-
Provide an OAuth2 authentication service on OCI.
-
Configure OCI API Gateway and OCI Functions to run OCI services via a token.
前提条件
-
An OCI API Gateway instance created and exposed to the internet, see Creating Your First API Gateway In The Oracle Cloud.
-
Network connectivity between OCI API Gateway, OCI Functions, and OCI PaaS resource.
-
VCN/サブネット
-
セキュリティ・リスト
-
NAT Gateway/インターネット・ゲートウェイ
-
Public/Private Networks
-
-
ナレッジ:
-
OCI関数
-
OCI REST API to code a call for the OCI service
-
タスク1: Oracle Identity Cloud ServiceでのOAuth2の構成
-
Obtain the OCI API Gateway parameters: Let’s start to configure the OAuth2 mechanism.Oracle CloudからOracle Identity Cloud Serviceをアイデンティティ・プロバイダとして構成することで、OCI API Gatewayインスタンスをアイデンティティ・プロバイダに統合する必要があります。
Go to the OCI API Gateway instance and copy Hostname.この情報は、次のステップでOracle Identity Cloud Serviceリソース・サーバー構成で使用されます。
-
リソース・アプリケーションの作成: アプリケーションのOAuth2認可プロバイダを作成する必要があります。Oracle CloudのOracle Identity Cloud Serviceで実現します。
-
In the OCI Console, go to Identity & Security and select Federation.
-
OracleIdentityCloudSeviceをクリックします。
-
Oracle Identity Cloud Serviceインスタンスのリンクをクリックします。
-
2つのアプリケーションを作成します。「アプリケーションとサービス」をクリックします。
-
「アプリケーション」で、「追加」をクリックします。
-
「機密アプリケーション」を選択して、リソース・サーバーの構成を開始します。
-
最初のアプリケーションを構成します。リソース・サーバー・アプリケーションに「名前」を入力し、「次へ」をクリックします。
-
「後にスキップ」をクリックします。リソースのみを構成する必要があります。
-
Enter your OCI API Gateway hostname obtained in the Step 1.
-
「スコープの追加」をクリックし、スコープ情報を入力します。
-
スコープ情報を確認し、「次へ」を2回クリックして「終了」をクリックします。
-
「アクティブ化」をクリックして、アプリケーションをアクティブ化します。
-
-
クライアント・アプリケーションの作成。
-
「アプリケーション」で、「追加」をクリックします。
-
「機密アプリケーション」を選択して、リソース・サーバーの構成を開始します。
-
アプリケーションの「名前」を入力し、「次へ」をクリックします。
-
クライアント・アプリケーションの構成を有効にするには、「今すぐアプリケーションをクライアントとして構成します」を選択します。Select Client Credentials, JWT Assertion and On behalf of.
-
画面をスクロール・ダウンし、「スコープの追加」をクリックします。
-
前に作成したリソース・アプリケーション(このタスクでは
oauth_resource_server
)を検索し、「追加」をクリックします。 -
アプリケーションに追加されたスコープを確認できます。「次」をクリックします。
ノート: スコープ値を保持し、トークンのリクエストに使用する必要があります。
-
「リソース」および「Web層ポリシー」ウィンドウをスキップします。「認可」で、「認可としての付与の強制」を選択し、「終了」をクリックします。
-
Keep the Client ID and the Client Secret information.トークンを取得するには、これが必要です。
-
「アクティブ化」をクリックしてアプリケーションをアクティブ化し、OAuth2認可プロバイダをテストする準備ができました。
-
-
トークンの取得: これで、OAuth2認可プロバイダをテストしてトークンを取得できます。
-
Compose the URL for the authorizer. You can obtain this by getting your Oracle Identity Cloud Service URL in the browser. In the Oracle Identity Cloud Service URL, you can see something like this:
https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/ui/v1/adminconsole
. -
You will need the URL link until the
oraclecloud.com
, which is the root endpoint.(https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com
など)。 -
oAuth認証パスを追加する必要があります。This URL will be executed as a
POST
REST request.たとえば、https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token
です。トークンをリクエストするには、いくつかのパラメータを入力する必要があります。 -
Enter the credentials as a Basic Authentication and Client ID and Client Secret.
-
「本文」コンテンツに、grant_typeおよびscopeの値を入力します。スコープはOracle Identity Cloud Service構成で取得されたことに注意してください。
-
「送信」をクリックし、
POST
リクエストを実行してトークンを表示します。
-
-
Create the JSON Web Key (JWK): In your browser, enter the root Oracle Identity Cloud Service endpoint adding the
/admin/v1/SigningCert/jwk
to obtain the JWK:https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/admin/v1/SigningCert/jwk
You will receive a JWK string as shown below.
We need to work on this JWK string.
{"keys":[{"kty":"RSA","x5t#S256":"gHdIaH54tZt-b09W7_bTALX0DSj5t_Tsy6Wy2P1M_3E","e":"AQAB","x5t":"L_vneVBMiKA-ObXpNt8FZC4sRSY","kid":"SIGNING_KEY","x5c":["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"],"key_ops":["sig","encrypt"],"alg":"RS256","n":"khfJqiO57xMlci4mtvirEGoDfPflsLWQd3G0ZkQQlQK2QcraQRQPkaoP8Lo6KMKA-1mV1TxGfd9QMx9ONmtRL8RIWvt0543Fae6wPfRpaeIcDpknsHAovsTdQ9SwfqwhF7slDg4ciEJ7-gdpCJKMVQcnsiWBDPCoIC1xzB7KbGKrWvaPAmxx1hoM4etjPwBy8h_JvHMfDEF1GkrUtCDiLFPyGBLPv50hmyN6mnTu47lBhzIwzeZ4HqZLgrOdqdA6iSZrBxRzHDi1IWqoj87FYpztkWXnV7VkIN37RwrG6bFKOHGaYEydoF0LmI4pltssTxsdtLyN-Hr8fM402cs7Iw"}]}
ノート:
-
This JWK was redacted.
-
エラー・メッセージが表示された場合は、Oracle Identity Cloud Serviceでアクセスを提供する必要があります。
Important Change in JWK String: The JWK string will not be useful in the OCI API Gateway until you make some changes.
-
"key_ops":["x"、"y"、"z"]でセグメントを検索し、"use" : "sig"で置換します。以下のようになります(2つの文字列を比較します)。
{"keys":[{"kty":"RSA","x5t#S256":"gHdIaH54tZt-b09W7_bTALX0DSj5t_Tsy6Wy2P1M_3E","e":"AQAB","x5t":"L_vneVBMiKA-ObXpNt8FZC4sRSY","kid":"SIGNING_KEY","x5c":["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"],"use" : "sig","alg":"RS256","n":"khfJqiO57xMlci4mtvirEGoDfPflsLWQd3G0ZkQQlQK2QcraQRQPkaoP8Lo6KMKA-1mV1TxGfd9QMx9ONmtRL8RIWvt0543Fae6wPfRpaeIcDpknsHAovsTdQ9SwfqwhF7slDg4ciEJ7-gdpCJKMVQcnsiWBDPCoIC1xzB7KbGKrWvaPAmxx1hoM4etjPwBy8h_JvHMfDEF1GkrUtCDiLFPyGBLPv50hmyN6mnTu47lBhzIwzeZ4HqZLgrOdqdA6iSZrBxRzHDi1IWqoj87FYpztkWXnV7VkIN37RwrG6bFKOHGaYEydoF0LmI4pltssTxsdtLyN-Hr8fM402cs7Iw"}]}
-
先頭から文字列
{"keys":[
を削除し、末尾から文字列]}
を削除します。最後の文字列は次のようになります。今から使えます。{"kty":"RSA","x5t#S256":"gHdIaH54tZt-b09W7_bTALX0DSj5t_Tsy6Wy2P1M_3E","e":"AQAB","x5t":"L_vneVBMiKA-ObXpNt8FZC4sRSY","kid":"SIGNING_KEY","x5c":["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"],"use" : "sig","alg":"RS256","n":"khfJqiO57xMlci4mtvirEGoDfPflsLWQd3G0ZkQQlQK2QcraQRQPkaoP8Lo6KMKA-1mV1TxGfd9QMx9ONmtRL8RIWvt0543Fae6wPfRpaeIcDpknsHAovsTdQ9SwfqwhF7slDg4ciEJ7-gdpCJKMVQcnsiWBDPCoIC1xzB7KbGKrWvaPAmxx1hoM4etjPwBy8h_JvHMfDEF1GkrUtCDiLFPyGBLPv50hmyN6mnTu47lBhzIwzeZ4HqZLgrOdqdA6iSZrBxRzHDi1IWqoj87FYpztkWXnV7VkIN37RwrG6bFKOHGaYEydoF0LmI4pltssTxsdtLyN-Hr8fM402cs7Iw"}
-
Task 2: Configure an OCI Functions to call your OCI SDK API
-
Understand OCI Functions and API Gateway: It is a best practice to expose your services through an API Gateway. Many authentications can be done bypassing the credentials from API Gateway to the backend services, but if the backend authentication was not the appropriate method to your client application, we can do some configurations at the API Gateway level.
In this step, let’s understand how OCI API Gateway can help us to integrate the OAuth2 authentication and the request for any OCI service, like the Data Science Model Deployment prediction through the OCI Functions.
OCI Functions can do the job to receive the body request and pass to the OCI service. Some services in the OCI service cannot authenticate by OAuth2 method, so we can do it with OCI Functions.
In this example, the Model Deployment prediction service can authenticate by the OCI Private key in OCI IAM.これは、リソース・プリンシパルによって実行できます。
OCI Functionsの作成およびデプロイ方法がわからない場合は、OCI Functionsクイックスタートを参照してください
-
Understand the Code: This code will be prepared to be used with OCI API Gateway. In your API deployment, we will configure the Model Deployment endpoint in the API Gateway and it will be passed as a HEADER parameter. So you can use this function for many Model Deployments in each API Gateway deployment you need.
-
Pythonの
oracle.ads
ライブラリを使用して、リソース・プリンシパルがモデル・デプロイメント・インスタンスへのこの関数のアクセスを認可します(タスク4を参照)。ads.set_auth('resource_principal')
-
本文の内容はこの行で取得できます。
body = json.loads(data.getvalue())
-
We will configure a HEADER named model_deployment in the OCI API Gateway. This HEADER contains the URL for the Model Deployment prediction passed in the API Gateway request.
endpoint = ctx.Headers()["model_deployment"]
-
This will execute the REST API POST request and return the result from the Model Deployment in the Data Science endpoint.
return requests.post(endpoint, json=body, auth=ads.common.auth.default_signer()['signer']).json()
-
これは、このファンクションにロードする必要がある
requirements.txt
ライブラリです。requirements.txt --------------------- fdk>=0.1.54 requests oracle-ads
Deploy your OCI Functions and let’s configure it in the OCI API Gateway.
-
Task 3: Configure an API Gateway Deployment Authentication
Note: For more information on how to develop an OCI Functions and call it in OCI API Gateway, see Call an OCI Functions using API Gateway.
-
OAuth 2.0 / OpenID Connectを選択し、次の構成を入力します。This is the default way to authenticate through the HEADER.
Token Location: Header JWT token header name: Authorization Authentication scheme: Bearer
-
以前に作成したJSON Webキー文字列を入力し、「静的キー」を選択して、次の情報を入力します。
Key ID: SIGNING_KEY Key format: JSON web key JSON web key: <Your JWK string created previously>
-
以前に取得したOCI API Gatewayホスト名を使用して、
https://identity.oraclecloud.com/
として発行者およびオーディエンスを入力します。Configure your OCI Functions created in the last task.
-
HEADER
model_deployment
パラメータを構成し、「ルート・リクエスト・ポリシーの表示」をクリックします。 -
In the HEADER transformations, click Add.
-
You must have the Data Science Model Deployment prediction URL, you can obtain this here: go to the Data Science menu, select your Data Science instance and your model deployment, and click Invoking your model.
Note: Save your Model Deployment OCID here.ポリシーは後で構成する必要があります。
Your Data Science Model Deployment prediction URL.
-
Enter the header name as model_deployment and values as the Data Science Model Deployment prediction URL.
Note: After you save your API Gateway deployment, remember your API deployment endpoint.
Task 4: Configure the OCI Group and Policies
Create a dynamic group to grant access from OCI Functions to your OCI resource.このチュートリアルでは、データ・サイエンス・モデルのデプロイメントを使用します。リソース・プリンシパルの使用方法の詳細は、リソース・プリンシパルを参照してください。
-
モデル・デプロイメント・インスタンスのOCIDを取得します。Enter the OCID in the dynamic group string.
ALL {resource.type = 'fnfunc', resource.id = 'ocid1.datasciencemodeldeployment.oc1.sa-saopaulo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
Note: The
resource.id
is the OCID obtained previously in the Model Deployment console screen. -
動的グループを許可するポリシーを作成します。詳細は、「モデル・デプロイメント・ポリシー」を参照してください。
allow dynamic-group hoshikawa_datascience to {DATA_SCIENCE_MODEL_DEPLOYMENT_PREDICT} in tenancy allow dynamic-group hoshikawa_datascience to manage data-science-model-deployments in tenancy
Task 5: Test API
次に、OCI Data Scienceのモデル・デプロイメント・サービスに対するアプリケーションのOAuth2リクエストをシミュレートします。
-
Obtain the token passing the Client ID and Client Secret to your Oracle Identity Cloud Service provider.
-
Enter your OCI API Gateway deployment endpoint and select
POST
REST request.Copy the access_token value and pass to your OCI API Gateway deployment.トークンには1時間の期間があることに注意してください。次に結果を示します。
関連リンク
確認
- Author - Cristiano Hoshikawa (Oracle LAD A-Team Solution Engineer)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Enable OAuth2 Authentication in OCI API Gateway to Call OCI Services using OCI Functions and OCI SDK
F90853-01
December 2023
Copyright © 2023, Oracle and/or its affiliates.