教學課程:設定 SAP Cloud Identity Services 來自動布建使用者

本教學課程示範如何設定從 Microsoft Entra ID 布建至 SAP Cloud Identity Services 的步驟。 目標是設定 Microsoft Entra ID 來自動布建和取消布建使用者至 SAP Cloud Identity Services,讓這些使用者可以向 SAP 雲端身分識別服務進行驗證,並存取其他 SAP 工作負載。 SAP 雲端身分識別服務支援從本機身分識別目錄布建至其他 SAP 應用程式作為 目標系統

注意

本教學課程說明 Microsoft Entra 使用者布建服務內建的連接器。 如需此服務執行方式、運作方式和常見問題的重要詳細數據,請參閱 使用 Microsoft Entra ID 將使用者布建和取消布建至 SaaS 應用程式。 SAP Cloud Identity Services 也有自己的個別連接器,可從 Microsoft Entra ID 讀取使用者和群組。 如需詳細資訊,請參閱 SAP 雲端身分識別服務 - 身分識別布建 - Microsoft Entra ID 作為來源系統

必要條件

本教學課程中所述的案例假設您已經具備下列必要條件:

注意

此整合也可從 Microsoft Entra US Government Cloud 環境使用。 您可以在 Microsoft Entra US Government 雲端應用連結庫中找到此應用程式,並以您從公用雲端環境所做的相同方式進行設定。

如果您要在生產環境中設定布建至 SAP 雲端身分識別服務,您會使用 Microsoft Entra ID 控管 控管 SAP 工作負載的存取權,然後在繼續之前先檢閱必要條件,再設定 Microsoft Entra ID 以進行身分識別治理

設定 SAP Cloud Identity Services 以進行布建

  1. 登入 SAP Cloud Identity Services 管理員 控制台,https://<tenantID>.accounts.ondemand.com/adminhttps://<tenantID>.trial-accounts.ondemand.com/admin試用時。 流覽至 [用戶與授權>] 管理員 istrators

    SAP 雲端身分識別服務 管理員 主控台的螢幕快照。

  2. 按下左側面板中的 [ +新增 ] 按鈕,以將新的系統管理員新增至清單。 選擇 [新增系統] ,然後輸入系統的名稱。

    注意

    SAP 雲端身分識別服務中的系統管理員身分識別必須是 System 類型。 布建時,系統管理員使用者將無法向 SAP SCIM API 進行驗證。 SAP Cloud Identity Services 不允許在系統建立后變更系統的名稱。

  3. 在 [設定授權] 底下,針對 [管理使用者] 切換切換按鈕。 然後按兩下 [ 儲存 ] 以建立系統。

    SAP 雲端身分識別服務新增 SCIM 的螢幕快照。

  4. 建立系統管理員系統之後,將新的秘密新增至該系統。

  5. 複製 SAP 所產生的用戶端識別碼客戶端密碼。 這些值將會分別輸入 管理員 [用戶名稱] 和 [密碼] 字段 管理員。 這會在 SAP Cloud Identity Services 應用程式的 [布建] 索引標籤中完成,您將在下一節中設定。

  6. SAP 雲端身分識別服務可能會將對應至一或多個 SAP 應用程式作為目標系統。 檢查使用者上是否有任何屬性,這些 SAP 應用程式需要透過 SAP 雲端身分識別服務布建。 本教學課程假設 SAP 雲端身分識別服務和下游目標系統需要兩個屬性和 userNameemails[type eq "work"].value。 如果您的 SAP 目標系統需要其他屬性,且這些屬性不是 Microsoft Entra ID 使用者架構的一部分,則您可能需要設定 同步處理擴充屬性

將 Microsoft Entra 識別符設定為將用戶自動布建至 SAP Cloud Identity Services 之前,您需要從 Microsoft Entra 應用連結庫將 SAP Cloud Identity Services 新增至租使用者的企業應用程式清單。 您可以在 Microsoft Entra 系統管理中心或 透過圖形 API 執行此步驟。

如果 SAP Cloud Identity Services 已設定為從 Microsoft Entra 進行單一登錄,且應用程式已存在於企業應用程式的 Microsoft Entra 清單中,請繼續進行下一節。

若要使用 Microsoft Entra 系統管理中心從 Microsoft Entra 應用連結庫新增 SAP Cloud Identity Services,請執行下列步驟:

  1. 以至少雲端應用程式 管理員 istrator 身分登入 Microsoft Entra 系統管理中心
  2. 流覽至 [身分>識別應用程式>企業應用程式>] [新增應用程式]。
  3. 若要從資源庫新增應用程式,請在搜尋方塊中輸入 SAP Cloud Identity Services
  4. 從結果面板選取 [SAP Cloud Identity Services ],然後新增應用程式。 將應用程式新增至您的租用戶時,請稍候幾秒鐘。

設定對 SAP 雲端身分識別服務的自動使用者布建

本節會引導您逐步設定 Microsoft Entra 布建服務,以根據 Microsoft Entra ID 中應用程式的使用者指派,在 SAP Cloud Identity Services 中建立、更新和停用使用者。

