认证代理允许沙盒代码调用外部 API(OpenAI、Anthropic、GitHub 等)而无需硬编码凭据。当在沙盒上配置后,代理边车会自动使用您的工作区密钥或您在代理配置中提供的写入专用凭据,将认证头注入匹配的出站请求中。
您必须在创建引用这些密钥的沙盒之前,在您的 LangSmith 工作区 设置中配置您的密钥(例如,OPENAI_API_KEY)。

出口流量与网络访问控制

用于注入凭据的同一个 proxy_config 也控制着沙盒可以访问哪些目标地址。

默认出口策略

默认情况下(未配置 access_control):
  • 允许到任何主机的 HTTP 和 HTTPS(端口 80 和 443)。 出站 HTTP(S) 请求会被透明地通过代理路由,您的 rules 和 callbacks 在此过程中注入凭据。
  • 所有其他原始 TCP 流量被阻止。 除非您明确允许,否则到非 HTTP 端口的连接——数据库(5432 端口的 psql/dbt)、SSH (22)、Redis (6379) 等——将被丢弃。
这意味着原始协议被阻止并非因为代理”无法识别”它们——它们默认被阻止,并通过 access_control 按主机和端口开放。

允许列表和拒绝列表

在 proxy_config 中添加一个 access_control 对象,使用仅 allow_list 或 deny_list 之一(不能同时设置两者——如果同时设置,请求将被拒绝):
原始 TCP 出口(例如 5432 端口的 PostgreSQL)只能通过指定了明确非 HTTP 端口(host:PORT)的 allow_list 条目来启用。默认策略和 deny_list 模式仅允许 HTTP/HTTPS。

模式语法

每个 allow_list/deny_list 条目使用以下形式:

连接数据库(原始 TCP)

要让沙盒代码通过 psql、dbt 或任何驱动程序访问外部 PostgreSQL 数据库,请将主机及其端口添加到允许列表。因为 allow_list 默认拒绝,所以还需要列出沙盒需要的任何 HTTP(S) 主机:
到 db.example.com:5432 的连接在 TCP 层透传,不会被拦截,因此 PostgreSQL 线路协议——以及 TLS、主机密钥检查和其上的任何其他端到端协议——可以正常工作。

通过 SDK 配置

配置认证代理规则

在创建沙盒时添加 proxy_config,或者通过修补现有沙盒的 proxy_config 来更新。每条规则指定:

头类型

每个头都有一个 type,控制其值的存储和显示方式:

认证 AWS 请求

当沙盒代码需要使用 AWS SDK 或 CLI 调用 AWS 服务时,请使用 AWS 认证规则。代理将真正的 AWS 凭据保留在沙盒外部,然后使用 AWS SigV4 对支持的出站 HTTPS 请求进行签名。 当代理代码需要检查 S3 对象、调用 Bedrock 或使用另一个支持的 AWS HTTPS 端点,而又不想在沙盒文件、环境变量、shell 历史记录或日志中暴露长期有效的 AWS 访问密钥时,这非常有用。沙盒会收到兼容性 AWS 凭据占位符,以便 SDK 凭据检测正常工作,而代理则使用配置的凭据对出站请求进行签名。
不要将真实的 AWS 访问密钥设置为沙盒环境变量。请将它们配置为 workspace_secret 或 opaque 代理值。纯文本 AWS 凭据值会被拒绝。
AWS 认证规则与头注入规则不同:
  • 将 type 设置为 aws。
  • 将凭据放在 aws 对象下。
  • 不要设置 match_hosts、match_paths 或 headers;AWS 主机匹配内置于代理中。
  • 每个沙盒最多配置一个 AWS 认证规则。

通过 SDK 配置 AWS 认证

沙盒就绪后,可在沙盒内正常使用 AWS SDK 或 CLI。SDK 或 CLI 可以发现占位符 AWS 环境变量,代理则将真实的 SigV4 签名应用于出站 AWS 请求。
AWS 认证代理规则目前支持访问密钥 ID 和秘密访问密钥凭据。它们不包括会话令牌或角色代入配置。

