全部產品
Search
文件中心

Resource Access Management:通過SCIM協議將企業內部帳號同步到阿里雲RAM

更新時間:Apr 16, 2025

企業上雲的過程中,為減少維護和管理成本,需要基於一套原則將企業內部系統中已有的帳號同步到雲上。阿里雲通過SCIM標準協議,結合OAuth應用的安全授權,可以將企業內部系統中的帳號資料同步到阿里雲存取控制(RAM)中。

前提條件

本文中所有RAM控制台的操作,推薦使用Resource Access Management員或具有OAuth系統管理權限的RAM使用者完成。

背景資訊

  • SCIM(System for Cross-domain Identity Management)主要用於多使用者的雲應用身份管理。SCIM 2.0建立在一個物件模型上,所有SCIM對象都繼承Resource。Resource具有id、externalId和meta屬性,RFC 7643定義了擴充公用屬性的User、Group和EnterpriseUser。本文的樣本將採用User來同步處理的使用者資訊。

  • 開放授權OAuth(Open Authorization)是為使用者資源的授權定義了一個安全、開放及簡單的標準,第三方無需知道使用者的帳號和密碼,就可擷取到使用者的授權資訊。阿里雲當前的OAuth授權形態分為Web應用Native應用Server應用三種。Web應用Native應用都屬於3-legged OAuth,而Server應用屬於2-legged OAuth。SCIM主要使用2-legged OAuth機制來完成應用程式(消費者)和API(服務提供者)之間的授權,從而進行下一步的資料同步業務。更多關於OAuth的資訊,請參見OAuth 2.0OAuth應用概覽

  • 阿里雲SCIM Endpoint:https://scim.aliyun.com

  • 阿里雲OAuth擷取access_token的Endpoint:https://oauth.aliyun.com/v1/token

步驟一:建立OAuth應用並授權

  1. 使用阿里雲帳號登入RAM控制台

  2. 在左側導覽列,單擊OAuth應用(公測)

  3. 公司專屬應用程式頁簽,單擊建立應用,建立OAuth應用。

    其中,應用類型選擇Server應用。具體操作,請參見建立應用

    Server應用建立完成後,您可以在應用詳情頁擷取應用ID(client_id)。

  4. 單擊應用程式名稱,在OAuth範圍頁簽,單擊添加OAuth範圍,添加OAuth應用範圍。

    其中,OAuth範圍選擇/acs/scim。具體操作,請參見添加應用範圍

  5. 為OAuth應用授權。

    1. OAuth範圍頁簽,單擊授權

    2. 第三方應用授權頁面,選中阿里雲跨域身份管理服務,然後單擊授權

  6. 應用密鑰頁簽,單擊建立密鑰,建立應用密鑰。

    重要

    應用金鑰產製原料(AppSecretValue)僅在建立時可見,請您及時儲存。

步驟二:同步帳號資料

支援通過用戶端(例如:One Identity)或SCIM API兩種方式同步帳號資料。

  • 用戶端:您可以在用戶端(One Identity)中配置SCIM資訊,然後通過One Identity同步帳號資料。One Identity配置方法,請參見One Identity文檔

  • SCIM API:您可以通過SCIM API將企業內部系統中的帳號映射成RAM使用者,支援對RAM使用者的以下欄位進行建立、刪除、查詢和修改操作。

    • id:RAM使用者ID,全域唯一,服務端產生。

    • externalId:RAM使用者外鍵,使用者層級唯一,用戶端指定,用於將阿里雲的RAM使用者和企業內部系統中的使用者關聯。

      說明

      通過控制台建立的RAM使用者無externalId欄位。

    • userName:RAM使用者名稱稱,使用者層級唯一,用戶端指定。

    • displayName:RAM使用者顯示名稱,用戶端指定。