若要在 Microsoft Entra ID 中為 SAP Cloud Identity Services 設定自動使用者布建:

  1. 以至少雲端應用程式 管理員 istrator 身分登入 Microsoft Entra 系統管理中心

  2. 流覽至 [身分>識別應用程式企業應用程式]>

    [企業應用程式] 刀鋒視窗的螢幕快照。

  3. 在應用程式清單中,選取應用程式 SAP Cloud Identity Services

    應用程式清單中的 SAP Cloud Identity Services 鏈接螢幕快照。

  4. 選取屬性索引標籤。

  5. 確認 [ 需要指派?] 選項設定為 [是]。 如果設定為 [否],目錄中的所有使用者,包括外部身分識別,都可以存取應用程式,而且您無法檢閱應用程式的存取權。

  6. 選取 [ 布建] 索引 標籤。

    [管理] 選項的螢幕快照,其中已指出 [布建] 選項。

  7. 將 [布 建模式 ] 設定為 [ 自動]。

    [布建模式] 下拉式清單的螢幕快照,其中已指出 [自動] 選項。

  8. 在 [管理員 認證] 區段底下,輸入 https://<tenantID>.accounts.ondemand.com/service/scim;如果https://<tenantid>.trial-accounts.ondemand.com/service/scim試用,請在租使用者 URL 中具有 SAP Cloud Identity Services 的租用戶標識符 分別輸入 管理員 Username 和 管理員 Password擷取的用戶端識別碼客戶端密碼值。 單擊 [測試 連線,以確保 Microsoft Entra ID 可以連線到 SAP Cloud Identity Services。 如果連線失敗,請確定您的 SAP Cloud Identity Services 系統帳戶具有 管理員 許可權,秘密仍然有效,然後再試一次。

    租使用者 URL 和令牌的螢幕快照。

  9. 在 [ 通知電子郵件 ] 欄位中,輸入應接收布建錯誤通知的人員或群組的電子郵件地址,然後核取複選框 - 發生失敗時傳送電子郵件通知。

    通知電子郵件的螢幕快照。

  10. 按一下 [檔案] 。

  11. 在 [ 對應] 區段底下,選取 [ 布建 Microsoft Entra ID 使用者]。

    SAP 雲端識別服務用戶對應的螢幕快照。

  12. 在 [屬性對應] 區段中,檢閱從 Microsoft Entra ID 同步處理至 SAP Cloud Identity Services 的用戶屬性。 如果您看不到 SAP Cloud Identity Services 中可用的屬性作為對應目標,請選取 [顯示進階選項 ],然後選取 [編輯 SAP Cloud Platform Identity Authentication Service 的屬性清單] 來 編輯支援的屬性清單。 新增 SAP Cloud Identity Services 租用戶的屬性。

  13. 檢閱並記錄選取為 [比對] 屬性的來源和目標屬性、具有對優先順序的對應,因為這些屬性用來比對 Microsoft Entra 布建服務的 SAP Cloud Identity Services 中的使用者帳戶,以判斷是否要建立新的使用者或更新現有的使用者。 如需比對的詳細資訊,請參閱 比對來源和目標系統中的使用者。 在後續步驟中,您將確保 SAP 雲端身分識別服務中的任何使用者都已選取 [比 對] 屬性,以防止建立重複的使用者。

  14. 確認 有 對應至應用程式屬性的屬性 IsSoftDeleted對應,或包含 IsSoftDeleted的函式。 當使用者從應用程式取消指派、在 Microsoft Entra 識別碼中虛刪除或封鎖登入時,Microsoft Entra 布建服務會更新對應至 isSoftDeleted的屬性。 如果未對應任何屬性,稍後從應用程式角色取消指派的使用者將繼續存在於應用程式的數據存放區中。

  15. 新增 SAP Cloud Identity Services 或下游目標 SAP 系統所需的任何其他對應。

  16. 選取 [儲存 ] 按鈕以認可任何變更。

    屬性 類型 支持篩選 SAP 雲端身分識別服務的必要專案
    userName String
    emails[type eq "work"].value String
    active 布林值
    displayName String
    urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager 參考
    addresses[type eq "work"].country String
    addresses[type eq "work"].locality String
    addresses[type eq "work"].postalCode String
    addresses[type eq "work"].region String
    addresses[type eq "work"].streetAddress String
    name.givenName String
    name.familyName String
    name.honorificPrefix String
    phoneNumbers[type eq "fax"].value String
    phoneNumbers[type eq "mobile"].value String
    phoneNumbers[type eq "work"].value String
    urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:costCenter String
    urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department String
    urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:division String
    urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber String
    urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:organization String
    locale String
    timezone String
    userType String
    company String
    urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute1 String
    urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute2 String
    urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute3 String
    urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute4 String
    urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute5 String
    urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute6 String
    urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute7 String
    urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute8 String
    urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute9 String
    urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute10 String
    sendMail String
    mailVerified String
  17. 若要設定範圍篩選,請參閱範圍篩選教學課程中提供的下列指示。

  18. 若要啟用 SAP 雲端識別服務的 Microsoft Entra 布建服務,請將 [設定] 區段中的 [布建狀態] 變更為 [開啟]。

    布建狀態切換的螢幕快照。

  19. 針對 [設定] 區段中的 [範圍] 值,選取 [僅同步指派的使用者和群組]。

    布建範圍的螢幕快照。

  20. 當您準備好布建時,請按兩下 [ 儲存]。

    儲存布建設定的螢幕快照。

