共用方式為


教學課程:設定 SAP 雲端識別服務的自動使用者佈建

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

注意

本教學課程說明建置在 Microsoft Entra 使用者佈建服務中的連接器。 如需此服務的用途、運作方式和常見問題等重要詳細資訊,請參閱使用 Microsoft Entra ID 自動對 SaaS 應用程式進行使用者佈建和取消佈建。 SAP 雲端識別服務也有自己的個別連接器,可從 Microsoft entra ID 讀取使用者和群組。 如需詳細資訊,請參閱 SAP 雲端識別服務 - 身分識別佈建 - 以 Microsoft Entra ID 作為來源系統

必要條件

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

注意

也可以在 Microsoft Entra 美國政府雲端環境中使用此整合。 您可以在 Microsoft Entra 美國政府雲端應用程式庫中找到此應用程式,並以與公用雲端環境相同的方式進行設定。

如果您還沒有 Microsoft Entra ID 中的使用者,請從教學課程 規劃部署 Microsoft Entra,以使用 SAP 來源和目標應用程式佈建使用者 開始。 該教學課程說明如何連接 Microsoft Entra 與組織中背景工作角色清單的權威來源,例如 SAP SuccessFactors。 它也會示範如何使用 Microsoft Entra 來設定這些背景工作角色的身分識別,讓他們可以登入一或多個 SAP 應用程式,例如 SAP ECC 或 SAP S/4HANA。

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

SAP 雲端識別服務 - 身分識別佈建服務

  1. 如果此為試用版,請登入您的 SAP 雲端識別服務管理員主控台,https://<tenantID>.accounts.ondemand.com/adminhttps://<tenantID>.trial-accounts.ondemand.com/admin。 瀏覽至 [使用者和授權]> [管理員]

    SAP 雲端識別服務管理控制台的螢幕擷取畫面。

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

    注意

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

  3. 在 [設定授權] 底下,開啟 管理使用者 切換按鈕。 按一下 [儲存] 以建立系統。

    SAP 雲端識別服務新增 SCIM 的螢幕擷取畫面。

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

  5. 複製 SAP 所產生的 [用戶端識別碼][用戶端密碼]。 將會分別在 [系統管理員使用者名稱] 和 [系統管理員密碼] 欄位中輸入這些值。 這會在 SAP 雲端識別服務應用程式的 [佈建] 索引標籤中完成,您將在下一節中設定。

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

將 Microsoft Entra ID 設定為將使用者自動佈建到 SAP 雲端識別服務之前,您需要從 Microsoft Entra 應用程式資源庫將 SAP 雲端識別服務新增至租用戶的企業應用程式清單。 您可以在 Microsoft Entra 系統管理中心中執行此步驟,或透過 Graph API

如果 SAP 雲端識別服務已設定為從 Microsoft Entra 進行單一登入,且應用程式已存在於企業應用程式的 Microsoft Entra 清單中,請繼續進行下一節。

若要使用 Microsoft Entra 系統管理中心從 Microsoft Entra 應用程式資源庫新增 SAP 雲端識別服務,請執行下列步驟:

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

設定 SAP 雲端識別服務以進行自動使用者佈建

本節將引導逐步設定 Microsoft Entra 佈建服務,以根據 Microsoft Entra ID 中的使用者指派給應用程式的情況,在 SAP 雲端識別服務中建立、更新和停用使用者。

