设置 SCIM 配置
支持的属性(Supported attributes)
SCIM 使用属性(姓名、电子邮件等)在你的身份提供商和 Docker 之间同步用户信息。在你的身份提供商中正确映射这些属性 可确保用户配置(provisioning)顺利进行,并防止在使用单点登录时出现重复用户账户等问题。
Docker 支持以下 SCIM 属性:
| 属性 | 描述 |
|---|---|
userName |
用户的主电子邮件地址,用作唯一标识符 |
name.givenName |
用户的名 |
name.familyName |
用户的姓 |
active |
指示用户是启用还是禁用,设置为 "false" 以取消配置(de-provision)用户 |
有关受支持属性和 SCIM 的更多详情,请参阅 Docker Hub API SCIM 参考。
Important默认情况下,Docker 对 SSO 使用即时(JIT)配置。如果启用了 SCIM,JIT 值仍然优先,并将覆盖 SCIM 设置的属性值。 为避免冲突,请确保你的 JIT 属性值与 SCIM 值匹配。
或者,你可以禁用 JIT 配置,仅依赖 SCIM。详情请参阅 Just-in-Time。
在 Docker 中启用 SCIM(Enable SCIM in Docker)
要启用 SCIM:
- 登录 Docker Home。
- 选择 Identity & auth,然后 SSO and SCIM。
- 在 SSO connections(SSO 连接)表中,选择你连接的 Actions(操作)图标,然后选择 Setup SCIM(设置 SCIM)。
- 复制 SCIM Base URL 和 API Token 并将这些值粘贴到你的 IdP 中。
在 IdP 中启用 SCIM(Enable SCIM in your IdP)
你的身份提供商的用户界面可能与以下步骤略有不同。你可以参考你的身份提供商的文档进行核实。有关更多详情,请参阅 你的身份提供商的文档:
NoteMicrosoft 目前不支持在同一非库应用程序中同时使用 SCIM 和 OIDC。本页提供了一个经过验证的变通方案,使用单独的 非库应用进行 SCIM 配置。虽然 Microsoft 未正式记录此设置,但它在实践中被广泛使用并受支持。
第一步:启用 SCIM(Step one: Enable SCIM)
- 登录 Okta 并选择 Admin 打开管理门户。
- 打开你配置 SSO 连接时创建的应用程序。
- 在应用程序页面,选择 General 标签页,然后 Edit App Settings。
- 启用 SCIM 配置,然后选择 Save。
- 导航到 Provisioning,然后选择 Edit SCIM Connection。
- 要在 Okta 中配置 SCIM,请使用以下值和设置设置你的连接:
- SCIM Base URL: SCIM 连接器基础 URL(从 Docker Home 复制)
- Unique identifier field for users:
email - Supported provisioning actions: Push New Users 和 Push Profile Updates
- Authentication Mode: HTTP Header
- SCIM Bearer Token: HTTP Header Authorization Bearer Token(从 Docker Home 复制)
- 选择 Test Connector Configuration。
- 查看测试结果并选择 Save。
第二步:启用同步(Step two: Enable synchronization)
- 在 Okta 中,选择 Provisioning。
- 选择 To App,然后 Edit。
- 启用 Create Users、Update User Attributes 和 Deactivate Users。
- 选择 Save。
- 移除不必要的映射。必要的映射是:
- Username
- Given name
- Family name
接下来,设置角色映射。
Microsoft 不支持在同一非库应用程序中同时使用 SCIM 和 OIDC。你必须在 Entra ID 中创建第二个非库应用程序用于 SCIM 配置。
第一步:创建单独的 SCIM 应用(Step one: Create a separate SCIM app)
- 在 Azure 门户中,转到 Microsoft Entra ID > Enterprise Applications > New application。
- 选择 Create your own application。
- 为你的应用命名,并选择 Integrate any other application you don't find in the gallery。
- 选择 Create。
第二步:配置 SCIM 配置(Step two: Configure SCIM provisioning)
- 在你的新 SCIM 应用中,转到 Provisioning > Get started。
- 将 Provisioning Mode 设置为 Automatic。
- 在 Admin Credentials 下:
- Tenant URL:粘贴来自 Docker Home 的 SCIM Base URL。
- Secret Token:粘贴来自 Docker Home 的 SCIM API token。
- 选择 Test Connection 验证。
- 选择 Save 保存凭据。
接下来,设置角色映射。
- 在 Azure 门户中,转到 Microsoft Entra ID > Enterprise Applications,并选择你的 Docker SAML 应用。
- 选择 Provisioning > Get started。
- 将 Provisioning Mode 设置为 Automatic。
- 在 Admin Credentials 下:
- Tenant URL:粘贴来自 Docker Home 的 SCIM Base URL。
- Secret Token:粘贴来自 Docker Home 的 SCIM API token。
- 选择 Test Connection 验证。
- 选择 Save 保存凭据。
接下来,设置角色映射。
设置角色映射(Set up role mapping)
你可以通过在 IdP 中添加可选的 SCIM 属性来为用户分配 Docker 角色。这些属性会覆盖在你的 SSO 配置中设置的 默认角色和团队值。
Note角色映射同时支持 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 中设置角色映射(Step one: Set up role mapping in 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。
- 转到新创建的属性,将变量名映射到外部名,然后选择 Save Mappings。如果你使用 JIT 配置,请继续以下步骤。
- 导航到 Applications 并选择 YOUR APP。
- 选择 General,然后 SAML Settings,再 Edit。
- 选择 Step 2 并配置从用户属性到 Docker 变量的映射。
第二步:按用户分配角色(Step two: Assign roles by user)
- 在 Okta 管理门户中,选择 Directory,然后 People。
- 选择 Profile,然后 Edit。
- 选择 Attributes 并将属性更新为所需值。
第三步:按组分配角色(Step three: Assign roles by group)
- 在 Okta 管理门户中,选择 Directory,然后 People。
- 选择 YOUR GROUP,然后 Applications。
- 打开 YOUR APPLICATION 并选择 Edit 图标。
- 将属性更新为所需值。
如果用户尚未设置属性,添加到该组的用户将在配置时继承这些属性。
第一步:配置属性映射(Step one: Configure attribute mappings)
- 完成 SCIM 配置设置。
- 在 Azure 门户中,打开 Microsoft Entra ID > Enterprise Applications,并选择你的 SCIM 应用。
- 转到 Provisioning > Mappings > Provision Azure Active Directory Users。
- 添加或更新以下映射:
userPrincipalName->userNamemail->emails.value- 可选。使用以下
映射方法 之一映射
dockerRole、dockerOrg或dockerTeam。
- 移除任何不支持的属性以防止同步错误。
- 可选。转到 Mappings > Provision Azure Active Directory Groups:
- 如果组配置导致错误,将 Enabled 设置为 No。
- 如果启用,请仔细测试组映射。
- 选择 Save 应用映射。
第二步:选择角色映射方法(Step two: Choose a role mapping method)
你可以使用以下方法之一映射 dockerRole、dockerOrg 或 dockerTeam:
表达式映射(Expression mapping)
如果你只需要分配像 member、editor 或 owner 这样的 Docker 角色,请使用此方法。
- 在 Edit Attribute 视图中,将映射类型设置为 Expression。
- 在 Expression 字段中:
- 如果你的 App Roles 与 Docker 角色完全匹配,使用: SingleAppRoleAssignment([appRoleAssignments])
- 如果不匹配,使用 switch 表达式:
Switch(SingleAppRoleAssignment([appRoleAssignments]), "My Corp Admins", "owner", "My Corp Editors", "editor", "My Corp Users", "member")
- 设置:
- Target attribute:
urn:ietf:params:scim:schemas:extension:docker:2.0:User:dockerRole - Match objects using this attribute:No
- Apply this mapping:Always
- Target attribute:
- 保存你的更改。
Warning你不能使用此方法与
dockerOrg或dockerTeam。表达式映射仅与一个属性兼容。
直接映射(Direct mapping)
如果你需要映射多个属性(dockerRole + dockerTeam),请使用此方法。
- 对于每个 Docker 属性,选择一个唯一的 Entra 扩展属性(
extensionAttribute1、extensionAttribute2等)。 - 在 Edit Attribute 视图中:
- 将映射类型设置为 Direct。
- 将 Source attribute 设置为你选择的扩展属性。
- 将 Target attribute 设置为以下之一:
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
- 将 Apply this mapping 设置为 Always。
- 保存你的更改。
要分配值,你需要使用 Microsoft Graph API。
第三步:分配用户和组(Step three: Assign users and groups)
对于任一映射方法:
- 在 SCIM 应用中,转到 Users and Groups > Add user/group。
- 选择要配置到 Docker 的用户或组。
- 选择 Assign。
如果你使用表达式映射:
- 转到 App registrations > 你的 SCIM 应用 > App Roles。
- 创建与 Docker 角色匹配的 App Roles。
- 在 Users and Groups 下将用户或组分配到 App Roles。
如果你使用直接映射:
- 转到 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"
}Note你必须为每个 SCIM 字段使用不同的扩展属性。
有关其他详情,请参阅你的 IdP 的文档:
测试 SCIM 配置(Test SCIM provisioning)
完成角色映射后,你可以手动测试配置。
- 在 Okta 管理门户中,转到 Directory > People。
- 选择一个你已分配到 SCIM 应用的用户。
- 选择 Provision User。
- 等待几秒,然后检查 Docker Home 中的 Docker Members(成员)。
- 如果用户没有出现,查看 Reports > System Log 中的日志,并确认应用中的 SCIM 设置。
- 在 Azure 门户中,转到 Microsoft Entra ID > Enterprise Applications,并选择你的 SCIM 应用。
- 转到 Provisioning > Provision on demand。
- 选择一个用户或组并选择 Provision。
- 确认用户出现在 Docker Home 的 Docker Members 中。
- 如有需要,检查 Provisioning logs 中的错误。
禁用 SCIM(Disable SCIM)
如果 SCIM 被禁用,任何通过 SCIM 配置的用户将保留在组织中。你用户的未来变更将不再从 IdP 同步。取消用户配置 (de-provisioning)仅在手动从组织中移除用户时才可能。
要禁用 SCIM:
- 登录 Docker Home。
- 选择 Identity & auth,然后 SSO and SCIM。
- 在 SSO connections 表中,选择 Actions 图标。
- 选择 Disable SCIM。