手動設定以角色為基礎的存取控制

您可以在 Oracle Cloud Infrastructure 中,使用 JSON Web Token (JWT) 自訂宣告來設定以角色為基礎的存取控制 (RBAC)。

若要建立允許 RBAC 與 JWT 自訂宣告的網域整合應用程式,請執行下列動作: 以下幾節將詳細說明每個步驟。

附註:

本文件基於說明目的,使用 Oracle Cloud InfrastructureDefault 網域。

建立使用者的自訂屬性

使用者實體會將其特性和其他資訊儲存為屬性。例如,名字、姓氏、使用者登入、密碼等等。您可以在 Oracle Cloud Infrastructure 中建立自訂屬性。

以下為定義自訂使用者屬性的範例,該屬性會儲存指派給網域中每個使用者的角色。
  1. 按一下漢堡功能表並前往識別與安全性,然後選取網域。在「名稱」下,按一下預設網域。
  2. 移至綱要管理頁籤,然後選取使用者屬性

  3. 按一下新增屬性,然後指定下列項目:
    • 顯示名稱ORDS RBAC
    • 名稱rbac_ords
    • 描述ORDS 的以角色為基礎的存取控制
    • 資料類型字串陣列

    您可以將其他欄位保留為預設狀態。



    按一下新增。您已新增自訂屬性。

  4. 在搜尋欄位中輸入自訂,以搜尋新增的屬性。您將檢視清單中的 ORDS RBAC 屬性。

    按一下編輯屬性

  5. 複製並記下 FQN 的值 (完整名稱)。

    在此範例中, FQNurn:ietf:params:scim:schemas:idcs:extension:custom:User:rbac_ords

指定自訂角色

建立自訂使用者屬性後,您可以繼續在該屬性欄位中指派自訂角色。
  1. 導覽至:識別網域預設。按一下使用者管理頁籤,然後從顯示的使用者清單中選取您的使用者名稱。



    按一下編輯使用者。向下捲動至其他資訊欄位,然後在 ORDS RBAC 下輸入 SQL Developer,SODA Developer

    如需 ORDS 角色的詳細資訊,請參閱關於 Oracle REST Data Services 使用者角色的本章。



    新增角色之後,請按一下儲存變更

建立網域整合應用程式

我們將在網域中開發整合的應用程式,並在登入時發出 JWT 權杖。

  1. 導覽至:識別網域預設。按一下整合的應用程式頁籤,然後選取新增應用程式
  2. 按一下機密應用程式,然後選取啟動工作流程
  3. 新增機密應用程式對話方塊中,指定下列欄位:
    • 名稱:輸入機密應用程式的名稱。例如, Spreadsheet-Addin RBAC
    • 說明:輸入說明。例如,以試算表增益集角色為基礎之存取控制的整合應用程式



    按一下送出

    您將檢視新增的 Spreadsheet-Addin RBAC 應用程式頁面。

  4. 試算表 - 增益集 RBAC 頁面的 OAuth 組態頁籤中,按一下編輯 OAuth 組態



  5. 在「資源伺服器組態」底下,選取立即將此應用程式設定為資源伺服器
  6. 設定需要受 OAuth 保護的應用程式 API 中,選取 3600 作為存取權杖到期 (秒)。
  7. 主要對象欄位中,輸入 ssaddin/
  8. 按一下新增範圍 (Add scopes) 並新增 rbac 範圍 (Scope)



  9. 用戶端組態下,指定下列欄位:
    • 選取立即將此應用程式設定為從屬端
    • 選取允許的授權類型下的隱含
    • 重新導向 URL 欄位中輸入下列值:https://static.oracle.com/cdn/spreadsheet/red-4/redirector.html
    • 登出後 URL 欄位中輸入下列值:https://static.oracle.com/cdn/spreadsheet/red-4/redirector.html



    按一下送出

    附註:

    確定您啟用應用程式。

定義自訂索賠

若要在 JWT 中包含使用者角色,我們必須使用「自訂求償」將第一個區段中建立的自訂屬性對映至 JWT。

為了達到此目的,我們需要建立額外的臨時整合應用程式,並透過該應用程式附加自訂申請。

建立識別網域整合應用程式

您將建立額外的暫時整合應用程式:
  1. 導覽至:識別網域預設
  2. 按一下整合的應用程式頁籤,然後選取新增應用程式
  3. 按一下機密應用程式,然後選取啟動工作流程
    • 輸入應用程式的名稱:識別網域整合應用程式
    • 輸入描述:這是網域整合應用程式。

    按一下送出

  4. 識別網域整合應用程式頁面上,選取 OAuth 組態頁籤。
  5. 按一下資源伺服器組態上的編輯 OAuth 組態。在編輯 OAuth 組態對話方塊中,指定下列欄位:

建立 JWT 的新索賠

我們需要 CLIENT IDCLIENT SECRETDOMAIN URL,才能擷取「識別網域管理員應用程式」的新存取權杖。

我們有您在上一個步驟中建立之網域整合應用程式的 CLIENT IDCLIENT SECRET

您可以在網域頁面中的「網域」資訊底下找到 DOMAIN URL



執行下列命令,並以您的值取代 (CLIENT ID)(CLIENT SECRET)(DOMAIN URL) 值。