若要在 Microsoft Entra ID 中為 SAP 雲端識別服務設定自動使用者佈建:

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

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

    企業應用程式刀鋒視窗的螢幕擷取畫面。

  3. 在應用程式清單中,選取應用程式 [SAP 雲端識別服務]

    應用程式清單中的 SAP 雲端識別服務連結螢幕擷取畫面。

  4. 選取屬性索引標籤。

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

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

    [管理] 選項的螢幕擷取畫面,並已指出 [佈建] 選項。

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

    [佈建模式] 下拉式清單的螢幕擷取畫面,並已指出 [自動] 選項。

  8. [系統管理員認證] 區段底下,輸入 https://<tenantID>.accounts.ondemand.com/service/scim,或者如果是試用版則輸入 https://<tenantid>.trial-accounts.ondemand.com/service/scim,請在 租用戶 URL 中使用 SAP 雲端識別服務的租用戶識別碼。 輸入稍早分別在 系統管理員使用者名稱系統管理員密碼 中取得的 用戶端識別碼用戶端密碼 值。 按一下 [測試連線],以確認 Microsoft Entra ID 可以連線到 SAP 雲端識別服務。 如果連線失敗,請確定您的 SAP 雲端識別服務系統帳戶具有系統管理員權限、密碼仍然有效,並再試一次。

    租用戶 URL 和權杖的螢幕擷取畫面。

  9. 在 [通知電子郵件] 欄位中,輸入應該收到佈建錯誤通知的個人或群組電子郵件地址,然後選取 [發生失敗時傳送電子郵件通知] 核取方塊。

    通知電子郵件的螢幕擷取畫面。

  10. 按一下 [檔案] 。

  11. [對應] 區段下,選取 [佈建 Microsoft Entra ID 使用者]

    SAP 雲端識別服務使用者對應的螢幕擷取畫面。

  12. [屬性對應] 區段中,檢閱從 Microsoft Entra ID 同步至 SAP 雲端識別服務的使用者屬性。 如果您沒有看到 SAP 雲端識別服務中可用的屬性作為對應目標,請選取 [顯示進階選項],然後選取 [編輯 SAP Cloud Platform Identity Authentication Service 的屬性清單]編輯支援的屬性清單。 新增 SAP 雲端識別服務租用戶的屬性。

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

  14. 確認 IsSoftDeleted ,或包含 IsSoftDeleted 的函式,是否有應用程式屬性的屬性對應。 當使用者取消指派給應用程式、在 Microsoft Entra ID 中虛刪除,或遭到封鎖而無法登入時,Microsoft Entra 佈建服務會更新對應至 isSoftDeleted 的屬性。 如果未對應任何屬性,則後來從應用程式角色取消指派的使用者會繼續存在於應用程式的資料存放區中。

  15. 新增 SAP 雲端識別服務或下游目標 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 雲端識別服務,以測試自動使用者佈建的設定。

  1. 以至少 雲端應用程式管理員 和使用者系統管理員的身分登入 Microsoft Entra 系統管理中心
  2. 瀏覽至 [身分識別]>[使用者]>[所有使用者]。
  3. 選取 [新增使用者]>[建立新使用者]
  4. 輸入新測試使用者的 使用者主體名稱顯示名稱。 使用者主體名稱必須是唯一的,且與任何目前或先前 Microsoft Entra 使用者或 SAP 雲端識別服務使用者不同。 選取 [檢閱 + 建立],然後選取 [建立]
  5. 在建立測試使用者之後,瀏覽至 [身分識別]>[應用程式]>[企業應用程式]
  6. 選取 [SAP 雲端識別服務] 應用程式。
  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 雲端識別服務移除測試使用者。

確定現有的 SAP 雲端識別服務使用者具有必要的相符屬性

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

在佈建對應中,選取作為 [比對] 屬性的屬性用於將 Microsoft Entra ID 中的使用者帳戶與 SAP 雲端識別服務中的使用者帳戶進行比對。 如果 Microsoft Entra ID 中的使用者與 SAP 雲端識別服務中的使用者不相符,則 Microsoft Entra 佈建服務會嘗試建立新的使用者。 如果 Microsoft Entra ID 中的使用者與 SAP 雲端識別服務中的使用者相符,則 Microsoft Entra 佈建服務會更新 SAP 雲端識別服務中的使用者。 因此,您應確保 SAP 雲端識別服務中已有的任何使用者都已選取屬性,做為已填入 [比對] 屬性,否則可能會建立重複的使用者。 如果您需要變更 Microsoft Entra 應用程式屬性對應中的比對屬性,請參閱 比對來源和目標系統中的使用者

  1. 如果此為試用版,請登入您的 SAP 雲端識別服務管理員主控台,https://<tenantID>.accounts.ondemand.com/adminhttps://<tenantID>.trial-accounts.ondemand.com/admin

  2. 瀏覽至 [使用者 & 授權]>[匯出使用者]

  3. 選取在 SAP 中比對 Microsoft Entra 使用者所需的所有屬性。 這些屬性包括 SCIM IDuserNameemails,以及您可能在 SAP 系統中當成識別碼使用的其他屬性。

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

  5. 開啟 PowerShell 視窗。

  6. 將下列指令碼輸入編輯器。 在第一行中,如果您選取 userName 以外的不同比對屬性,請將 sapScimUserNameField 變數的值變更為 SAP 雲端識別服務屬性的名稱。 在第二行中,將引數變更為匯出之 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 雲端識別服務代表項目,讓他們填入比對的屬性。

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

既然您有從 SAP 雲端識別服務取得的所有使用者清單,您將會比對來自應用程式資料存放區的使用者,且使用者已經位於 Microsoft Entra ID,以判斷哪些使用者應位於佈建範圍內。

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

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