此作業會啟動 設定 區段中範圍定義之所有使用者的初始同步處理。 如果您已將範圍設定為 [僅同步已指派的使用者和群組],且未將使用者或群組 指派給應用程式,則除非將使用者指派給應用程式,否則不會進行同步處理。

將新的測試使用者從 Microsoft Entra ID 佈建至 SAP 雲端身分識別服務

建議將單一新的 Microsoft Entra 測試使用者指派給 SAP Cloud Identity Services,以測試自動使用者布建設定。

  1. 以至少雲端應用程式 管理員 istrator 和 User 管理員 istrator 身分登入 Microsoft Entra 系統管理中心
  2. 瀏覽至 [身分識別]>[使用者]>[所有使用者]。
  3. 選取 [新增使用者]>[建立新使用者]
  4. 輸入新測試用戶的用戶主體名稱和顯示名稱。 用戶主體名稱必須是唯一的,且與任何目前或先前的 Microsoft Entra 使用者或 SAP Cloud Identity Services 使用者不同。 選取 [檢閱 + 建立],然後選取 [建立]
  5. 建立測試用戶之後,請流覽至 [身分>識別應用程式企業應用程式]。>
  6. 選取 SAP Cloud Identity Services 應用程式。
  7. 選取 [使用者和群組 ],然後選取 [ 新增使用者/群組]。
  8. 在 [使用者和群組] 中,選取 [無選取],然後在文本框中輸入測試使用者的用戶主體名稱。
  9. 選取 [選取],然後選取 [指派]。
  10. 選取 [布建],然後依需求選取 [布建]。
  11. 在 [ 選取使用者或群組 ] 文字框中,輸入測試使用者的用戶主體名稱。
  12. 按兩下 [ 布建]。
  13. 等候佈建完成。 如果成功,您會看到訊息 Modified attributes (successful)

您也可以選擇性地驗證當使用者超出應用程式範圍時,Microsoft Entra 布建服務將布建的內容。

  1. 選取 使用者及群組
  2. 選取測試用戶,然後選取 [ 移除]。
  3. 拿掉測試用戶之後,請選取 [布建],然後依需求選取 [布建]。
  4. 在 [ 選取使用者或群組 ] 文本框中,輸入剛取消指派的測試用戶用戶主體名稱。
  5. 按兩下 [ 布建]。
  6. 等候佈建完成。

最後,您可以從 Microsoft Entra ID 移除測試使用者。

  1. 瀏覽至 [身分識別]>[使用者]>[所有使用者]。
  2. 選取測試用戶,選取 [ 刪除],然後選取 [ 確定]。 此動作會從 Microsoft Entra ID 虛刪除測試使用者。

您也可以從 SAP Cloud Identity Services 移除測試使用者。

確定現有的 SAP 雲端身分識別服務使用者具有必要的比對屬性

在 Microsoft Entra ID 中將非測試使用者指派給 SAP Cloud Identity Services 應用程式之前,您應該確定任何已經在 SAP Cloud Identity Services 中代表與 Microsoft Entra ID 中使用者相同人員的使用者,在 SAP Cloud Identity Services 中填入對應屬性。