export ACCESS_TOKEN=$(curl -s -i -u"(CLIENT ID):(CLIENT SECRET)" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" --request POST (DOMAIN URL)/oauth2/v1/token -d
      "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__" | tail -n +1 | grep -o
      '"access_token":"[^"]*' | cut -d'"' -f4)
在此範例中,您將使用下列值:
  • Client ID:123a1234e1234567aa12345a1abcdefg1
  • Client Secret:idcscs-12a1a123-a123-1234-1234-e1a05aabc123
  • Domain URL: https://idcs-a123ab1ab12a4bb99a9aa9ab99aabbb9.identity.oraclecloud.com:443
在 Bash Shell 中執行下列程式碼,相應地取代預留位置值:
export ACCESS_TOKEN=$(curl -s -i -u"123a1234e1234567aa12345a1abcdefg1: idcscs-12a1a123-a123-1234-1234-e1a05aabc123" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" --request POST https://idcs-a123ab1ab12a4bb99a9aa9ab99aabbb9.identity.oraclecloud.com:443/oauth2/v1/token -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__" |
          tail -n +1 | grep -o '"access_token":"[^"]*' | cut -d'"'
        -f4)
 
若要驗證您已順利擷取權杖,請執行下列命令並複查顯示的權杖。
echo $ACCESS_TOKEN

下方影像顯示上述命令在 Bash Shell 中的顯示方式。



它會顯示由多行 (超過 10 行) 所組成的輸出,其中包含英數字元。

Run the following command with (ROLE CLAIM NAME) as ssaddin.role and (MODIFIED FQN) as urn:ietf:params:scim:schemas:idcs:extension:custom:User.rbac_ords:

附註:

使用步驟 1 中的 FQN,並以 "" 取代最後的 ":"。

例如,步驟 1 的 FQN 為:

urn:ietf:params:scim:schemas:idcs:extension:custom:User:rbac_ords

因此 MODIFIED FQN 應該是:

urn:ietf:params:scim:schemas:idcs:extension:custom:User.rbac_ords
curl -i -X POST (DOMAIN URL)/admin/v1/CustomClaims -H"Cache-Control: no-cache" -H"Accept:application/json" -H"Content-Type:application/json" -H"Authorization: Bearer $ACCESS_TOKEN" -d '{
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:CustomClaim"
    ],
    "name": "(ROLE CLAIM NAME)",
    "value": "$user.(MODIFIED FQN).*",     
    "expression": true,
    "mode": "always",
    "tokenType": "AT",
    "allScopes": false,
    "scopes": [
    "ssaddin/rbac"
  ]
}'

附註:

Domain URL 取代為上述程式碼中的實際值。

您將檢視下列作為輸出:HTTP/1.1 201 Created

啟用 Autonomous AI Database Schema 的 RBAC IAM 登入

下列指示可讓 ORDS 驗證 JWT Bearer 權杖並授予受保護資源的存取權。
  1. 在「SQL 工作表」的「導覽器」頁籤上,從「綱要」下拉式清單中選取 ORDS_METADATA
  2. 從「物件類型」下拉式清單中選取 Packages
  3. 在「搜尋」欄位中輸入 ORDS_SECURITY。搜尋函數會擷取開頭為 ORDS_SECURITY 的所有項目。
  4. 展開 ORDS_SECURITY 套裝軟體。



  5. CREATE_JWT_PROFILE 上按一下滑鼠右鍵,然後按一下 RUN。這會開啟 RUN CODE 對話方塊。
    在「執行程式碼…」對話方塊中,指定下列欄位值:
    • P_ISSUER - https://identity.oraclecloud.com/ 。此欄位必須為非空值,且必須以單一逗號填入。
    • P_AUDIENCE - ssaddin/ 。此欄位必須是非空值的值。
    • P_JWK_URL - 使用 /admin/v1/SigningCert/jwk 附加 DOMAIN URL 。它必須是以 https:// 開頭的非空值,並且以 JSON Web Key (JWK) 格式識別授權伺服器所提供的公開驗證金鑰。

      您可以在 OCI 主控台之識別與安全導覽功能表的網域功能表中的「網域資訊」頁籤中,檢視網域 URL

    • P_DESCRIPTION - 輸入此設定檔的描述。例如," RBAC JWT Demo confluence "。
    • P_ALLOWED_AGE -"0"
    • P_ALLOWED_SKEW -"0"
    • P_ROLE_CLAIM_NAME - "ssaddin.role"

    按一下將程式碼插入工作表中



    執行程序。



    您將在輸出面板中檢視「PL/SQL 程序已順利完成」。

建立一個連線檔案

  1. 按一下「連線」窗格標頭上的新增按鈕,即可新增連線。這會開啟「新增連線」對話方塊。

  2. 在「新增連線」對話方塊中指定下列欄位:
    • 連線名稱:輸入連線的名稱。
    • Autonomous Database URL :輸入您要連線之 Autonomous AI Database 的 URL。從 Autonomous AI Database 的 Web UI 複製整個 URL。例如,輸入或複製下列連結 "https://<hostname>-<databasename>.adb.<region>.oraclecloudapps.com/" 以連線至資料庫。
    • 綱要名稱:輸入您用來啟用 Autonomous Database 綱要的 IAM 登入的相同綱要。
    • 選取連線類型: OCI IAM
    • 網域 URL :從網域資訊頁籤輸入網域 URL
    • 選取 RBAC IAM 類型。
    • IAM 範圍ssaddin/rbac



建立連線之後,您可以與此網域的其他使用者共用連線。