只有当开发者以你组织成员的身份登录 Docker Sandboxes 时,组织策略才会生效。没有登录 强制要求,开发者可以用个人账户登录并绕过这些策略。登录强制要求在机器本身这一层堵上缺口, 用户无法覆盖它。
要设置它,你需要编写一份列出你各组织的强制执行配置,先在一台机器上测试,再用终端管理 工具部署到开发者的机器上。
登录强制要求的工作方式
- 管理员通过 MDM、组策略或配置管理,把一份强制执行配置部署到受管终端,其中指定一个或 多个允许的 Docker 组织 slug。
- 用户运行
sbx login时,使用 Docker 完成身份验证。凭据会临时保存,随后 Docker Sandboxes 调用 Docker API 校验组织成员身份。 - 如果用户至少属于一个允许的组织,登录成功,凭据被保留。
- 否则,Docker Sandboxes 立即吊销已保存的凭据,用户会收到一条列出所需组织的 拒绝消息。
无论组织成员身份如何,sbx login 和 sbx logout 始终可以运行。其他命令需要有效的已登录 会话,因此在登录被拒绝之后,用户用允许的账户登录之前,这些命令都会失败。
编写强制执行配置
该配置列出开发者必须所属的组织,并可选地指定访问权限的联系人。所有平台使用相同的字段。 规范的 JSON 表示:
{
"allowedOrgs": ["docker", "acme-corp"],
"adminEmail": "it-security@acme-corp.com",
"adminURL": "https://acme-corp.atlassian.net/servicedesk/it",
"adminName": "ACME IT Security Team"
}| 字段 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
allowedOrgs | 字符串列表 | 是 | Docker 组织 slug。用户必须是其中至少一个的成员。匹配不区分大小写。 |
adminName | 字符串 | 否 | 拒绝消息中显示的管理员或团队显示名称。 |
adminEmail | 字符串 | 否 | 拒绝消息中显示的联系邮箱。 |
adminURL | 字符串 | 否 | 拒绝消息中显示的服务台或访问申请 URL。 |
如果 allowedOrgs 为空或缺失,强制执行不生效,任何通过身份验证的用户都可以使用 Docker Sandboxes。
可选的 adminName、adminEmail 和 adminURL 字段为被拒绝的用户提供解决问题的路径。 请填写你组织用于访问申请的联系信息。
在一台机器上测试配置
在部署到每台机器之前,先在一台机器上写入配置,并确认 sbx login 的行为符合你的预期。
::: tabs ::: tab macOS
把配置写入用户首选项域:
$ defaults write com.docker.sbx allowedOrgs -array "acme-corp"
$ defaults write com.docker.sbx adminEmail "it@acme.com"要删除测试配置:
$ defaults delete com.docker.sbxdefaults write 使用的是用户首选项域,而不是受管首选项域。在受管设备上,MDM 描述文件 具有权威性,同一域中的用户级设置会被忽略。
::: ::: tab Windows
在提升权限的 PowerShell 会话中运行以下命令。使用 New-ItemProperty 创建具有显式类型的 值。Set-ItemProperty 不会创建新值。
New-Item -Path "HKLM:\SOFTWARE\Policies\Docker\SBX" -Force
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Docker\SBX" `
-Name "allowedOrgs" -Value @("acme-corp") -PropertyType MultiString -Force
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Docker\SBX" `
-Name "adminEmail" -Value "it@acme.com" -PropertyType String -Force要删除测试配置:
Remove-Item -Path "HKLM:\SOFTWARE\Policies\Docker\SBX" -Recurse -Force::: ::: tab Linux
写入配置文件并设置其所有权:
$ sudo mkdir -p /etc/docker-sbx
$ sudo tee /etc/docker-sbx/config.json <<'EOF'
{"allowedOrgs": ["acme-corp"], "adminEmail": "it@acme.com"}
EOF
$ sudo chown root:root /etc/docker-sbx/config.json
$ sudo chmod 644 /etc/docker-sbx/config.json要删除测试配置:
$ sudo rm -f /etc/docker-sbx/config.json::: :::
然后用一个属于允许组织的账户运行 sbx login,再用一个不属于允许组织的账户运行一次。 第二次登录会被拒绝,并显示查看被拒绝的开发者看到什么 中描述的消息。
把配置部署到你管理的机器
使用你现有的终端管理工具部署该配置。每个平台都从各自的原生位置读取它,普通用户无法 修改该位置。
::: tabs ::: tab macOS
在 macOS 上,该配置是一个受管首选项域 com.docker.sbx。
通过任意 MDM 解决方案(例如 Jamf 或 Intune)以自定义配置描述文件的形式部署它。由 MDM 部署的描述文件优先级高于用户级首选项,且只能通过把设备从 MDM 管理中移除来删除,因此 用户无法覆盖它们。
下面的 .mobileconfig 载荷设置了允许的组织和管理员联系信息:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key>
<string>com.apple.ManagedClient.preferences</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadIdentifier</key>
<string>com.docker.sbx.policy</string>
<key>PayloadUUID</key>
<string><!-- generate a UUID --></string>
<key>PayloadEnabled</key>
<true/>
<key>PayloadDisplayName</key>
<string>Docker Sandboxes Policy</string>
<key>PayloadContent</key>
<dict>
<key>com.docker.sbx</key>
<dict>
<key>Forced</key>
<array>
<dict>
<key>mcx_preference_settings</key>
<dict>
<key>allowedOrgs</key>
<array>
<string>acme-corp</string>
</array>
<key>adminEmail</key>
<string>it-security@acme-corp.com</string>
<key>adminURL</key>
<string>https://acme-corp.atlassian.net/servicedesk/it</string>
<key>adminName</key>
<string>ACME IT Security</string>
</dict>
</dict>
</array>
</dict>
</dict>
</dict>
</array>
</dict>
</plist>::: ::: tab Windows
在 Windows 上,该配置是 HKLM\SOFTWARE\Policies\Docker\SBX 下的一组注册表项。通过组策略、 Intune 或任何能写入注册表项的终端管理工具部署它们。
| 值名称 | 类型 | 说明 |
|---|---|---|
allowedOrgs | REG_MULTI_SZ | 多字符串列表,每个字符串一个组织 slug |
adminName | REG_SZ | 管理员或团队名称(可选) |
adminEmail | REG_SZ | 联系邮箱(可选) |
adminURL | REG_SZ | 服务台 URL(可选) |
::: ::: tab Linux
在 Linux 上,该配置是由 root 拥有的 JSON 文件,位于 /etc/docker-sbx/config.json。
通过 Ansible、Puppet、Chef 或 Salt 等配置管理工具部署。该文件必须由 root 拥有,权限为 644。
{
"allowedOrgs": ["acme-corp"],
"adminEmail": "it-security@acme-corp.com",
"adminURL": "https://acme-corp.atlassian.net/servicedesk/it",
"adminName": "ACME IT Security"
}如果该文件是符号链接、不是常规文件、不由 root 拥有,或者对组或其他用户可写,Linux 加载器会按失败关闭处理。任何偏差都被视为配置错误,sbx login 会被拒绝并给出说明性 消息。使用在一台机器上测试配置中的命令部署即可 通过这些检查。
::: :::
查看被拒绝的开发者看到什么
当用户用一个不属于允许组织的账户登录时,他会被登出并看到一条拒绝消息。消息中只显示你 配置的联系人字段。例如,如果只设置了 adminEmail,则不会显示 URL 行。
未配置管理员联系信息时:
Access denied: Your administrator requires you to be logged into an account
that is a member of one of the following Docker organizations:
- acme-corp
Sign in with an account that belongs to one of these organizations, or
contact your administrator for access.配置了管理员联系信息时:
Access denied: Your administrator requires you to be logged into an account
that is a member of one of the following Docker organizations:
- acme-corp
For access, contact ACME IT Security:
Email: it-security@acme-corp.com
URL: https://acme-corp.atlassian.net/servicedesk/it关闭强制执行
要在一台机器上关闭登录强制要求,请使用与部署时相同的工具删除该配置。你也可以让 allowedOrgs 保持为空,这会让强制执行不生效,任何通过身份验证的用户都可以使用 Docker Sandboxes。