在布建對應中,選取為 [比 對] 屬性的屬性會用來比對 Microsoft Entra ID 中的使用者帳戶與 SAP Cloud Identity Services 中的用戶帳戶。 如果 Microsoft Entra 識別碼中有使用者與 SAP Cloud Identity Services 中沒有相符專案,則 Microsoft Entra 布建服務會嘗試建立新的使用者。 如果 Microsoft Entra 識別符中有使用者,且 SAP Cloud Identity Services 中有相符專案,則 Microsoft Entra 布建服務會更新該 SAP Cloud Identity Services 使用者。 基於這個理由,您應該確定 SAP 雲端身分識別服務中的任何使用者都已選取 [比 對] 屬性,否則可能會建立重複的使用者。 如果您需要變更 Microsoft Entra 應用程式屬性對應中的比對屬性,請參閱 在來源和目標系統中比對使用者。

  1. 登入您的 SAP Cloud Identity Services 管理員 主控台,https://<tenantID>.accounts.ondemand.com/adminhttps://<tenantID>.trial-accounts.ondemand.com/admin如果試用的話。

  2. 流覽至 [使用者和授權 > 匯出使用者]。

  3. 選取比對 Microsoft Entra 使用者與 SAP 中使用者所需的所有屬性。 這些屬性包括SCIM ID您在 SAP 系統中可能用作識別碼的、 userNameemails、 和其他屬性。

  4. 選取 [匯出 ],並等候瀏覽器下載 CSV 檔案。

  5. 開啟 PowerShell 視窗。

  6. 在編輯器中輸入下列腳本。 在第一行中,如果您選取了以外的不同比對屬性 userName,請將變數的值 sapScimUserNameField 變更為 SAP Cloud Identity Services 屬性的名稱。 在第二行中,將 自變數變更為匯出 CSV 檔案 Users-exported-from-sap.csv 的檔名,以變更為您下載的檔名。

    $sapScimUserNameField = "userName"
    $existingSapUsers = import-csv -Path ".\Users-exported-from-sap.csv" -Encoding UTF8
    $count = 0
    $warn = 0
    foreach ($u in $existingSapUsers) {
     $id = $u.id
     if (($null -eq $id) -or ($id.length -eq 0)) {
         write-error "Exported CSV file does not contain the id attribute of SAP Cloud Identity Services users."
         throw "id attribute not available, re-export"
         return
     }
     $count++
     $userName = $u.$sapScimUserNameField
     if (($null -eq $userName) -or ($userName.length -eq 0)) {
         write-warning "SAP Cloud Identity Services user $id does not have a $sapScimUserNameField attribute populated"
         $warn++
     }
    }
    write-output "$warn of $count users in SAP Cloud Identity Services did not have the $sapScimUserNameFIeld attribute populated."
    
  7. 執行指令碼。 當腳本完成時,如果有一或多個使用者缺少必要的比對屬性,請在導出的 CSV 檔案或 SAP 雲端身分識別服務 管理員 控制台中查閱這些使用者。 如果這些使用者也存在於 Microsoft Entra 中,您必須先更新這些使用者的 SAP Cloud Identity Services 表示法,讓他們填入相符的屬性。

  8. 更新 SAP 雲端身分識別服務中這些使用者的屬性之後,請從 SAP Cloud Identity Services 重新匯出使用者,如本節的步驟 2-5 中所述,以及本節中的 PowerShell 步驟,以確認 SAP Cloud Identity Services 中沒有任何使用者缺少無法布建給這些使用者的相符屬性。

既然您有從 SAP Cloud Identity Services 取得的所有使用者清單,您將會比對來自應用程式數據存放區的使用者,以及已在 Microsoft Entra ID 中的使用者,以判斷哪些使用者應位於布建範圍內。

在 Microsoft Entra ID 中擷取使用者的標識碼

本節說明如何使用 Microsoft Graph PowerShell Cmdlet 與 Microsoft Entra ID 互動。

