Skip to content

在这个示例中,你创建一个沙箱,为它允许和阻止目标地址,阻止一个 HTTP 方法,然后回顾 发生了什么。示例使用 shell 智能体,因此你不需要登录任何智能体。

开始之前 ​

安装 Docker Sandboxes。

如果你的组织为你强制执行了策略,某些步骤的表现会有所不同。有关更多细节,请参阅 组织策略如何与本地规则和 Kit 规则相互关联。

第 1 步:创建沙箱 ​

创建一个名为 policy-demo 的沙箱,并把当前目录作为它的工作区:

console
$ sbx create --name policy-demo shell .

如果你还没有选择网络预设,sbx 会提示你选择一个。 本示例适用于任何预设。

第 2 步:为该沙箱允许一个目标地址 ​

添加一条只适用于 policy-demo 的 example.com 允许规则:

console
$ sbx policy allow network --sandbox policy-demo example.com

该规则不会影响你的其他沙箱。列出你添加的、适用于该沙箱的规则:

console
$ sbx policy ls policy-demo --wide --created-via added

列表中包含 example.com 规则,APPLIES TO 列中显示 sandbox:policy-demo。你的预设 带来的规则不会列出,因为 --created-via added 只显示你添加的规则。有关更多细节,请 参阅检查策略状态和规则。

从沙箱内部访问该目标地址:

console
$ sbx exec policy-demo -- curl -sI https://example.com

有关更多细节,请参阅管理本地网络规则。

第 3 步:为该沙箱阻止一个目标地址 ​

添加一条只适用于 policy-demo 的 registry.npmjs.org 拒绝规则:

console
$ sbx policy deny network --sandbox policy-demo registry.npmjs.org

检查该目标地址:

console
$ sbx policy check network --sandbox policy-demo registry.npmjs.org

检查结果为 Denied。拒绝规则优先于允许规则,包括你的预设和 Kit 添加的允许规则。

第 4 步:为该沙箱阻止一个 HTTP 方法 ​

HTTP 规则匹配主机上的方法和路径,而不是整个主机。用 HTTP 规则允许或阻止特定的 API 请求,例如让智能体读取某个 API 却不允许它写入。为 policy-demo 阻止发往 example.com 的 POST 请求:

console
$ sbx policy deny network --sandbox policy-demo example.com --method POST

从沙箱内部发送一个 POST 请求:

console
$ sbx exec policy-demo -- curl -s -X POST https://example.com

响应以 Blocked by local rule 开头。其他方法仍然被允许。向同一目标地址发送一个 GET 请求:

console
$ sbx exec policy-demo -- curl -s https://example.com

响应是 example.com 页面的 HTML。

sbx policy check network 报告的是主机的判定结果,而不是某个方法或路径的结果, 因此要测试 HTTP 规则,请使用像上面这样的请求。有关更多细节,请参阅 允许或阻止 HTTP 方法和路径。

第 5 步:回顾网络活动 ​

查看该沙箱的网络活动:

console
$ sbx policy log policy-demo

有关更多细节,请参阅测试和监控网络策略。

第 6 步:清理 ​

删除沙箱:

console
$ sbx rm policy-demo

删除沙箱时,限定到它的规则也会一并删除,因此你不需要移除本示例中添加的规则。

后续步骤 ​