本文演示了配置从 Microsoft Entra ID 到 SAP Cloud Identity Services 的预配的步骤。 其目标是设置 Microsoft Entra ID 以自动向 SAP 云标识服务预配和取消预配用户,以便这些用户可以向 SAP 云标识服务进行身份验证,并有权访问其他 SAP 工作负载。 SAP Cloud Identity Services 支持将其本地标识目录中的信息预配到其他作为目标系统的 SAP 应用程序中。
注意
本文介绍在 Microsoft Entra 用户预配服务中内置的连接器。 有关此服务的用途、运作机制及常见问题的重要详细信息,请参阅 使用 Microsoft Entra ID 自动预配和取消预配 SaaS 应用程序。 SAP 云标识服务也有自己的单独连接器,用于从 Microsoft Entra ID 读取用户和组。 有关详细信息,请参阅 SAP Cloud Identity Services - Identity Provisioning - Microsoft Entra ID 作为源系统。
先决条件
本文中概述的方案假定你已具备以下先决条件:
- SAP 云标识服务租户
- SAP 云标识服务中具有管理员权限的用户帐户。
注意
此集成也可以通过 Microsoft Entra 美国政府云环境使用。 可以在“Microsoft Entra 美国政府云应用程序库”中找到此应用程序,并以与公有云环境相同的方式对其进行配置。
如果您尚未在 Microsoft Entra ID 中拥有用户,请从文章 计划部署 Microsoft Entra,以使用 SAP 源应用程序和目标应用程序进行用户预配 开始。 本文说明如何将 Microsoft Entra 与组织中的权威来源(如 SAP SuccessFactors)连接,以获取员工名单。 教程中还演示了如何使用 Microsoft Entra 为这些辅助角色设置身份,以便其能够登录一个或多个 SAP 应用程序(例如 SAP ECC 或 SAP S/4HANA)。
如果要在生产环境中配置到 SAP Cloud Identity Services 中的预配,并计划使用 Microsoft Entra ID Governance 管控对 SAP 工作负载的访问,那么在继续之前,请先查看配置 Microsoft Entra ID 用于身份治理的先决条件。
设置 SAP 云标识服务以进行预配
在本文中,你将在 SAP Cloud Identity Services 中添加一个管理系统,然后配置 Microsoft Entra。
登录到 SAP 云标识服务管理控制台
https://<tenantID>.accounts.ondemand.com/admin
(如果是试用,则https://<tenantID>.trial-accounts.ondemand.com/admin
)。 导航到“用户和授权”>“管理员”。按左侧面板上的“+添加”按钮,向列表中添加新的管理员。 选择“添加系统”并输入系统名称。
注意
SAP 云标识服务中的管理员标识必须是“系统”类型。 预配时,管理员用户无法向 SAP SCIM API 进行身份验证。 SAP Cloud Identity Services 不允许在创建系统后更改系统的名称。
在“配置授权”下,开启“管理用户”的切换按钮。 然后选择“ 保存 ”以创建系统。
创建管理员系统后,向该系统添加新机密。
复制 SAP 生成的 客户端 ID 和 客户端密码 。 这些值分别在“管理员用户名”和“管理员密码”字段中输入。 这是在 SAP Cloud Identity Services 应用程序的“预配”选项卡中完成的,在下一部分进行设置。
SAP 云标识服务可映射到一个或多个 SAP 应用程序作为目标系统。 检查用户上是否有通过 SAP 云标识服务预配这些 SAP 应用程序所需的任何属性。 本文假设 SAP Cloud Identity Services 和下游目标系统需要两个属性,
userName
以及emails[type eq "work"].value
。 如果 SAP 目标系统需要其他属性,并且这些属性不属于Microsoft Entra ID 用户架构,则可能需要配置 同步扩展属性。
从库中添加 SAP 云标识服务
在将 Microsoft Entra ID 配置为自动向 SAP 云标识服务预配用户之前,需要将 Microsoft Entra 应用程序库中的 SAP 云标识服务添加到租户的企业应用程序列表中。 可以在 Microsoft Entra 管理中心或通过 图形 API 执行此步骤。
如果 SAP 云标识服务已配置为从 Microsoft Entra 进行单一登录,并且企业应用程序的 Microsoft Entra 列表中已存在应用程序,那么请继续下一部分。
若要使用 Microsoft Entra 管理中心添加 Microsoft Entra 应用程序库中的 SAP 云标识服务,请执行以下步骤:
- 以至少云应用程序管理员身份登录到 Microsoft Entra 管理中心。
- 浏览到 Entra ID>企业应用>新应用。
- 若要添加库中的应用,请在搜索框中键入“SAP 云标识服务”。
- 从结果面板中选择“SAP 云标识服务”,然后添加该应用。 在该应用添加到租户时等待几秒钟。
为 SAP 云标识服务配置用户自动预配
本部分将引导你完成配置 Microsoft Entra 预配服务的步骤,以便根据对 Microsoft Entra ID 中应用程序的用户分配,在 SAP 云标识服务中创建、更新和禁用用户。
要在 Microsoft Entra ID 中为 SAP 云标识服务配置自动用户预配,请执行以下操作:
以至少云应用程序管理员身份登录到 Microsoft Entra 管理中心。
浏览到 Entra ID>企业应用
在应用程序列表中,选择应用程序“SAP 云标识服务”。
选择“属性”选项卡。
验证“需要分配?”选项是否设置为“是”。 如果设置为“否”,则目录中的所有用户(包括外部标识)都可以访问应用程序,并且无法评审对应用程序的访问。
选择“预配”选项卡。
将“预配模式”设置为“自动”。
在“管理员凭据”部分下,输入 (如果是试用版,则输入
https://<tenantID>.accounts.ondemand.com/service/scim
),并在“租户 URL”中输入 SAP 云标识服务的租户 IDhttps://<tenantid>.trial-accounts.ondemand.com/service/scim
。 输入之前分别在“管理员用户名”和“管理员密码”中检索的“客户端 ID”和“客户端密码”值。 选择 “测试连接 ”以确保Microsoft Entra ID 可以连接到 SAP Cloud Identity Services。 如果连接失败,请确保 SAP 云标识服务系统帐户具有管理员权限,密码仍然有效,然后重试。在“通知电子邮件”字段中,输入应接收预配错误通知的个人或组的电子邮件地址,并选中复选框“发生故障时发送电子邮件通知” 。
选择“ 保存”。
在“映射”部分下,选择“预配 Microsoft Entra ID 用户”。
在“ 属性映射 ”部分中查看从 Microsoft Entra ID 同步到 SAP Cloud Identity Services 的用户属性。 如果看不到 SAP Cloud Identity Services 中可用作映射目标的属性,请选择“显示高级选项”,然后选择“编辑 SAP Cloud Platform Identity Authentication 服务的属性列表”以编辑受支持的属性列表。 添加 SAP 云标识服务租户的属性。
查看并记录已选择为匹配属性的源属性和目标属性、具有匹配优先级的映射,因为这些属性用于匹配 Microsoft Entra 预配服务的 SAP 云标识服务中的用户帐户,以确定是创建新用户还是更新现有用户。 有关匹配的详细信息,请参阅 源系统和目标系统中的匹配用户。 在后续步骤中,请确保 SAP Cloud Identity Services 中的任何用户都已将属性选为 “匹配 ”属性,以防止创建重复用户。
确认是否存在映射到应用程序属性的
IsSoftDeleted
属性映射或包含IsSoftDeleted
的函数。 当用户从应用程序取消分配、在 Microsoft Entra ID 中被软删除或被阻止登录时,Microsoft Entra 预配服务将更新映射到isSoftDeleted
的属性。 如果未映射任何属性,则以后从应用程序角色取消分配的用户将继续存在于应用程序的数据存储中。添加 SAP 云标识服务或下游目标 SAP 系统所需的任何其他映射。
选择“保存”按钮以提交任何更改。
特征 类型 支持筛选 SAP 云标识服务必需 userName
字符串 ✓ ✓ emails[type eq "work"].value
字符串 ✓ active
布尔 displayName
字符串 urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager
参考 addresses[type eq "work"].country
字符串 addresses[type eq "work"].locality
字符串 addresses[type eq "work"].postalCode
字符串 addresses[type eq "work"].region
字符串 addresses[type eq "work"].streetAddress
字符串 name.givenName
字符串 name.familyName
字符串 name.honorificPrefix
字符串 phoneNumbers[type eq "fax"].value
字符串 phoneNumbers[type eq "mobile"].value
字符串 phoneNumbers[type eq "work"].value
字符串 urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:costCenter
字符串 urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department
字符串 urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:division
字符串 urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber
字符串 urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:organization
字符串 locale
字符串 timezone
字符串 userType
字符串 company
字符串 urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute1
字符串 urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute2
字符串 urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute3
字符串 urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute4
字符串 urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute5
字符串 urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute6
字符串 urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute7
字符串 urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute8
字符串 urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute9
字符串 urn:sap:cloud:scim:schemas:extension:custom:2.0:User:attributes:customAttribute10
字符串 sendMail
字符串 mailVerified
字符串 若要配置范围筛选器,请参阅 范围筛选器文章中提供的以下说明。
若要为 SAP Cloud Identity Services 启用Microsoft Entra 预配服务,请将“设置”部分中的“预配状态”更改为“打开”。
对于“设置”部分中“范围”的值,请选择“仅同步已分配的用户和组”。
准备好预配时,选择“保存”。
此操作会对“设置”部分的“范围”中定义的所有用户启动初始同步 。 如果将范围设置为“仅同步已分配的用户和组”,但没有为应用程序分配用户或组,则在将用户分配到应用程序之前不会进行同步。
将新的测试用户从 Microsoft Entra ID 预配到 SAP 云标识服务
建议将单个新的 Microsoft Entra 测试用户分配到 SAP 云标识服务,以测试自动用户预配配置。
- 以至少云应用程序管理员和用户管理员身份登录到 Microsoft Entra 管理中心。
- 浏览到 Entra ID>用户。
- 选择“新建用户”“创建新用户”。
- 键入新测试用户的“用户主体名称”和“显示名称”。 用户主体名称必须是唯一的,不能与任何当前或以前的 Microsoft Entra 用户或 SAP 云标识服务用户相同。 依次选择“审阅 + 创建”和“创建”。
- 创建测试用户后,浏览到 Entra ID>Enterprise 应用。
- 选择 SAP 云标识服务应用程序。
- 依次选择“用户和组”和“添加用户/组”。
- 在“用户和组”中,选择“未选定”,并在文本框中键入测试用户的用户主体名称。
- 选择“选择”,然后选择“分配”。
- 选择“预配”,然后选择“按需预配”。
- 在“选择用户或组”文本框中,键入测试用户的用户主体名称。
- 选择“预配”。
- 等待预配完成。 如果成功,则会看到消息
Modified attributes (successful)
。
还可以选择验证在用户超出应用程序范围时 Microsoft Entra 预配服务将预配的内容。
- 选择“用户和组” 。
- 选择测试用户,然后选择“删除”。
- 删除测试用户后,选择“预配”,然后选择“按需预配”。
- 在“选择用户或组”文本框中,键入刚取消分配的测试用户的用户主体名称。
- 选择“预配”。
- 等待预配完成。
最后,可以从 Microsoft Entra ID 中删除测试用户。
- 浏览到 Entra ID>用户。
- 选择测试用户,选择“删除”,然后选择“确定”。 此操作会从 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 应用程序属性映射中的匹配属性,请参阅 源系统和目标系统中的匹配用户。
登录到 SAP 云标识服务管理控制台
https://<tenantID>.accounts.ondemand.com/admin
(如果是试用,则https://<tenantID>.trial-accounts.ondemand.com/admin
)。导航到“用户和授权 > 导出用户”。
选择将 Microsoft Entra 用户与 SAP 中的用户匹配所需的所有特性。 这些属性包括
SCIM ID
、userName
、emails
以及可能在 SAP 系统中用作标识符的的其他属性。选择“导出”并等待浏览器下载 CSV 文件。
打开 PowerShell 窗口。
在编辑器中键入以下脚本。 在第一行中,如果选择了
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 doesn't 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 doesn't have a $sapScimUserNameField attribute populated" $warn++ } } write-output "$warn of $count users in SAP Cloud Identity Services did not have the $sapScimUserNameFIeld attribute populated."
运行该脚本。 脚本完成后,如果存在一个或多个缺少所需匹配属性的用户,请在导出的 CSV 文件或 SAP 云标识服务管理控制台中查找这些用户。 如果这些用户也存在于 Microsoft Entra 中,则需要首先更新这些用户的 SAP Cloud Identity Services 表示形式,以便填充匹配的属性。
在 SAP 云标识服务中更新这些用户的属性后,请从 SAP 云标识服务重新导出用户(如本部分中的步骤 2-5 和 PowerShell 步骤中所述),以确认 SAP 云标识服务中没有用户缺少匹配属性,否则会阻碍预配到这些用户。
有了从 SAP Cloud Identity Services 获取的所有用户的列表后,即可将应用程序数据存储中的这些用户与已在 Microsoft Entra ID 中的用户匹配,以确定哪些用户应在预配范围内。
检索 Microsoft Entra ID 中用户的 ID
本部分演示如何使用 Microsoft Graph PowerShell cmdlet 与 Microsoft Entra ID 进行交互。
组织首次将这些 cmdlet 用于此方案时,需要具有全局管理员角色才能允许将 Microsoft Graph PowerShell 用于租户。 后续交互可以使用较低特权角色,例如:
- 用户管理员(如果预计会创建新用户)。
- 在您仅负责管理应用程序角色分配的情况下,可以是应用程序管理员或 标识治理管理员。
打开 PowerShell。
如果没有已安装 Microsoft Graph PowerShell 模块 ,请使用以下命令安装
Microsoft.Graph.Users
模块和其他模块:Install-Module Microsoft.Graph
如果已安装模块,请确保使用的是最新版本:
Update-Module microsoft.graph.users,microsoft.graph.identity.governance,microsoft.graph.applications
连接到 Microsoft Entra ID:
$msg = Connect-MgGraph -ContextScope Process -Scopes "User.ReadWrite.All,Application.ReadWrite.All,AppRoleAssignment.ReadWrite.All,EntitlementManagement.ReadWrite.All"
如果这是你第一次使用此命令,则可能需要同意允许 Microsoft Graph 命令行工具具有这些权限。
将从应用程序数据存储中获取的用户列表读取到 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
选择 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"
检索 Microsoft Entra ID 中的这些用户的 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 } }
查看以前查询的结果。 请查看 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."
脚本完成以后,如果数据源中有任何记录在 Microsoft Entra ID 中无法找到,系统会提示错误。 如果并非应用程序数据存储中用户的所有记录都可以在 Microsoft Entra ID 中作为用户找到,则需要调查哪些记录不匹配以及原因。
例如,某人在 Microsoft Entra ID 中的电子邮件地址和 userPrincipalName 可能已更改,但在应用程序的数据源中未更新其相应的
mail
属性。 或者,用户可能已经离开了组织,但仍处于应用程序的数据源中。 或者,应用程序数据源中可能有一个供应商或超级管理员帐户,该帐户与 Microsoft Entra ID 中的任何特定人员都不对应。如果存在无法在 Microsoft Entra ID 中找到的用户,或有用户未处于活动状态并且能够登录,但你想要审查其权限或在 SAP 云标识服务、数据库或目录中更新其属性,则需要更新应用程序、匹配规则,或为其更新或创建 Microsoft Entra 用户。 有关要进行更改的详细信息,请参阅 管理与Microsoft Entra ID 中的用户不匹配的应用程序中的映射和用户帐户。
如果选择用于在 Microsoft Entra ID 中创建用户的选项,则可以使用以下任一方法批量创建用户:
- CSV 文件,如在 Microsoft Entra 管理中心批量创建用户中所述
- New-MgUser cmdlet
确保使用 Microsoft Entra ID 所需的属性填充这些新用户,以便稍后将其与应用程序中的现有用户以及 Microsoft Entra ID 所需的属性(包括
userPrincipalName
、mailNickname
和displayName
)匹配。userPrincipalName
对于目录中的所有用户必须是唯一的。例如,数据库中可能有用户,其中,
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 } }
将任何缺失的用户添加到 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 云标识服务的userName
和emails[type eq "work"].value
属性。 如果用户的电子邮件地址与其用户主体名称不同,则可能需要更改此映射。 - 如果公司 ZIP/邮政编码的格式与公司国家或地区不匹配,SAP Cloud Identity Services 可能会忽略属性的值
postalCode
。 - 默认情况下,Microsoft Entra 属性
country
映射到 SAP Cloud Identity Servicesaddresses[type eq "work"].country
字段。 如果特性的值country
不是两个字符 ISO 3166 国家/地区代码,则在 SAP Cloud Identity Services 中创建这些用户可能会失败。 有关详细信息,请参阅 countries.properties。 - 默认情况下,Microsoft Entra 属性
department
映射到 SAP 云标识服务urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department
属性。 如果 Microsoft Entra 用户具有department
属性的值,则这些值必须与 SAP 云标识服务中已配置的部门匹配,否则用户的创建或更新将失败。 有关详细信息,请参阅 departments.properties。department
如果Microsoft Entra 用户中的值与 SAP 环境中的值不一致,请在分配用户之前更新 Microsoft Entra 中的部门值、更新 SAP Cloud Identity Services 中允许的部门值或删除映射。 - SAP 云标识服务的 SCIM 终结点要求某些属性采用特定格式。 可以 在此处详细了解这些属性及其特定格式。
在 Microsoft Entra ID 中将用户分配到 SAP 云标识服务应用程序
Microsoft Entra ID 使用名为 分配 的概念来确定哪些用户应接收对所选应用的访问权限。 在自动用户预配的情况下,如果“范围”的“设置”值为“仅同步已分配的用户和组”,那么只有已分配给 Microsoft Entra ID 中该应用程序的应用程序角色的用户和组会与 SAP 云标识服务同步。 如果将用户分配到 SAP 云标识服务,则必须在“分配”对话框中选择任何特定于应用程序的有效角色(如果可用)。 具有“默认访问权限” 角色的用户排除在预配之外。 目前,SAP 云标识服务的唯一可用角色是“用户”。
如果为应用程序启用了预配,请在将更多用户分配到应用程序之前检查应用程序预配是否未处于 隔离 状态。 在继续之前,请解决导致隔离的所有问题。
检查已经存在于 SAP Cloud Identity Services 中的用户,但尚未在 Microsoft Entra ID 的应用中分配任务的用户
前面的步骤评估了 SAP 云标识服务中的用户是否也作为 Microsoft Entra ID 中的用户存在。 但是,它们可能并未在当前全部都分配给 Microsoft Entra ID 中的应用程序角色。 因此,后续步骤是查看哪些用户没有分配应用程序角色。
使用 PowerShell 查找应用程序服务主体的服务主体 ID。
例如,如果企业应用程序命名为
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
检索当前已分配到 Microsoft Entra ID 中应用程序的用户。
这建立在上一命令中设置的
$azuread_sp
变量的基础上。$azuread_existing_assignments = @(Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -All)
将 SAP 云标识服务和 Microsoft Entra ID 中已有用户的用户 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 aren't assigned to the application roles."
如果没有用户未分配到应用程序角色,则表示所有用户都已分配到应用程序角色,表明 Microsoft Entra ID 和 SAP 云标识服务中没有共同的用户,因此无需更改。 但是,如果 SAP Cloud Identity Services 中的一个或多个用户当前未分配给应用程序角色,则需要继续该过程并将其添加到应用程序角色之一。
选择应用程序服务主体的
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"}
为 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 }
等待一分钟,以便在 Microsoft Entra ID 中传播更改。
在下一个 Microsoft Entra 预配周期中,Microsoft Entra 预配服务会将分配给应用程序的这些用户的表示形式与 SAP 云标识服务中的表示形式进行比较,并将 SAP 云标识服务用户更新为具有 Microsoft Entra ID 的属性。
分配剩余用户并监视初始同步
测试完成后,用户已成功预配到 SAP 云标识服务,并且任何现有的 SAP 云标识服务用户都已分配到应用程序角色,可以按照此处的其中一条说明,将任何其他授权用户分配给 SAP 云标识服务应用程序:
- 可以在 Microsoft Entra 管理中心将 每个用户分配到应用程序 ,
- 可以通过 PowerShell cmdlet
New-MgServicePrincipalAppRoleAssignedTo
将单个用户分配给应用程序,如上一部分所示,或者 - 如果组织具有Microsoft Entra ID Governance 的许可证,则还可以 部署权利管理策略,以便自动执行访问分配。
用户分配给应用程序角色并处于预配范围后,Microsoft Entra 预配服务会将这些用户预配到 SAP 云标识服务。 请注意,初始同步执行的时间长于后续同步,只要 Microsoft Entra 预配服务正在运行,则大约每隔 40 分钟就会进行一次同步。
如果您未看到用户得到预配,请查看有关用户未预配的故障排除指南中的步骤。 然后,通过 Microsoft Entra 管理中心 或 Graph API 检查预配日志。 按状态“失败”筛选日志。 如果出现 ErrorCode 为 DuplicateTargetEntries 的故障,这表示您的预配匹配准则存在歧义性,您需要更新用于匹配的 Microsoft Entra 用户或映射,以确保每个 Microsoft Entra 用户与一个应用程序用户相匹配。 然后按操作“创建”和状态“已跳过”来筛选日志。 如果使用 NotEffectivelyEntitled 的 SkipReason 代码跳过用户,这可能表示Microsoft Entra ID 中的用户帐户不匹配,因为用户帐户状态 已禁用。
配置单一登录
还可以选择按照 SAP Cloud Identity Services 单一登录文章中提供的说明为 SAP Cloud Identity Services 启用基于 SAML 的单一登录。 可独立于自动用户预配来配置单一登录,尽管这两个功能互相补充。
监视预配
可以使用 “同步详细信息”部分来监控进度,并点击链接查看“配置活动报告”,其中描述了 Microsoft Entra 配置服务在 SAP 云身份服务上执行的所有操作。 还可以通过 Microsoft Graph API 监视预配项目。
有关如何读取Microsoft Entra 预配日志的详细信息,请参阅 有关自动用户帐户预配的报告。
维护应用程序角色分配
当被分配到应用程序的用户在 Microsoft Entra ID 中进行更新时,这些更改会自动预配置到 SAP Cloud Identity Services。
如果有 Microsoft Entra ID Governance,则可以自动更改 Microsoft Entra ID 中 SAP 云标识服务的应用程序角色分配,以便在人员加入组织、离开或更改角色时添加或删除分配。
- 你可以 对应用程序角色分配进行一次性或定期访问评审。
- 可以为 此应用程序创建权利管理访问包。 你可以为用户分配访问权限,策略包括当他们请求时、由管理员分配、基于规则自动分配或通过生命周期工作流分配。