第一次貴組織針對此案例使用這些 Cmdlet 時,您必須在全域 管理員 istrator 角色中,才能在租使用者中使用 Microsoft Graph PowerShell。 後續的互動可以使用較低許可權的角色,例如:

  • 如果您預期要建立新的使用者,使用者 管理員 istrator。
  • 如果您只是管理應用程式角色指派,應用程式 管理員 istrator 或 Identity Governance 管理員 istrator
  1. 開啟 PowerShell。

  2. 如果您尚未 安裝 Microsoft Graph PowerShell 模組 ,請使用此命令來安裝 Microsoft.Graph.Users 模組和其他模組:

    Install-Module Microsoft.Graph
    

    如果您已安裝模組,請確定您使用的是最新版本:

    Update-Module microsoft.graph.users,microsoft.graph.identity.governance,microsoft.graph.applications
    
  3. 連線 至 Microsoft Entra 識別碼:

    $msg = Connect-MgGraph -ContextScope Process -Scopes "User.ReadWrite.All,Application.ReadWrite.All,AppRoleAssignment.ReadWrite.All,EntitlementManagement.ReadWrite.All"
    
  4. 如果這是您第一次使用此命令,您可能需要同意允許 Microsoft Graph 命令行工具擁有這些許可權。

  5. 將從應用程式資料存放區取得的使用者清單讀取到 PowerShell 工作階段。 如果使用者在 CSV 檔案中,您可以使用 PowerShell Cmdlet Import-Csv ,並提供上一節中檔案的名稱做為自變數。

    例如,如果從 SAP Cloud Identity Services 取得的檔案名為 Users-exported-from-sap.csv 且位於目前目錄中,請輸入此命令。

    $filename = ".\Users-exported-from-sap.csv"
    $dbusers = Import-Csv -Path $filename -Encoding UTF8
    

    如需另一個範例,如果您使用資料庫或目錄,如果檔案名為 users.csv 且位於目前目錄中,請輸入下列命令:

    $filename = ".\users.csv"
    $dbusers = Import-Csv -Path $filename -Encoding UTF8
    
  6. 選擇與 Microsoft Entra ID 中使用者屬性相符之users.csv檔案的數據行。

    如果您使用 SAP 雲端識別服務,則預設對應是具有 Microsoft Entra ID 屬性的 SAP SCIM 屬性userNameuserPrincipalName

    $db_match_column_name = "userName"
    $azuread_match_attr_name = "userPrincipalName"
    

    針對另一個範例,如果您使用資料庫或目錄,則資料庫中的使用者,其中名為 EMail 的數據行值與 Microsoft Entra 屬性 userPrincipalName中的值相同:

    $db_match_column_name = "EMail"
    $azuread_match_attr_name = "userPrincipalName"
    
  7. 在 Microsoft Entra ID 中擷取這些使用者的標識碼。

    下列 PowerShell 腳本會使用 $dbusers稍早指定的、 $db_match_column_name$azuread_match_attr_name 值。 它會查詢 Microsoft Entra 識別碼,以找出具有來源檔案中每個記錄相符值的屬性的使用者。 如果檔案中有許多使用者從來源 SAP Cloud Identity Services、資料庫或目錄取得,此腳本可能需要幾分鐘的時間才能完成。 如果您的 Microsoft Entra ID 中沒有具有 值的屬性,而且需要使用 contains 或其他篩選表達式,則必須自定義下列步驟 11 中的 屬性,才能使用不同的篩選表達式。

    $dbu_not_queried_list = @()
    $dbu_not_matched_list = @()
    $dbu_match_ambiguous_list = @()
    $dbu_query_failed_list = @()
    $azuread_match_id_list = @()
    $azuread_not_enabled_list = @()
    $dbu_values = @()
    $dbu_duplicate_list = @()
    
    foreach ($dbu in $dbusers) { 
       if ($null -ne $dbu.$db_match_column_name -and $dbu.$db_match_column_name.Length -gt 0) { 
          $val = $dbu.$db_match_column_name
          $escval = $val -replace "'","''"
          if ($dbu_values -contains $escval) { $dbu_duplicate_list += $dbu; continue } else { $dbu_values += $escval }
          $filter = $azuread_match_attr_name + " eq '" + $escval + "'"
          try {
             $ul = @(Get-MgUser -Filter $filter -All -Property Id,accountEnabled -ErrorAction Stop)
             if ($ul.length -eq 0) { $dbu_not_matched_list += $dbu; } elseif ($ul.length -gt 1) {$dbu_match_ambiguous_list += $dbu } else {
                $id = $ul[0].id; 
                $azuread_match_id_list += $id;
                if ($ul[0].accountEnabled -eq $false) {$azuread_not_enabled_list += $id }
             } 
          } catch { $dbu_query_failed_list += $dbu } 
        } else { $dbu_not_queried_list += $dbu }
    }
    
    
  8. 檢視先前查詢的結果。 查看 SAP Cloud Identity Services、資料庫或目錄中是否有任何使用者因為錯誤或遺漏相符專案而無法位於 Microsoft Entra ID 中。

    下列 PowerShell 腳稿會顯示未找到的記錄計數:

    $dbu_not_queried_count = $dbu_not_queried_list.Count
    if ($dbu_not_queried_count -ne 0) {
      Write-Error "Unable to query for $dbu_not_queried_count records as rows lacked values for $db_match_column_name."
    }
    $dbu_duplicate_count = $dbu_duplicate_list.Count
    if ($dbu_duplicate_count -ne 0) {
      Write-Error "Unable to locate Microsoft Entra ID users for $dbu_duplicate_count rows as multiple rows have the same value"
    }
    $dbu_not_matched_count = $dbu_not_matched_list.Count
    if ($dbu_not_matched_count -ne 0) {
      Write-Error "Unable to locate $dbu_not_matched_count records in Microsoft Entra ID by querying for $db_match_column_name values in $azuread_match_attr_name."
    }
    $dbu_match_ambiguous_count = $dbu_match_ambiguous_list.Count
    if ($dbu_match_ambiguous_count -ne 0) {
      Write-Error "Unable to locate $dbu_match_ambiguous_count records in Microsoft Entra ID as attribute match ambiguous."
    }
    $dbu_query_failed_count = $dbu_query_failed_list.Count
    if ($dbu_query_failed_count -ne 0) {
      Write-Error "Unable to locate $dbu_query_failed_count records in Microsoft Entra ID as queries returned errors."
    }
    $azuread_not_enabled_count = $azuread_not_enabled_list.Count
    if ($azuread_not_enabled_count -ne 0) {
     Write-Error "$azuread_not_enabled_count users in Microsoft Entra ID are blocked from sign-in."
    }
    if ($dbu_not_queried_count -ne 0 -or $dbu_duplicate_count -ne 0 -or $dbu_not_matched_count -ne 0 -or $dbu_match_ambiguous_count -ne 0 -or $dbu_query_failed_count -ne 0 -or $azuread_not_enabled_count) {
     Write-Output "You will need to resolve those issues before access of all existing users can be reviewed."
    }
    $azuread_match_count = $azuread_match_id_list.Count
    Write-Output "Users corresponding to $azuread_match_count records were located in Microsoft Entra ID." 
    
  9. 當腳本完成時,如果數據源中的任何記錄不在 Microsoft Entra ID 中,就會指出錯誤。 如果應用程式資料存放區中使用者的所有記錄都可能以 Microsoft Entra ID 中的使用者身分,您必須調查哪些記錄不相符,以及原因為何。

    例如,某人的電子郵件位址和 userPrincipalName 可能已在 Microsoft Entra ID 中變更,而不會在應用程式的數據源中更新其對應的 mail 屬性。 或者,使用者可能已經離開組織,但仍位於應用程式的數據源中。 或者,應用程式數據源中可能有廠商或超級系統管理員帳戶,不會對應至 Microsoft Entra 識別碼中的任何特定人員。

  10. 如果有使用者無法位於 Microsoft Entra ID 中,或沒有作用中且無法登入,但您想要在 SAP Cloud Identity Services、資料庫或目錄中更新其存取權,或更新其屬性,您必須更新應用程式、比對規則,或更新或為其建立 Microsoft Entra 使用者。 如需要進行哪些變更的詳細資訊,請參閱 管理與 Microsoft Entra ID 中不符合使用者的應用程式中的對應和用戶帳戶。

    如果您選擇在 Microsoft Entra ID 中建立使用者的選項,您可以使用下列其中一項來大量建立使用者:

    • CSV 檔案,如在 Microsoft Entra 系統管理中心大量建立使用者中所述
    • New-MgUser Cmdlet

    請確定這些新使用者已填入 Microsoft Entra ID 所需的屬性,以便稍後將它們與應用程式中的現有使用者相符,以及 Microsoft Entra ID 所需的屬性,包括 userPrincipalNamemailNicknamedisplayName。 在 userPrincipalName 目錄中的所有使用者中,必須是唯一的。

    例如,您可能有資料庫中的使用者,其中名為 EMail 的數據行值是您想要作為 Microsoft Entra 使用者主體名稱使用的值、數據行中的值包含 Microsoft Entra ID 郵件暱稱,而數據行中的AliasFull name值則包含使用者的顯示名稱:

    $db_display_name_column_name = "Full name"
    $db_user_principal_name_column_name = "Email"
    $db_mail_nickname_column_name = "Alias"
    

    然後,您可以使用此腳本,為 SAP Cloud Identity Services、資料庫或目錄與 Microsoft Entra ID 中的使用者不相符的使用者建立 Microsoft Entra 使用者。 請注意,您可能需要修改此腳本,以新增組織所需的其他 Microsoft Entra 屬性,或 如果 $azuread_match_attr_name 不是 mailNicknameuserPrincipalName,才能提供該 Microsoft Entra 屬性。

    $dbu_missing_columns_list = @()
    $dbu_creation_failed_list = @()
    foreach ($dbu in $dbu_not_matched_list) {
       if (($null -ne $dbu.$db_display_name_column_name -and $dbu.$db_display_name_column_name.Length -gt 0) -and
           ($null -ne $dbu.$db_user_principal_name_column_name -and $dbu.$db_user_principal_name_column_name.Length -gt 0) -and
           ($null -ne $dbu.$db_mail_nickname_column_name -and $dbu.$db_mail_nickname_column_name.Length -gt 0)) {
          $params = @{
             accountEnabled = $false
             displayName = $dbu.$db_display_name_column_name
             mailNickname = $dbu.$db_mail_nickname_column_name
             userPrincipalName = $dbu.$db_user_principal_name_column_name
             passwordProfile = @{
               Password = -join (((48..90) + (96..122)) * 16 | Get-Random -Count 16 | % {[char]$_})
             }
          }
          try {
            New-MgUser -BodyParameter $params
          } catch { $dbu_creation_failed_list += $dbu; throw }
       } else {
          $dbu_missing_columns_list += $dbu
       }
    }
    
  11. 將任何遺漏的使用者新增至 Microsoft Entra ID 之後,請再次執行步驟 7 中的腳本。 然後從步驟 8 執行腳本。 檢查未報告任何錯誤。

    $dbu_not_queried_list = @()
    $dbu_not_matched_list = @()
    $dbu_match_ambiguous_list = @()
    $dbu_query_failed_list = @()
    $azuread_match_id_list = @()
    $azuread_not_enabled_list = @()
    $dbu_values = @()
    $dbu_duplicate_list = @()
    
    foreach ($dbu in $dbusers) { 
       if ($null -ne $dbu.$db_match_column_name -and $dbu.$db_match_column_name.Length -gt 0) { 
          $val = $dbu.$db_match_column_name
          $escval = $val -replace "'","''"
          if ($dbu_values -contains $escval) { $dbu_duplicate_list += $dbu; continue } else { $dbu_values += $escval }
          $filter = $azuread_match_attr_name + " eq '" + $escval + "'"
          try {
             $ul = @(Get-MgUser -Filter $filter -All -Property Id,accountEnabled -ErrorAction Stop)
             if ($ul.length -eq 0) { $dbu_not_matched_list += $dbu; } elseif ($ul.length -gt 1) {$dbu_match_ambiguous_list += $dbu } else {
                $id = $ul[0].id; 
                $azuread_match_id_list += $id;
                if ($ul[0].accountEnabled -eq $false) {$azuread_not_enabled_list += $id }
             } 
          } catch { $dbu_query_failed_list += $dbu } 
        } else { $dbu_not_queried_list += $dbu }
    }
    
    $dbu_not_queried_count = $dbu_not_queried_list.Count
    if ($dbu_not_queried_count -ne 0) {
      Write-Error "Unable to query for $dbu_not_queried_count records as rows lacked values for $db_match_column_name."
    }
    $dbu_duplicate_count = $dbu_duplicate_list.Count
    if ($dbu_duplicate_count -ne 0) {
      Write-Error "Unable to locate Microsoft Entra ID users for $dbu_duplicate_count rows as multiple rows have the same value"
    }
    $dbu_not_matched_count = $dbu_not_matched_list.Count
    if ($dbu_not_matched_count -ne 0) {
      Write-Error "Unable to locate $dbu_not_matched_count records in Microsoft Entra ID by querying for $db_match_column_name values in $azuread_match_attr_name."
    }
    $dbu_match_ambiguous_count = $dbu_match_ambiguous_list.Count
    if ($dbu_match_ambiguous_count -ne 0) {
      Write-Error "Unable to locate $dbu_match_ambiguous_count records in Microsoft Entra ID as attribute match ambiguous."
    }
    $dbu_query_failed_count = $dbu_query_failed_list.Count
    if ($dbu_query_failed_count -ne 0) {
      Write-Error "Unable to locate $dbu_query_failed_count records in Microsoft Entra ID as queries returned errors."
    }
    $azuread_not_enabled_count = $azuread_not_enabled_list.Count
    if ($azuread_not_enabled_count -ne 0) {
     Write-Warning "$azuread_not_enabled_count users in Microsoft Entra ID are blocked from sign-in."
    }
    if ($dbu_not_queried_count -ne 0 -or $dbu_duplicate_count -ne 0 -or $dbu_not_matched_count -ne 0 -or $dbu_match_ambiguous_count -ne 0 -or $dbu_query_failed_count -ne 0 -or $azuread_not_enabled_count -ne 0) {
     Write-Output "You will need to resolve those issues before access of all existing users can be reviewed."
    }
    $azuread_match_count = $azuread_match_id_list.Count
    Write-Output "Users corresponding to $azuread_match_count records were located in Microsoft Entra ID." 
    