认证 GCP 请求

当沙盒代码需要使用 Google SDK 或 CLI 调用 Google API 时,请使用 GCP 认证规则。代理将服务账号 JSON 保留在沙盒外部,然后对沙盒代理匹配的 Google API 主机的受支持出站 HTTPS 请求进行身份验证。 当代理代码需要检查 GCS 对象或调用另一个 Google API,而又不想在沙盒文件、环境变量、shell 历史记录或日志中暴露服务账号 JSON 时,这非常有用。沙盒会收到兼容性凭据,以便 SDK 凭据检测正常工作,而代理则使用配置的服务账号对出站请求进行身份验证。
不要将真实的服务账号 JSON 设置为沙盒环境变量。请将它们配置为 workspace_secret 或 opaque 代理值。纯文本 GCP 凭据值会被拒绝。
GCP 认证规则与头注入规则不同:
  • 将 type 设置为 gcp。
  • 将凭据放在 gcp.service_account_json 下。
  • 将 gcp.scopes 设置为非空的 OAuth 作用域列表。
  • 代理会自动匹配 Google API 主机,并使用配置的服务账号对这些请求进行身份验证。
  • 每个沙盒最多配置一个启用的 GCP 认证规则。
SDK 的 gcp_auth 和 gcpAuth 辅助函数会构建相同形状的规则。

通过 SDK 配置 GCP 认证

沙盒就绪后,可在沙盒内正常使用 Google SDK 或 CLI 进行支持的 Google API 请求。SDK 或 CLI 可以发现兼容性凭据,代理则使用配置的服务账号进行真实的 GCP 身份验证,而不会在沙盒内暴露服务账号 JSON。

单个 API 示例

创建一个自动将 OpenAI API 密钥注入出站请求的沙盒:
现在,沙盒可以在不设置 API 密钥的情况下调用 OpenAI——代理会自动注入它。

多个 API 示例

添加多条规则以同时对多个服务进行身份验证:

GitHub 示例

Open SWE 通过在沙盒外部生成一个短期的 GitHub App 安装令牌,然后使用写入专用的 opaque 代理规则修补沙盒,来对 GitHub 访问进行身份验证。这使短期的 GitHub 访问令牌不会出现在沙盒文件系统中,也不会出现在部署环境变量中。 配置两条规则:
Python
在创建或重新连接到沙盒后调用 configure_github_proxy。GitHub App 安装令牌会过期,因此每当您为新的运行重用沙盒时,请刷新代理配置。 在沙盒内部,当 CLI 在发送请求前需要本地凭据时,设置一个非保密的占位符令牌:
该占位符仅满足 gh CLI 的本地检查。代理会将真实的 Authorization 头注入到出站请求中。

通过 SDK 配置

回调凭据示例

静态 workspace_secret 规则在应用代理配置时从您的工作区拉取凭据,而 opaque 规则允许您的应用程序修补短期凭据,例如 GitHub 令牌示例。对于必须由您自己的服务在代理时解析的凭据,请使用回调。代理会向您提供的 URL 发送 POST 请求,您的端点返回要注入的头,代理缓存结果。 回调与 proxy_config 下的规则一起配置: 静态规则优先。 如果 rules 中的任何规则匹配该主机,则会跳过该主机的回调。在规则中,首次匹配优先;如果多个回调匹配,规则之间也适用此规则。

回调契约

每当代理需要解析缓存未命中(cache miss)的匹配主机的凭据时,会发出以下请求:
您的端点必须以 2xx 响应,并包含 JSON 主体:
代理将响应中的每个头注入沙盒的出站请求,并将响应缓存 ttl_seconds 秒。任何非 2xx 响应、传输错误或格式错误的 JSON 都会导致失败关闭(fail closed):沙盒的请求会被拒绝,并返回 502 callback resolution failed(不注入头,不缓存响应)。

示例

当您的 OAuth 令牌由您自己的服务按需生成时,请使用回调:

通过 SDK 配置