

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 设置沙盒
<a name="configuring-integrations-and-knowledge-sandbox"></a>

沙盒是一项预览功能，它为 AWS DevOps Agent 提供了一个安全、隔离的 Linux 环境，它可以在调查期间编写和运行代码。与仅通过推理相比，用代码解决某些问题更快、更可靠。在沙盒中，代理通过计算来补充其推理，例如，分析大型日志文件，计算一组指标的统计数据，或者在调查期间解析和关联来自多个来源的数据。

每个沙箱都是短暂的，仅限于一次调查，因此代理运行的代码与您的其他资源保持隔离。您可以控制环境的出站网络访问权限和预安装的软件包。默认情况下，沙箱限制出站网络访问：在将条目添加到网络许可名单之前，它只能 AWS 访问服务端点。

**注意**  
**沙盒已提供预览版，可能会发生变化。

在预览期间，沙盒仅在以下 AWS 区域可用：
+ 美国东部（弗吉尼亚北部）`us-east-1`
+ 美国西部（俄勒冈）`us-west-2`
+ 亚太地区（东京）`ap-northeast-1`
+ 欧洲（爱尔兰）`eu-west-1`

有关更多信息，请参阅[按区域划分的功能可用性](about-aws-devops-agent-supported-regions.md)。

## 沙盒的工作原理
<a name="how-sandbox-works"></a>

为代理空间配置沙盒时， AWS DevOps 代理在进行调查时会自动配置全新的 Linux 环境。在此环境中，代理可以运行 shell 命令并读取和写入文件，然后将结果读回其分析中。环境仅在调查期间持续下去，没有两项调查共享一个环境。

该环境为连接到您的代理空间的 AWS 帐户提供了预先 AWS 配置的配置文件。代理可以使用这些配置文件对这些账户进行 AWS CLI 和 boto3（AWS 适用于 Python 的 SDK）调用，其范围与代理已有的权限相同。这允许代理在调查期间以编程方式查询 AWS 资源并将其与代码相关联。

代理还可以使用命令行工具或 Python 和 Node.js 库从沙箱向您的网络策略允许的任何主机和路径发出 HTTP 请求。

有两个设置控制环境能做什么：
+ **网络策略**-环境可能到达的主机、HTTP 方法和路径的明确许可名单。空白名单会拒绝除 AWS 服务终端节点之外的所有出站请求。
+ **软件包**-环境中预安装的`pip`和`npm`软件包。代理的代码可以导入它们，而无需在运行时获取它们。

**注意**  
**在预览期间，代理仅在调查期间使用沙箱。对聊天、自定义代理和其他 DevOps 代理功能的 Support 即将推出。

### 沙盒中的技能
<a name="skills-in-the-sandbox"></a>

启用沙盒后，代理会[DevOps 特工技能](about-aws-devops-agent-devops-agent-skills.md)从沙盒的文件系统而不是虚拟文件系统中读取您的内容。这通过两种方式改变了代理使用技能的方式：
+ **使用命令行工具搜索和读取** — 代理可以使用标准命令行工具搜索您的技能并读取其文件，而不必通过虚拟文件系统加载它们。这有助于它找到并应用适合任务的技能。
+ **运行捆绑代码**-代理可以运行和改编与技能捆绑在一起的代码。如果没有沙盒，技能只能包含不可执行的文件，例如 Markdown 指令、参考文献和数据文件。使用沙盒，技能可以包含代理可以在环境中运行的可执行代码。

## 开始前的准备工作
<a name="before-you-begin"></a>

默认情况下未配置沙箱，因此在您选择加入之前，代理无法运行代码。下图显示了配置之前的 “**沙盒**” 部分。