確定現有的 Microsoft Entra 使用者具有必要的屬性

啟用自動使用者布建之前,您必須決定 Microsoft Entra ID 中的哪些使用者需要存取 SAP Cloud Identity Services,然後您必須檢查以確定這些使用者在 Microsoft Entra ID 中具有必要的屬性,而且這些屬性會對應至 SAP Cloud Identity Services 的預期架構。

  • 根據預設,Microsoft Entra 使用者 userPrincipalName 屬性的值會對應至 userName SAP Cloud Identity Services 的 和 emails[type eq "work"].value 屬性。 如果使用者的電子郵件地址與其用戶主體名稱不同,您可能需要變更此對應。
  • 如果公司 ZIP/郵遞區編碼格式不符合公司國家/地區,SAP 雲端身分識別服務可能會忽略 屬性的值 postalCode
  • 根據預設,Microsoft Entra 屬性 department 會對應至 SAP Cloud Identity Services urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department 屬性。 如果 Microsoft Entra 使用者具有 屬性的值 department ,這些值必須符合已在 SAP Cloud Identity Services 中設定的部門,否則建立或更新使用者將會失敗。 department如果 Microsoft Entra 使用者中的值與 SAP 環境中的值不一致,請在指派使用者之前移除對應。
  • SAP Cloud Identity Services 的 SCIM 端點需要特定屬性具有特定格式。 您可以在這裡深入了解這些屬性及其特定格式

