SCIM 供应
使用跨域身份管理系统 (SCIM) 自动化您的 Docker 组织的用户管理。SCIM 自动供应和取消供应用户,同步团队成员资格,并使您的 Docker 组织与您的身份提供商保持同步。
本页将向您展示如何使用 SCIM 自动化 Docker 的用户供应和取消供应。
先决条件
在开始之前,您必须拥有
- 为您的组织配置了 SSO
- Docker Home 和您的身份提供商的管理员访问权限
SCIM 的工作原理
SCIM 通过您的身份提供商自动化 Docker 的用户供应和取消供应。启用 SCIM 后,分配给您的身份提供商中 Docker 应用程序的任何用户都会自动被供应并添加到您的 Docker 组织。当用户从您的身份提供商中 Docker 应用程序中移除时,SCIM 会将其停用并从您的 Docker 组织中移除。
除了供应和移除,SCIM 还会同步身份提供商中进行的配置文件更新,例如姓名更改。您可以将 SCIM 与 Docker 默认的即时 (JIT) 供应一起使用,也可以在禁用 JIT 的情况下单独使用 SCIM。
SCIM 自动化
- 创建用户
- 更新用户配置文件
- 移除和停用用户
- 重新激活用户
- 组映射
注意SCIM 仅管理通过您的身份提供商在启用 SCIM 后供应的用户。它无法移除在设置 SCIM 之前手动添加到 Docker 组织的用户。
要移除这些用户,请从您的 Docker 组织中手动删除他们。有关更多信息,请参阅管理组织成员。
支持的属性
SCIM 使用属性(姓名、电子邮件等)在您的身份提供商和 Docker 之间同步用户信息。在您的身份提供商中正确映射这些属性可确保用户供应顺利进行,并防止在使用单点登录时出现重复用户帐户等问题。
Docker 支持以下 SCIM 属性
| 属性 | 描述 |
|---|---|
userName | 用户的主要电子邮件地址,用作唯一标识符 |
name.givenName | 用户的名字 |
name.familyName | 用户的姓氏 |
active | 指示用户是否已启用或禁用,设置为“false”以取消供应用户 |
有关支持的属性和 SCIM 的更多详细信息,请参阅Docker Hub API SCIM 参考。
重要默认情况下,Docker 对 SSO 使用即时 (JIT) 供应。如果启用了 SCIM,JIT 值仍然优先并会覆盖 SCIM 设置的属性值。为避免冲突,请确保您的 JIT 属性值与您的 SCIM 值匹配。
或者,您可以禁用 JIT 供应,完全依赖 SCIM。有关详细信息,请参阅即时供应。
在 Docker 中启用 SCIM
启用 SCIM
- 登录 Docker 主页。
- 选择管理控制台,然后选择SSO 和 SCIM。
- 在 SSO 连接 表中,选择您的连接的 操作 图标,然后选择 设置 SCIM。
- 复制 SCIM 基本 URL 和 API 令牌 并将这些值粘贴到您的 IdP 中。
在 IdP 中启用 SCIM
您的身份提供商的用户界面可能与以下步骤略有不同。您可以参考您的身份提供商的文档进行验证。有关更多详细信息,请参阅您的身份提供商的文档
注意Microsoft 目前不支持在 Entra ID 的同一非库应用程序中同时使用 SCIM 和 OIDC。本页提供了一个经过验证的解决方法,即使用一个单独的非库应用程序进行 SCIM 供应。虽然 Microsoft 没有正式记录此设置,但它在实践中被广泛使用和支持。
第一步:启用 SCIM
- 登录 Okta 并选择 Admin 打开管理门户。
- 打开您在配置 SSO 连接时创建的应用程序。
- 在应用程序页面上,选择 General 选项卡,然后选择 Edit App Settings。
- 启用 SCIM 供应,然后选择 Save。
- 导航到 Provisioning,然后选择 Edit SCIM Connection。
- 要在 Okta 中配置 SCIM,请使用以下值和设置来设置您的连接
- SCIM 基本 URL:SCIM 连接器基本 URL(从 Docker 主页复制)
- 用户的唯一标识符字段:`email`
- 支持的供应操作:推送新用户 和 推送配置文件更新
- 认证模式:HTTP Header
- SCIM Bearer 令牌:HTTP Header 授权 Bearer 令牌(从 Docker 主页复制)
- 选择 测试连接器配置。
- 查看测试结果并选择 保存。
第二步:启用同步
- 在 Okta 中,选择 Provisioning。
- 选择 To App,然后选择 Edit。
- 启用 创建用户、更新用户属性 和 停用用户。
- 选择保存。
- 移除不必要的映射。必要的映射是
- 用户名
- 名字
- 姓氏
- 电子邮件
接下来,设置角色映射。
Microsoft 不支持在同一非库应用程序中同时使用 SCIM 和 OIDC。您必须在 Entra ID 中为 SCIM 供应创建第二个非库应用程序。
第一步:创建单独的 SCIM 应用程序
- 在 Azure 门户中,转到 Microsoft Entra ID > 企业应用程序 > 新建应用程序。
- 选择 创建您自己的应用程序。
- 命名您的应用程序并选择 集成您在库中找不到的任何其他应用程序。
- 选择 Create (创建)。
第二步:配置 SCIM 供应
- 在您的新 SCIM 应用程序中,转到 供应 > 开始。
- 将 供应模式 设置为 自动。
- 在 管理员凭据 下
- 租户 URL:粘贴 Docker 主页中的 SCIM 基本 URL。
- 秘密令牌:粘贴 Docker 主页中的 SCIM API 令牌。
- 选择 测试连接 进行验证。
- 选择 保存 以存储凭据。
接下来,设置角色映射。
- 在 Azure 门户中,转到 Microsoft Entra ID > 企业应用程序,然后选择您的 Docker SAML 应用程序。
- 选择 供应 > 开始。
- 将 供应模式 设置为 自动。
- 在 管理员凭据 下
- 租户 URL:粘贴 Docker 主页中的 SCIM 基本 URL。
- 秘密令牌:粘贴 Docker 主页中的 SCIM API 令牌。
- 选择 测试连接 进行验证。
- 选择 保存 以存储凭据。
接下来,设置角色映射。
设置角色映射
您可以通过在 IdP 中添加可选的 SCIM 属性来为用户分配Docker 角色。这些属性会覆盖 SSO 配置中设置的默认角色和团队值。
注意角色映射同时支持 SCIM 和即时 (JIT) 供应。对于 JIT,角色映射仅在用户首次供应时适用。
下表列出了支持的可选用户级属性
| 属性 | 可能的值 | 备注 |
|---|---|---|
dockerRole | member、editor 或 owner | 如果未设置,用户默认为 member 角色。设置此属性将覆盖默认值。有关角色定义,请参阅角色和权限。 |
dockerOrg | Docker organizationName(例如,moby) | 覆盖 SSO 连接中配置的默认组织。 如果未设置,用户将被供应到默认组织。如果同时设置了 dockerOrg 和 dockerTeam,用户将被供应到指定组织内的团队。 |
dockerTeam | Docker teamName(例如,developers) | 将用户供应到默认组织或指定组织中的指定团队。如果团队不存在,则会自动创建。 您仍然可以使用组映射将用户分配到跨多个组织的团队。 |
用于这些属性的外部命名空间是:urn:ietf:params:scim:schemas:extension:docker:2.0:User。在您的身份提供商中为 Docker 创建自定义 SCIM 属性时需要此值。
第一步:在 Okta 中设置角色映射
- 首先设置SSO和 SCIM。
- 在 Okta 管理门户中,转到 Directory,选择 Profile Editor,然后选择 User (Default)。
- 选择 Add Attribute 并为要添加的角色、组织或团队配置值。不需要精确命名。
- 返回 Profile Editor 并选择您的应用程序。
- 选择 Add Attribute 并输入所需的值。External Name 和 External Namespace 必须完全匹配。
- 组织/团队/角色映射的外部名称值分别为
dockerOrg、dockerTeam和dockerRole,如上表所示。 - 所有这些的外部命名空间都是相同的:
urn:ietf:params:scim:schemas:extension:docker:2.0:User。
- 组织/团队/角色映射的外部名称值分别为
- 创建属性后,导航到页面顶部并选择 Mappings,然后选择 Okta User to YOUR APP。
- 转到新创建的属性并将变量名映射到外部名称,然后选择 保存映射。如果您使用的是 JIT 供应,请继续执行以下步骤。
- 导航到 Applications 并选择 YOUR APP。
- 选择 General,然后选择 SAML Settings,再选择 Edit。
- 选择 Step 2 并配置从用户属性到 Docker 变量的映射。
第二步:按用户分配角色
- 在 Okta 管理门户中,选择 Directory,然后选择 People。
- 选择 Profile,然后选择 Edit。
- 选择 Attributes 并将属性更新为所需的值。
第三步:按组分配角色
- 在 Okta 管理门户中,选择 Directory,然后选择 People。
- 选择 YOUR GROUP,然后选择 Applications。
- 打开 YOUR APPLICATION 并选择 Edit 图标。
- 将属性更新为所需的值。
如果用户尚未设置属性,则添加到该组的用户将在供应时继承这些属性。
第一步:配置属性映射
- 完成SCIM 供应设置。
- 在 Azure 门户中,打开 Microsoft Entra ID > 企业应用程序,然后选择您的 SCIM 应用程序。
- 转到 供应 > 映射 > 供应 Azure Active Directory 用户。
- 添加或更新以下映射
userPrincipalName->userNamemail->emails.value- 可选。使用其中一种映射方法映射
dockerRole、dockerOrg或dockerTeam。
- 移除任何不支持的属性以防止同步错误。
- 可选。转到 映射 > 供应 Azure Active Directory 组
- 如果组供应导致错误,请将 Enabled 设置为 否。
- 如果启用,请仔细测试组映射。
- 选择 保存 以应用映射。
第二步:选择角色映射方法
您可以使用以下方法之一映射 dockerRole、dockerOrg 或 dockerTeam
表达式映射
如果您只需要分配 Docker 角色,例如 member、editor 或 owner,请使用此方法。
- 在 编辑属性 视图中,将映射类型设置为 表达式。
- 在 表达式 字段中
- 如果您的应用角色与 Docker 角色完全匹配,请使用:SingleAppRoleAssignment([appRoleAssignments])
- 如果不匹配,请使用 switch 表达式:
Switch(SingleAppRoleAssignment([appRoleAssignments]), "我的公司管理员", "owner", "我的公司编辑", "editor", "我的公司用户", "member")
- 设置
- 目标属性:
urn:ietf:params:scim:schemas:extension:docker:2.0:User:dockerRole - 使用此属性匹配对象:否
- 应用此映射:始终
- 目标属性:
- 保存您的更改。
警告您不能将
dockerOrg或dockerTeam与此方法一起使用。表达式映射仅与一个属性兼容。
直接映射
如果您需要映射多个属性(dockerRole + dockerTeam),请使用此方法。
- 对于每个 Docker 属性,选择一个唯一的 Entra 扩展属性(
extensionAttribute1、extensionAttribute2等)。 - 在 编辑属性 视图中
- 将映射类型设置为 直接。
- 将 源属性 设置为您选择的扩展属性。
- 将 目标属性 设置为以下之一
dockerRole: urn:ietf:params:scim:schemas:extension:docker:2.0:User:dockerRoledockerOrg: urn:ietf:params:scim:schemas:extension:docker:2.0:User:dockerOrgdockerTeam: urn:ietf:params:scim:schemas:extension:docker:2.0:User:dockerTeam
- 将 应用此映射 设置为 始终。
- 保存您的更改。
要分配值,您需要使用 Microsoft Graph API。
第三步:分配用户和组
对于任何一种映射方法
- 在 SCIM 应用程序中,转到 用户和组 > 添加用户/组。
- 选择要供应到 Docker 的用户或组。
- 选择 分配。
如果您使用的是表达式映射
- 转到 应用注册 > 您的 SCIM 应用程序 > 应用角色。
- 创建与 Docker 角色匹配的应用角色。
- 在 用户和组 下将用户或组分配给应用角色。
如果您使用的是直接映射
- 转到 Microsoft Graph Explorer 并以租户管理员身份登录。
- 使用 Microsoft Graph API 分配属性值。PATCH 请求示例
PATCH https://graph.microsoft.com/v1.0/users/{user-id}
Content-Type: application/json
{
"extensionAttribute1": "owner",
"extensionAttribute2": "moby",
"extensionAttribute3": "developers"
}注意您必须为每个 SCIM 字段使用不同的扩展属性。
有关详细信息,请参阅您的 IdP 文档
测试 SCIM 供应
完成角色映射后,您可以手动测试配置。
禁用 SCIM
如果禁用 SCIM,任何通过 SCIM 供应的用户都将保留在组织中。您用户的未来更改将不会从您的 IdP 同步。只有手动从组织中移除用户才能取消用户供应。
禁用 SCIM
- 登录 Docker 主页。
- 选择管理控制台,然后选择SSO 和 SCIM。
- 在 SSO 连接 表中,选择 操作 图标。
- 选择 禁用 SCIM。