![沙盒部分显示 “未配置沙箱”，其中包含空的 pip 包、npm 包和允许名单条目字段。](http://docs.aws.amazon.com/zh_cn/devopsagent/latest/userguide/images/221a777b9eda.png)


在配置沙盒之前，请确定以下几点：
+ 代理代码需要到达的主机、HTTP 方法和路径（如果有）。在添加许可名单条目之前，沙箱只能访问 AWS 服务端点。
+ 要在环境中预安装的`pip`和`npm`软件包。

## 为代理空间配置沙箱
<a name="configure-sandbox-for-an-agent-space"></a>

1. 登录 AWS 管理控制台并打开 AWS DevOps 代理控制台。

1. 选择您的代理空间，然后选择 “**功能**” 选项卡。

1. 在 “**沙盒” 部分中**，选择**配置**。

1. 按照以下各节所述配置网络策略和预安装的软件包。

1. 保存您的配置。

配置沙盒后，**沙盒**部分会显示您的预安装`pip`和`npm`软件包以及允许名单条目的数量。要稍后删除配置，请参阅[移除沙箱](#remove-sandbox)。

### 配置网络策略
<a name="configure-the-networking-policy"></a>

沙箱将出站请求限制在明确的允许名单范围内。空白名单会拒绝除 AWS 服务终端节点之外的所有出站请求。要让环境访问任何其他主机，请为其添加一个允许名单条目。

选择**添加条目**，然后为许可名单条目配置以下内容：
+ **主机模式**-条目适用的主机。不支持部分标签匹配。使用以下表格之一：
  + `**`— 所有主机。
  + `*.example.com`— 一个子域级别。
  + `**.example.com`— 任何子域深度。
  + `example.com`— 确切的主持人。
+ **HTTP 方法**-此主机允许使用的 HTTP 方法。从下拉列表中选择一种或多种方法`OPTIONS`，例如`GET`和。
+ **路径模式**-该主机允许的路径。选择**添加路径**以添加一个或多个模式：
  + `*`匹配一个区段，例如`/repos/*/pulls`。
  + 允许部分匹配，例如`/users/aws-*/`。
  + `/**`允许所有子路径。
  + 查询参数将被忽略。

下图显示了已完成的许可名单条目。

![包含主机模式 *.github.com、GET 和 OPTIONS 方法以及路径模式 /** 的允许名单条目。](http://docs.aws.amazon.com/zh_cn/devopsagent/latest/userguide/images/02356ee2008f.png)


为代理代码需要到达的每台其他主机选择**添加条目**。要删除条目，请选择 “**删除**”。

### 配置预安装的软件包
<a name="configure-pre-installed-packages"></a>

在 “**软件包**” 部分，指定要在沙盒环境中预安装的`pip`和`npm`软件包。然后，代理的代码可以直接导入这些软件包，环境不需要出站访问软件包注册表即可使用它们。下图显示了配置了示例**包**的 “软件包” 部分。

![包部分包含 pip 包请求以及 pandas 和 npm 包 axios，每个都带有 “删除” 按钮。](http://docs.aws.amazon.com/zh_cn/devopsagent/latest/userguide/images/8035f788fb71.png)

+ **pip 软件包** — 选择 “**添加软件包**”，然后为每个要预安装的 Python 包输入软件包名称`pandas`，例如`requests`或。
+ **npm pac** kages — 选择 “**添加软件**包”，然后为每个要预安装的软件包输入 Node.js 软件包名称`axios`，例如。

要移除包裹，请选择其旁边的 “**删除**”。

## 移除沙箱
<a name="remove-sandbox"></a>

**要选择退出，请移除沙盒配置：选择您的代理空间，前往 “**功能**” 选项卡，然后在 “**沙盒**” 部分中选择 “移除”。**删除配置后，代理不再为新的调查配置沙箱环境。

## 沙盒配置限制
<a name="sandbox-configuration-limits"></a>

在预览期间，以下限制适用于每个沙盒配置。


| 限制 | 值 | 
| --- | --- | 
| pip 软件包 | 50 | 
| npm 软件包 | 50 | 
| 网络许可名单条目 | 100 | 
| 每个许可名单条目的路径模式 | 50 | 
| 每个许可名单条目的 HTTP 方法数 | 至少 1 | 

## 安全注意事项
<a name="security-considerations"></a>

AWS DevOps 代理将每项调查隔离在自己的沙盒环境中，因此一项调查的代码和数据永远不会与其他调查共享。 AWS DevOps 代理会检查和筛选所有离开沙箱的流量，以便只有安全、允许的请求才能到达目的地。它允许向 AWS 服务端点和与您的网络许可名单匹配的主机发出的请求，并拒绝所有其他请求。

代理在沙箱中生成和运行代码。配置时请记住以下几点：
+ **尽量减少许可名单。**如果许可名单为空，则沙箱只能访问 AWS 服务端点。仅为代理所需的特定主机、方法和路径添加许可名单条目。
+ **缩小许可名单条目的范围。**使用精确的主机模式和特定的路径模式，而不是宽泛的通配符，例如`**`和`/**`，并且仅授予所需的 HTTP 方法。
+ **Pre-install 软件包而不是许可名单注册表。**在预安装代理所需的软件包时，可以避免在运行时授予对软件包注册表的出站访问权限。

有关 AWS DevOps 代理安全模型的更多信息，请参阅[AWS DevOps 代理安全](aws-devops-agent-security.md)。