在 Microsoft Entra ID 中將使用者指派給 SAP Cloud Identity Services 應用程式

Microsoft Entra ID 會使用稱為 指派 的概念來判斷哪些用戶應該接收所選應用程式的存取權。 在自動使用者布建的內容中,如果 Scope設定 值為 [僅同步指派的使用者和群組],則只有已指派給 Microsoft Entra ID 中該應用程式應用程式角色的使用者和群組會與 SAP Cloud Identity Services 同步處理。 將使用者指派給 SAP Cloud Identity Services 時,您必須在 [指派] 對話框中選取任何有效的應用程式特定角色(如果有的話)。 具有 預設存取 角色的使用者會排除在布建之外。 目前 SAP 雲端身分識別服務的唯一可用角色是 User

如果已為應用程式啟用布建,請在將更多使用者指派給應用程式之前,先確認應用程式布建不在 隔離 區中。 在您繼續進行之前,請先解決造成隔離的任何問題。

檢查 SAP Cloud Identity Services 中存在且尚未在 Microsoft Entra 識別符中指派給應用程式的使用者

先前的步驟已評估 SAP 雲端身分識別服務中的使用者是否也以 Microsoft Entra ID 中的使用者身分存在。 不過,它們目前可能未全部指派給 Microsoft Entra 識別碼中的應用程式角色。 因此,後續步驟是查看哪些用戶沒有應用程式角色的指派。

  1. 使用 PowerShell,查閱應用程式服務主體的服務主體標識碼。

    例如,如果企業應用程式命名 SAP Cloud Identity Services為 ,請輸入下列命令:

    $azuread_app_name = "SAP Cloud Identity Services"
    $azuread_sp_filter = "displayName eq '" + ($azuread_app_name -replace "'","''") + "'"
    $azuread_sp = Get-MgServicePrincipal -Filter $azuread_sp_filter -All
    
  2. 擷取目前在 Microsoft Entra ID 中指派給應用程式的使用者。

    這會以上一個命令中設定的 $azuread_sp 變數為基礎。

    $azuread_existing_assignments = @(Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -All)
    
  3. 比較 SAP Cloud Identity Services 和 Microsoft Entra ID 中已有使用者的使用者識別符清單,以及目前在 Microsoft Entra ID 中指派給應用程式的使用者標識符。 此文稿會以上一節中設定的 $azuread_match_id_list 變數為基礎:

    $azuread_not_in_role_list = @()
    foreach ($id in $azuread_match_id_list) {
       $found = $false
       foreach ($existing in $azuread_existing_assignments) {
          if ($existing.principalId -eq $id) {
             $found = $true; break;
          }
       }
       if ($found -eq $false) { $azuread_not_in_role_list += $id }
    }
    $azuread_not_in_role_count = $azuread_not_in_role_list.Count
    Write-Output "$azuread_not_in_role_count users in the application's data store are not assigned to the application roles."
    

    如果未將零位使用者指派給應用程式角色,表示所有使用者都指派給應用程式角色,則這表示 Microsoft Entra ID 和 SAP Cloud Identity Services 之間沒有通用的使用者,因此不需要變更。 不過,如果 SAP Cloud Identity Services 中的一或多個使用者目前未指派給應用程式角色,您必須繼續程式,並將其新增至其中一個應用程式角色。

  4. User選取應用程式服務主體的角色。

    $azuread_app_role_name = "User"
    $azuread_app_role_id = ($azuread_sp.AppRoles | where-object {$_.AllowedMemberTypes -contains "User" -and $_.DisplayName -eq "User"}).Id
    if ($null -eq $azuread_app_role_id) { write-error "role $azuread_app_role_name not located in application manifest"}
    
  5. 為已存在於 SAP Cloud Identity Services 和 Microsoft Entra 中的使用者建立應用程式角色指派,且目前沒有應用程式的角色指派:

    foreach ($u in $azuread_not_in_role_list) {
       $res = New-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -AppRoleId $azuread_app_role_id -PrincipalId $u -ResourceId $azuread_sp.Id
    }
    
  6. 等候一分鐘,變更在 Microsoft Entra ID 內傳播。

  7. 在下一個 Microsoft Entra 布建週期中,Microsoft Entra 布建服務會比較指派給應用程式的這些使用者的表示法,以及 SAP Cloud Identity Services 中的表示法,並更新 SAP Cloud Identity Services 使用者,以取得來自 Microsoft Entra ID 的屬性。