通過阿里雲SCIM API同步帳號資料的操作如下所示。

  1. 擷取已授權的Server應用的ID(client_id)和金鑰產製原料(AppSecretValue)。

  2. 通過client_idAppSecretValue訪問https://oauth.aliyun.com/v1/token,擷取access_token

    其中,要求標頭中的Authorization內容為"Authorization: Basic Base64Encode(client_id:AppSecretValue)",例如:client_id=cid,AppSecretValue=123456,那麼要求標頭中需要輸入的Authorization內容為"Authorization: Basic Y2lkOjEyMzQ1Ng=="

    請求樣本:

    curl --location --request POST --header "Authorization: Basic Y2lkOjEyMzQ1Ng==" https://oauth.aliyun.com/v1/token?grant_type=client_credentials&client_id=463790568674183****

    返回樣本:

    {
        "scope": "/acs/scim",
        "request_id": "8dc768e0-d6fe-4f52-a788-05631dd6c584",
        "access_token": "eyJ***hKg",
        "token_type": "Bearer",
        "expires_in": "3599"
    }
  3. 查詢阿里雲SCIM支援的ResourceTypeSchema

    查詢SCIM支援的ResourceType

    curl --location --request GET 'https://scim.aliyun.com/ResourceTypes'

    查詢SCIM支援的Schema

    curl --location --request GET 'https://scim.aliyun.com/Schemas'
  4. 建立、查詢、修改和刪除RAM使用者。

    • 建立RAM使用者。

      根據企業內部系統中的帳號資訊,指定與之對應的RAM使用者名稱稱(userName)、顯示名稱(displayName)和外鍵(externalId),然後建立RAM使用者。

      請求樣本:

      curl --location --request POST 'https://scim.aliyun.com/Users' \
      --header 'Authorization: Bearer  eyJ***hKg' \
      --header 'Content-Type: application/json' \
      --data-raw '{
          "displayName": "j2gg0s_****",
          "schemas": [
              "urn:ietf:params:scim:schemas:core:2.0:User"
          ],
          "externalId": "6e74eec4-ddb5-4e74-bd12-5e7b99b2****",
          "userName": "j2gg0screatedbyscim_exa****"
      }'

      返回樣本:

      {
          "displayName": "j2gg0s_****",
          "meta": {
              "created": "2020-02-14T03:58:59Z",
              "location": "https://scim.aliyun.com/Users/27648498165273****",
              "lastModified": "2020-02-14T03:58:59Z",
              "resourceType": "User"
          },
          "schemas": [
              "urn:ietf:params:scim:schemas:core:2.0:User"
          ],
          "externalId": "6e74eec4-ddb5-4e74-bd12-5e7b99b2****",
          "id": "27648498165273****",
          "userName": "j2gg0screatedbyscim_exa****"
      }
    • 查詢指定的RAM使用者。

      • 通過GET /Users/{id},查詢指定id的RAM使用者。

      • 通過GET /Users?filter=externalId eq xxx,查詢指定externalId的RAM使用者。

      • 通過GET /Users?filter=userName eq xxx,查詢指定userName的RAM使用者。請求樣本和響應樣本如下。

        請求樣本:

        curl --location --request GET 'https://scim.aliyun.com/Users?filter=userName%20eq%20%22j2gg0screatedbyscim****%22' \
        --header 'Authorization: Bearer  eyJ***hKg'

        返回樣本:

        {
            "startIndex": 1,
            "totalResults": 1,
            "itemsPerPage": 30,
            "schemas": [
                "urn:ietf:params:scim:api:messages:2.0:ListResponse"
            ],
            "Resources": [
                {
                    "displayName": "j2gg0screatedbyscim****",
                    "meta": {
                        "created": "2019-12-11T01:53:19Z",
                        "location": "https://scim.aliyun.com/Users/27769827602919****",
                        "lastModified": "2019-12-11T02:10:39Z",
                        "resourceType": "User"
                    },
                    "schemas": [
                        "urn:ietf:params:scim:schemas:core:2.0:User"
                    ],
                    "externalId": "6e74eec4-ddb5-4e74-bd12-5e7b99b2****",
                    "id": "27769827602919****",
                    "userName": "j2gg0screatedbyscim****"
                }
            ]
        }
        說明

        對於SCIM Filter,阿里雲僅支援對iduserNameexternalId進行and和eq操作。

    • 修改RAM使用者屬性。

      請求樣本:

      curl --location --request PUT 'https://scim.aliyun.com/Users/27648498165273****' \
      --header 'Authorization: Bearer  eyJ***hKg' \
      --header 'Content-Type: application/json' \
      --data-raw '{
          "displayName": "j2gg0s_new_****",
          "schemas": [
              "urn:ietf:params:scim:schemas:core:2.0:User"
          ],
          "externalId": "6e74eec4-ddb5-4e74-bd12-5e7b99b2****",
          "userName": "j2gg0screatedbyscim_new_exa****"
      }'

      返回樣本:

      {
          "displayName": "j2gg0s_new_****",
          "meta": {
              "created": "2020-02-14T03:58:59Z",
              "location": "https://scim.aliyun.com/Users/27648498165273****",
              "lastModified": "2020-02-14T04:03:55Z",
              "resourceType": "User"
          },
          "schemas": [
              "urn:ietf:params:scim:schemas:core:2.0:User"
          ],
          "externalId": "6e74eec4-ddb5-4e74-bd12-5e7b99b2****",
          "id": "27648498165273****",
          "userName": "j2gg0screatedbyscim_new_exa****"}
    • 刪除RAM使用者。

      請求樣本:

      curl --location --request DELETE 'https://scim.aliyun.com/Users/27648498165273****' \
      --header 'Authorization: Bearer  eyJ***hKg' \
      --header 'Content-Type: application/json'

      返回的HTTP狀態代碼為204時,表示刪除RAM使用者成功。

      說明

      阿里雲暫時不支援虛刪除。如果您的系統支援虛刪除,建議先將虛刪除映射成硬刪除,再同步到阿里雲。