附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 憑證、租用戶及區間的範例值。完成實驗室時,請以雲端環境特有的值取代這些值。
在 OCI API 閘道啟用 OAuth2 認證,以使用 OCI 函數和 OCI SDK 呼叫 OCI 服務
簡介
我們通常需要應用系統來使用 Oracle Cloud Infrastructure (OCI) REST 服務。有數種方式可以保證元件之間的安全性,確保應用程式能夠安全地向後端服務進行認證。
此工作在 Oracle Cloud 內原生,因為有幾種方式可以保護網路及存取現有服務。只需幾個設定即可完成。不過,在某些情況下,應用程式可能會提供額外的安全性和連線需求。此材料的使用案例在混合或多雲端案例中滿足了非常常見的需求 (連線到 Oracle Cloud 的內部部署,或連線到另一個雲端的 Oracle Cloud)。
讓我們呈現下列案例:
-
透過 Fast-Connect/VPN 連線至 Oracle Cloud 的內部部署網路應用程式。
-
應用程式必須使用 OCI 資料科學服務。
-
OCI 服務沒有符合應用程式用戶可能性的認證機制。
-
應用程式必須使用 OAuth2 進行認證,才能安全地存取服務。
因此,教學課程提供下列解決方案:
-
將 Oracle Identity Cloud Service 雲端的身分識別提供者設定為透過 OAuth2 進行認證。
-
設定 OCI API 閘道以與 Oracle Identity Cloud Service 整合,以透過取得的權杖進行認證。
-
編寫 OCI Functions 呼叫允許使用資源主體之 OCI 服務的程式碼 (在我們的範例中,我們將使用資料科學模型部署服務)。
-
建立群組和原則,以限制對雲端資源的存取。
-
提供可讓您傳送從屬端 ID 和加密密碼 ID 以及取得認證權杖的身分識別提供者。
-
提供功能性的 OCI API 閘道 REST 服務,可透過取得的權杖進行認證並提供資料科學服務的結果。
注意:您可以從此處 OAuthOCIService-fn.zip 下載 OCI 函數。
目標
-
允許外部應用程式使用 OAuth2 認證的 REST 服務。
-
在 OCI 上提供 OAuth2 認證服務。
-
設定 OCI API 閘道和 OCI 函數,以透過權杖執行 OCI 服務。
必要條件
-
OCI API 閘道執行處理在網際網路上建立並公開,請參閱在 Oracle Cloud 中建立您的第一個 API 閘道。
-
OCI API 閘道、OCI 函數和 OCI PaaS 資源之間的網路連線。
-
VCN/ 子網路
-
安全清單
-
NAT 閘道 / 網際網路閘道
-
公用 / 專用網路
-
-
知識:
-
OCI 函數
-
編寫 OCI 服務呼叫程式碼的 OCI REST API
-
作業 1:使用 Oracle Identity Cloud Service 設定 OAuth2
-
取得 OCI API 閘道參數:開始設定 OAuth2 機制。我們需要將您的 OCI API 閘道執行處理與身分識別提供者整合,方法是將 Oracle Cloud 的 Oracle Identity Cloud Service 設定為身分識別提供者。
前往 OCI API 閘道執行處理並複製主機名稱。此資訊將在下一步驟用於您的 Oracle Identity Cloud Service 資源伺服器組態。
-
建立資源應用程式:我們需要為您的應用程式建立 OAuth2 授權者。我們可以在 Oracle Cloud 中與 Oracle Identity Cloud Service 搭配使用。
-
在 OCI 主控台中,前往識別與安全性,然後選取聯合。
-
按一下 OracleIdentityCloudSevice 。
-
按一下您 Oracle Identity Cloud Service 執行處理的連結。
-
我們將建立兩個應用程式。按一下應用程式和服務。
-
在應用程式中,按一下新增。
-
選取機密應用程式,即可開始設定您的資源伺服器。
-
我們將設定第一個應用程式。在您的資源伺服器應用程式中輸入名稱,然後按下一步。
-
按一下略過以供稍後使用。我們只需要設定資源。
-
輸入您在步驟 1 中取得的 OCI API 閘道主機名稱。
-
按一下新增範圍,然後輸入範圍資訊。
-
複查您的範圍資訊,按兩次下一步,然後按一下完成。
-
按一下啟用來啟用您的應用程式。
-
-
建立從屬端應用程式。
-
在應用程式中,按一下新增。
-
選取機密應用程式,即可開始設定您的資源伺服器。
-
輸入您應用程式的名稱,然後按下一步。
-
選取立即將應用程式設定為用戶端,為您的用戶端應用程式啟用組態。選取從屬端證明資料、 JWT 宣告以及代表。
-
向下捲動畫面,然後按一下新增範圍。
-
尋找您之前建立的資源應用程式 (此工作中的
oauth_resource_server
),然後按一下新增。 -
您可以查看已新增至應用程式的範圍。按下一步。
注意:請保留範圍值,您必須使用它來要求記號。
-
略過資源和 Web 層原則視窗。在授權中,選取強制授權,然後按一下完成。
-
保留從屬端 ID 和從屬端密碼資訊。您必須取得您的權杖。
-
按一下啟用即可啟用您的應用程式,OAuth2 授權者已準備好進行測試。
-
-
取得權杖:現在我們可以測試 OAuth2 授權者以取得權杖。
-
撰寫授權者的 URL。您可以在瀏覽器中取得 Oracle Identity Cloud Service URL,以取得此 URL。在 Oracle Identity Cloud Service URL 中,您可以看到像這樣的內容:
https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/ui/v1/adminconsole
。 -
您必須要有 URL 連結,直到
oraclecloud.com
為根端點。例如https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com
。 -
我們需要新增 oAuth 認證路徑。此 URL 將作為
POST
REST 要求執行。例如,https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token
。您必須輸入一些參數才能要求權杖。 -
將證明資料輸入為基本認證、從屬端 ID 以及從屬端密碼。
-
在主體內容中,輸入 grant_type 和 scope 值。請記住,範圍是擷取在 Oracle Identity Cloud Service 組態中。
-
按一下傳送,然後執行
POST
要求並檢視記號。
-
-
建立 JSON Web 金鑰 (JWK) :在您的瀏覽器中,輸入新增
/admin/v1/SigningCert/jwk
以取得 JWK 的根 Oracle Identity Cloud Service 端點:https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/admin/v1/SigningCert/jwk
您將會收到如下所示的 JWK 字串。
我們需要處理此 JWK 字串。
{"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"}]}
注意:
-
已隱匿此 JWK。
-
如果您收到錯誤訊息,必須提供 Oracle Identity Cloud Service 的存取權。
JWK 字串的重要變更:在進行某些變更之前,JWK 字串在 OCI API 閘道中將無用。
-
使用 "key_ops":["x","y","z"] 尋找區隔,並以 "use" :"sig" 取代。其外觀如下所示 (比較兩個字串)。
{"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"}
-
作業 2:設定 OCI 函數以呼叫您的 OCI SDK API
-
瞭解 OCI 函數和 API 閘道:透過 API 閘道公開服務是最佳做法。許多認證都可以藉由將證明資料從 API 閘道略過到後端服務來完成,但如果後端認證不是從屬端應用程式的適當方法,我們可以在 API 閘道層次執行一些組態。
在此步驟中,讓我們瞭解 OCI API Gateway 如何協助我們整合 OAuth2 認證和任何 OCI 服務的要求,例如透過 OCI Functions 進行資料科學模型部署預測。
OCI 函數可以執行工作來接收主體要求並傳送至 OCI 服務。OCI 服務中的部分服務無法透過 OAuth2 方法進行認證,因此我們可以使用 OCI 函數進行認證。
在此範例中,模型部署預測服務可透過 OCI IAM 中的 OCI 私密金鑰進行認證。它可由資源主體完成。
如果您不知道如何建立及部署 OCI 函數,請參閱 OCI 函數快速啟動
-
瞭解程式碼:此程式碼將與 OCI API 閘道搭配使用。在您的 API 部署中,我們將在 API 閘道中設定模型部署端點,並將其作為 HEADER 參數傳送。因此,您可以在每個所需的 API 閘道部署中,將此功能用於許多模型部署。
-
我們將使用 Python 中的
oracle.ads
程式庫,由資源主體授權此函數對「模型部署」執行處理的存取 (請參閱工作 4)。ads.set_auth('resource_principal')
-
本文內容可由此明細行擷取。
body = json.loads(data.getvalue())
-
我們將在 OCI API Gateway 中設定名為 model_deployment 的 HEADER。此 HEADER 包含 API 閘道要求中傳送之模型部署預測的 URL。
endpoint = ctx.Headers()["model_deployment"]
-
這將會執行 REST API POST 要求,並從資料科學端點的模型部署傳回結果。
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
部署您的 OCI 函數,並在 OCI API 閘道中設定。
-
作業 3:設定 API 閘道部署認證
注意:如需有關如何開發 OCI 函數並在 OCI API 閘道中呼叫它的詳細資訊,請參閱使用 API 閘道呼叫 OCI 函數。
-
選取 OAuth 2.0 / OpenID Connect 並輸入下列組態。這是透過 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>
-
輸入「發照者」為
https://identity.oraclecloud.com/
,輸入先前取得之 OCI API 閘道主機名稱的「對象」。設定您在上一個作業中建立的 OCI 函數。
-
設定 HEADER
model_deployment
參數,按一下顯示路由要求原則。 -
在標頭轉換中,按一下新增。
-
您必須要有資料科學模型部署預測 URL,您可以在此處取得:前往資料科學功能表,選取您的資料科學執行處理和模型部署,然後按一下呼叫您的模型。
注意:請在此處儲存您的模型部署 OCID。您之後將需要設定原則。
您的資料科學模型部署預測 URL。
-
輸入標頭名稱作為 model_deployment ,並輸入值作為「資料科學模型部署」預測 URL。
注意:儲存 API 閘道部署之後,請記住您的 API 部署端點。
工作 4:設定 OCI 群組和原則
建立動態群組,將 OCI 函數的存取權授予您的 OCI 資源。在本教學課程中,我們正在使用資料科學模型部署。如需如何使用「資源主體」的詳細資訊,請參閱資源主體。
-
取得模型部署執行處理的 OCID 。在動態群組字串中輸入 OCID。
ALL {resource.type = 'fnfunc', resource.id = 'ocid1.datasciencemodeldeployment.oc1.sa-saopaulo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
注意:
resource.id
是先前在「模型建置主控台」畫面中取得的 OCID。 -
建立允許您動態群組的原則。如需詳細資訊,請參閱模型部署原則。
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
作業 5:測試 API
現在,讓我們在 OCI Data Science 中模擬您模型部署服務的應用程式 OAuth2 要求。
-
取得將從屬端 ID 和從屬端加密密碼傳送至您 Oracle Identity Cloud Service 提供者的權杖。
-
輸入您的 OCI API 閘道部署端點,然後選取
POST
REST 要求。複製 access_token 值並傳送至您的 OCI API 閘道部署。請記住,您的記號有一個小時的持續時間。結果就是這裡!
相關連結
認可
- 作者 - Cristiano Hoshikawa (Oracle LAD A 團隊解決方案工程師)
其他學習資源
瀏覽 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.