指派剩餘的使用者並監視初始同步處理

測試完成後,使用者已成功布建至 SAP Cloud Identity Services,而任何現有的 SAP 雲端身分識別服務使用者都指派給應用程式角色,您可以依照此處的其中一個指示,將任何其他授權的使用者指派給 SAP Cloud Identity Services 應用程式:

將使用者指派給應用程式角色並處於布建範圍之後,Microsoft Entra 布建服務就會將它們布建至 SAP Cloud Identity Services。 請注意,只要 Microsoft Entra 布建服務正在執行,初始同步處理的執行時間會比後續的同步處理時間長約每 40 分鐘一次。

如果您沒有看到布建的使用者,請檢閱疑難解答指南中的 步驟,以瞭解未布建的使用者。 然後,透過 Microsoft Entra 系統管理中心Graph API 檢查布建記錄。 將記錄篩選為 [失敗] 狀態。 如果 ErrorCode 為 DuplicateTargetEntries 發生失敗,這表示布建比對規則中的模棱兩可,您必須更新 Microsoft Entra 使用者或用於比對的對應,以確保每個 Microsoft Entra 使用者都符合一個應用程式使用者。 然後篩選記錄至 [建立] 動作並略過狀態。 如果使用者已略過 NotEffectivelyEntitled 的 SkipReason 程式代碼,這可能表示 Microsoft Entra ID 中的使用者帳戶未相符,因為使用者帳戶狀態為 [已停用]。

設定單一登錄

您也可以選擇為 SAP Cloud Identity Services 啟用 SAML 型單一登錄,請遵循 SAP Cloud Identity Services 單一登錄教學課程中提供的指示。 單一登錄可以獨立設定自動使用者布建,不過這兩個功能彼此互補。

監視布建

您可以使用 [ 同步處理詳細 數據] 區段來監視進度,並遵循布建活動報告的連結,其中說明 Microsoft Entra 布建服務在 SAP Cloud Identity Services 上執行的所有動作。 您也可以透過 Microsoft Graph API 監視布建專案。

如需如何讀取 Microsoft Entra 布建記錄的詳細資訊,請參閱 關於自動用戶帳戶布建的報告。

維護應用程式角色指派

當指派給應用程式的使用者在 Microsoft Entra ID 中更新時,這些變更會自動布建至 SAP Cloud Identity Services。

如果您有 Microsoft Entra ID 控管,您可以將 Microsoft Entra ID 中 SAP Cloud Identity Services 的應用程式角色指派變更自動化,以新增或移除加入或移除人員加入組織的工作分派,或離開或變更角色。

更多資源

下一步