企業上雲的過程中,為減少維護和管理成本,需要基於一套原則將企業內部系統中已有的帳號同步到雲上。阿里雲通過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.0和OAuth應用概覽。
阿里雲SCIM Endpoint:
https://scim.aliyun.com。阿里雲OAuth擷取access_token的Endpoint:
https://oauth.aliyun.com/v1/token。
步驟一:建立OAuth應用並授權
使用阿里雲帳號登入RAM控制台。
在左側導覽列,單擊OAuth應用(公測)。
在公司專屬應用程式頁簽,單擊建立應用,建立OAuth應用。
其中,應用類型選擇Server應用。具體操作,請參見建立應用。
Server應用建立完成後,您可以在應用詳情頁擷取應用ID(client_id)。
單擊應用程式名稱,在OAuth範圍頁簽,單擊添加OAuth範圍,添加OAuth應用範圍。
其中,OAuth範圍選擇/acs/scim。具體操作,請參見添加應用範圍。
為OAuth應用授權。
在OAuth範圍頁簽,單擊授權。
在第三方應用授權頁面,選中阿里雲跨域身份管理服務,然後單擊授權。
在應用密鑰頁簽,單擊建立密鑰,建立應用密鑰。
重要應用金鑰產製原料(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同步帳號資料的操作如下所示。
擷取已授權的Server應用的ID(client_id)和金鑰產製原料(AppSecretValue)。
client_id:應用ID。從步驟一:建立OAuth應用並授權擷取。
AppSecretValue:應用金鑰產製原料。從步驟一:建立OAuth應用並授權擷取。
通過
client_id和AppSecretValue訪問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" }查詢阿里雲SCIM支援的
ResourceType和Schema。查詢SCIM支援的
ResourceType:curl --location --request GET 'https://scim.aliyun.com/ResourceTypes'查詢SCIM支援的
Schema:curl --location --request GET 'https://scim.aliyun.com/Schemas'建立、查詢、修改和刪除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,阿里雲僅支援對
id、userName和externalId進行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使用者成功。
說明阿里雲暫時不支援虛刪除。如果您的系統支援虛刪除,建議先將虛刪除映射成硬刪除,再同步到阿里雲。