1. 身份架构概述
Disconnected Operations不依赖 Microsoft Entra ID,而是在本地构建完整的身份认证体系。
整个身份系统由三个组件组成:
- Active Directory Domain Services (AD DS):提供用户、组及组成员信息
- Active Directory Federation Services (AD FS):提供 OpenID Connect(OIDC)身份认证
- LDAP v3(推荐 LDAPS):负责同步用户组及成员信息
整个身份体系完全运行在本地数据中心,无需连接 Azure 公有云。
2. 支持的身份组件
| 组件 | 用途 | 说明 |
|---|---|---|
| Active Directory Domain Services(AD DS) | 用户、组、组成员管理 | 仅支持 Universal Group Scope |
| Active Directory Federation Services(AD FS) | OIDC 身份认证 | 必须能够访问https://<ADFS-FQDN>/adfsMetadata Endpoint |
| LDAP v3 | 同步组与成员 | 默认端口 3268(LDAP)或 3269(LDAPS),推荐使用 3269(SSL/TLS) |
⚠️重要:当前 Azure Local Disconnected Operations不支持 Microsoft Entra ID(原 Azure Active Directory)作为身份提供程序。身份认证必须通过 AD FS + Active Directory 实现。
3. 身份认证流程
[用户登录] │ ▼ [Local Portal] │ ▼ OpenID Connect [AD FS] │ ▼ 用户身份认证 [返回 Access Token] │ ▼ [Appliance Control Plane] │ ▼ LDAP(每 6 小时同步) [Active Directory]身份职责划分:
| 功能 | 组件 |
|---|---|
| 用户认证 | AD FS(OIDC) |
| 用户组同步 | LDAP |
| 用户信息来源 | Active Directory |
| 权限控制 | Azure RBAC |
4. Root Operator 与权限模型
部署过程中必须指定一个 Root Operator(Initial Operator)。
Root Operator 自动拥有 Operator Subscription 权限,可继续创建其他 Operator。
其职责包括:
- 创建 Operator
- 创建订阅(Subscription)
- 创建 Service Principal(SPN)
- 管理 Identity 配置
- 管理诊断与日志
- 管理 RBAC
微软官方特别说明:"Role assignments and policies aren't inherited from the Operator Subscription to individual subscriptions. Each subscription has its own RBAC scope."
因此:每个 Subscription 都拥有独立的 RBAC 权限边界,权限不会自动继承。
5. Operator 权限
5.1 身份管理
| 操作 | Operator |
|---|---|
| 创建 Operator | ✅ |
| 创建 SPN | ✅ |
| 删除 SPN | ✅ |
| 修改 SPN | ✅ |
| 查询 SPN | ✅ |
| 查看同步后的组成员 | ✅ |
| 查看 Identity 配置 | ✅ |
| 查看同步状态 | ✅ |
5.2 Subscription 管理
| 操作 | Operator |
|---|---|
| 创建 Alias | ✅ |
| 删除 Alias | ✅ |
| 创建 Subscription | ✅ |
| 删除 Subscription | ✅ |
| 查询 Subscription | ✅ |
| 修改 Subscription Owner | ✅ |
| 重命名 Subscription | ✅ |
| Resume Subscription | ✅ |
5.3 运维与诊断
| 操作 | Operator |
|---|---|
| 收集日志 | ✅ |
| 下载日志 | ✅ |
| 配置 Diagnostics | ✅ |
| 配置 Syslog Forwarding | ✅ |
5.4 权限限制
以下操作不允许:
- ❌ 删除 Operator Subscription
- ❌ Operator 自动继承所有 Subscription 权限
需要注意:SPN Owner 可以删除自己拥有的 SPN——这是独立于 Operator 的权限模型。
6. Identity 同步机制
部署完成后:
- 首次完成身份同步
- 后续默认每 6 小时自动同步一次
同步内容包括:
- 用户组
- 用户成员关系
- Group Membership
同步状态可通过 Operator API 查询:
Get-ApplianceExternalIdentityObservability7. 部署前需要准备的身份参数
| 参数 | 说明 | 示例 |
|---|---|---|
| Authority | OIDC Metadata URI | https://adfs.contoso.com/adfs |
| ClientId | AD FS 注册应用 ID | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| LDAP Credential | LDAP 只读账户 | ldap / ****** |
| LDAPS Certificate Chain | LDAPS 证书链 | 见 PKI 章节 |
| OIDC Certificate Chain | AD FS 证书链 | 见 PKI 章节 |
| LDAP Server | LDAP Server FQDN | ldap.contoso.com |
| LDAP Port | LDAP 端口 | 3269(推荐) |
| Root Operator UPN | 初始 Operator | operator@contoso.com |
| Sync Group Identifier | Root Group GUID | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| Automation Certificate | 自动化部署证书(可选) | PowerShell 创建 |
8. Identity 配置示例
$ldapPass = 'retracted' | ConvertTo-SecureString -AsPlainText -Force $idpConfig = @{ authority = 'https://adfs.contoso.com/adfs' clientId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' rootOperatorUserPrincipalName = 'operator@contoso.com' ldapServer = 'ldap.contoso.com' ldapCredential = New-Object PSCredential("ldap", $ldapPass) syncGroupIdentifier = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }9. 自动化部署(Automation Certificate)
如果希望整个部署流程无人值守,可配置 Automation Certificate。
Azure CLI 示例:
az login \ --service-principal \ --username <ApplicationId> \ --certificate <CertificatePath> \ --tenant <TenantId>PowerShell 示例:
Connect-AzAccount ` -ServicePrincipal ` -CertificateThumbprint $CertThumbprint ` -Tenant $TenantId ` -ApplicationId $ApplicationId⚠️重要:Automation Certificate等同于部署环境的最高权限凭据。如果证书永久丢失,将无法继续自动化管理,严重情况下可能需要重新部署 Disconnected Operations。
建议:
- 使用企业 PKI 签发
- 离线备份
- 妥善保管私钥
10. 部署前 Identity 检查清单
| 检查项 | 是否必须 |
|---|---|
| LDAP Server 已部署 | ✅ |
| LDAP Endpoint 可访问 | ✅ |
| AD FS 已部署 | ✅ |
| OIDC Metadata 可访问 | ✅ |
| Appliance 能解析 LDAP FQDN | ✅ |
| Appliance 能解析 AD FS FQDN | ✅ |
| LDAP 只读账户已创建 | ✅ |
| 已确定 Root Operator | ✅ |
| 已确定同步 Root Group | ✅ |
| 已准备所有 Identity 参数 | ✅ |
11. 官方未明确说明但需要注意的事项
微软官方文档未明确说明以下内容:
- AD FS 的最低版本要求(通常建议 Windows Server 2019 或更新版本)
- 是否支持 LDAP StartTLS(官方仅说明 LDAP/LDAPS,推荐使用 LDAPS 3269)
- Operator 数量是否存在上限
- Operator Subscription 是否涉及独立授权或计费
- Universal Group Scope 的设计原因(官方仅要求必须使用 Universal Group,未进一步解释)