組織在此情況下第一次使用這些 Cmdlet 時,您必須是全域管理員角色,才能在租用戶中使用 Microsoft Graph PowerShell。 後續的互動可以使用特殊權限較低的角色,例如:

  • 使用者管理員 (如果您預期會建立新的使用者)。
  • 應用程式管理員或 Identity Governance 管理員 (如果您只是管理應用程式角色指派)。
  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 ID:

    $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 雲端識別服務取得的檔案名為 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. 選擇 users.csv 檔案的資料行,用以比對 Microsoft Entra ID 中的使用者屬性。

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

    $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 ID 來找出使用者,而該使用者有一個屬性的值符合來源檔案中的每一筆記錄。 如果檔案中有許多使用者從來源 SAP 雲端識別服務、資料庫或目錄取得,此指令碼可能需要幾分鐘的時間才能完成。 如果您在 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 雲端識別服務、資料庫或目錄中是否有任何使用者因為錯誤或遺漏相符項目而無法位於 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 中也有使用者,則您必須調查哪些記錄不相符及原因。

    例如,Microsoft Entra ID 中可能變更某人的電子郵件地址和 userPrincipalName,但在應用程式的資料來源中未更新其對應的 mail 屬性。 或者,使用者可能已離開組織,但仍留在應用程式的資料來源中。 或者,應用程式的資料來源中可能有廠商或超級管理員帳戶未對應至 Microsoft Entra ID 中的任何特定人員。

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

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

    請務必為這些新使用者填入必要的屬性,以供 Microsoft Entra ID 稍後比對應用程式中的現有使用者,以及 Microsoft Entra ID 要求的屬性,包括 userPrincipalNamemailNicknamedisplayNameuserPrincipalName 在目錄中的所有使用者中必須是唯一的。

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

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

    然後,您可以使用此指令碼,為 SAP 雲端識別服務、資料庫或目錄中,與 Microsoft Entra ID 中使用者不相符的項目建立 Microsoft Entra 使用者。 請注意,您可能需要修改此指令碼,以新增組織所需的其他 Microsoft Entra 屬性,或如果 $azuread_match_attr_name 既不是 mailNickname 也不是 userPrincipalName,才能提供該 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 雲端識別服務,然後您必須檢查以確定這些使用者在 Microsoft Entra ID 中具有必要的屬性,而且這些屬性會對應至 SAP 雲端識別服務的預期結構描述。

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

將使用者指派給 Microsoft Entra ID 中 SAP 雲端識別服務應用程式

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

如果已為應用程式啟用佈建,請在指派更多使用者給應用程式之前,檢查應用程式佈建不是 隔離 狀態。 繼續之前,請解決造成隔離的任何問題。

檢查 SAP 雲端識別服務中的使用者,且尚未在 Microsoft Entra ID 指派給應用程式

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

  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 雲端識別服務和 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 雲端識別服務之間沒有共同的使用者,因此不需要變更。 不過,如果 SAP 雲端識別服務中目前尚有一或多個使用者未指派給應用程式角色,您必須繼續執行程序,將這些使用者新增至應用程式的其中一個角色。

  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 雲端識別服務和 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 雲端識別服務中的代表項目,並更新 SAP 雲端識別服務使用者,以取得來自 Microsoft Entra ID 的屬性。

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

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

將使用者指派給應用程式角色並處於佈建範圍之後,Microsoft Entra 佈建服務會將他們佈建至 SAP 雲端識別服務。 請注意,初始同步處理的執行時間比後續的同步處理要長,只要Microsoft Entra 佈建服務仍在執行,大約每 40 分鐘就會發生一次。

如果沒有看到正在佈建使用者,請檢閱 未佈建使用者疑難排解指南 中的步驟。 然後,透過 Microsoft Entra 系統管理中心Graph API 檢查佈建記錄。 將記錄篩選為失敗狀態。 如果失敗,而 ErrorCode 為 DuplicateTargetEntries,這表示佈建比對規則含糊不清,您必須更新用於比對的 Microsoft Entra 使用者或對應,以確保每個 Microsoft Entra 使用者都符合一個應用程式使用者。 然後將記錄篩選為建立動作和已略過狀態。 如果已略過使用者,而 SkipReason 代碼為 NotEffectivelyEntitled,這可能表示因為使用者帳戶狀態為 已停用,導致未比對 Microsoft Entra ID 中的使用者帳戶。

設定單一登入

建議您選擇為 SAP 雲端識別服務啟用 SAML 型單一登入,請遵循 SAP 雲端識別服務單一登入教學課程 中提供的指示。 單一登入和自動使用者佈建可以分開設定,但這兩個功能是互補的。

監視佈建

您可以使用 [同步處理詳細資料] 區段來監視進度,並遵循連結來佈建活動報告,其中會描述 SAP 雲端識別服務上的 Microsoft Entra 佈建服務所執行的所有動作。 您也可以透過 Microsoft Graph API 監視佈建專案。

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

維護應用程式角色指派

當指派給應用程式的使用者在 Microsoft Entra ID 中更新時,這些變更會自動佈建至 SAP 雲端識別服務。

如果您有 Microsoft Entra ID 控管,您可以在 Microsoft Entra ID 中自動變更 SAP 雲端識別服務的應用程式角色指派,以在人員加入組織,或是離開或變更角色時新增或移除人員。

更多資源

下一步