用 Chrome 企业策略给 AI 浏览器 Agent 画一道"围栏"

2026-05-15 14 预计阅读时间:1 分钟
来源:aws.amazon.com AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:10 分钟

当 AI Agent 拿到浏览器权限,它可以去任何网站——这对企业来说是个不可接受的风险。Amazon Bedrock AgentCore 现在支持将 Chrome 企业策略注入浏览器会话,让你精确控制 Agent 能访问哪些域名、能否下载文件、是否允许执行 JavaScript。本文演示如何配置这些策略、通过会话录制验证策略生效,以及如何注入自定义根 CA 证书让 Agent 访问内部 HTTPS 服务。

Agent 浏览器的权限困境

Bedrock AgentCore 的浏览器工具让 Agent 能像人一样打开网页、点击、滚动、提取内容。但默认情况下,Agent 拿到的 Chrome 实例几乎没有限制——它能访问公网任意站点,也能触及不该碰的内网服务。

这在企业场景中直接阻断落地:

  • 合规要求:金融、医疗等行业的数据访问有严格边界,Agent 不能随意跳转到第三方站点。
  • 数据泄露风险:Agent 可能将敏感查询参数发送到外部搜索引擎。
  • 内部服务访问:内网 HTTPS 服务使用私有 CA 签发证书,Agent 的浏览器会因证书不可信而拒绝连接。

Chrome 企业策略(Enterprise Policies)正是解决这些问题的标准机制——IT 管理员用它管控员工浏览器,现在同样的策略可以注入 Agent 的浏览器会话。

配置 URL 白名单策略

核心策略是 URLBlacklistURLWhitelist:先黑名单阻断所有站点,再白名单放行指定域名。这比单独用黑名单更安全——默认拒绝,显式允许。

在 Bedrock AgentCore 中,策略通过浏览器会话配置注入。以下是一个完整的配置示例:

import boto3

client = boto3.client("bedrock-agentcore")

# 创建带 Chrome 企业策略的浏览器会话
response = client.create_browser_session(
    browserIdentifier="my-restricted-browser",
    chromeEnterprisePolicies={
        "policies": {
            # 1. 黑名单阻断所有 URL
            "URLBlacklist": ["*"],

            # 2. 白名单放行 Bedrock 文档站点
            "URLWhitelist": [
                "docs.aws.amazon.com/bedrock/",
                "docs.aws.amazon.com/bedrock-agentcore/",
            ],

            # 3. 禁止下载文件
            "DownloadRestrictions": 3,  # 3 = 完全禁止下载

            # 4. 禁止开发者工具(防止 Agent 绕过限制)
            "DeveloperToolsAvailability": 2,  # 2 = 禁用

            # 5. 禁止书签和密码保存
            "AllowSavingBrowserHistory": False,
            "PasswordManagerEnabled": False,
        }
    }
)

session_id = response["sessionId"]
print(f"受限浏览器会话已创建: {session_id}")

策略生效后,Agent 尝试访问 google.com 或任何不在白名单中的站点时,Chrome 会直接拦截,页面显示"被企业策略阻止"。

注意URLBlacklist 设为 ["*"] 是关键——它阻断一切,然后白名单才有意义。如果只配白名单不配黑名单,白名单不会生效。

通过会话录制验证策略

光配策略不够,你需要亲眼确认 Agent 确实被拦住了。AgentCore 的会话录制功能(Session Recording)可以回放 Agent 的每一步浏览器操作。

# 启动一个带录制的 Agent 任务
response = client.invoke_agent(
    agentIdentifier="my-doc-researcher",
    sessionId=session_id,
    inputText="查找 Bedrock AgentCore 的浏览器工具使用文档",
    sessionRecordingConfig={
        "recordingMode": "SCREEN_AND_AUDIO"  # 录制屏幕画面和音频
    }
)

# 任务完成后获取录制回放
recording = client.get_session_recording(
    sessionId=session_id
)

# 录制会包含:
# - Agent 成功访问 docs.aws.amazon.com 的画面
# - Agent 尝试访问其他站点时被策略拦截的画面(如果有)
print(f"录制回放地址: {recording['playbackUrl']}")

在回放中你会看到:Agent 打开白名单站点时一切正常,但如果 Agent 的推理链中产生了访问外部搜索引擎的意图,Chrome 会弹出策略拦截页面,Agent 不得不回到白名单站点继续操作。

这是最直观的验证方式——比翻日志更可信,比单元测试更真实。

注入自定义根 CA 证书

企业内网服务常用私有 CA 筣发证书。普通 Chrome 会报 NET::ERR_CERT_AUTHORITY_INVALID,Agent 的浏览器也一样。AgentCore 支持在策略中注入自定义根 CA,让 Agent 信任内网证书。

# 读取企业内部 CA 的根证书(PEM 格式)
with open("internal-root-ca.pem", "r") as f:
    root_ca_pem = f.read()

response = client.create_browser_session(
    browserIdentifier="internal-browser",
    chromeEnterprisePolicies={
        "policies": {
            "URLBlacklist": ["*"],
            "URLWhitelist": [
                "internal-dashboard.corp.example.com",
                "api.internal.corp.example.com",
            ],
            # 注入自定义根 CA 证书
            "CACertificates": [
                {
                    "certificate": root_ca_pem,  # PEM 格式的根证书内容
                    "displayName": "Corp Internal Root CA"
                }
            ]
        }
    }
)

你可以用公开测试站点验证证书注入是否生效。例如 badssl.com 提供了各种证书错误场景的测试页面:

# 验证场景:先用已知不受信的证书站点确认默认行为是拦截
# 再注入对应根 CA,确认 Agent 能正常访问

# 步骤 1:不带 CA 创建会话,访问 https://untrusted-root.badssl.com/
# 预期:Agent 报证书错误,无法继续

# 步骤 2:注入 badssl 的测试根 CA 后重新创建会话
# 预期:Agent 能正常打开页面并提取内容

实际部署中:你不会注入 badssl 的 CA——这里只是用公开测试站点验证机制。真实场景注入的是你企业自己的根 CA。

完整实践:一个受限的文档研究 Agent

把上述能力组合起来,构建一个只能在指定站点查资料、只能访问内网 HTTPS 服务的 Agent:

import boto3
import json

client = boto3.client("bedrock-agentcore")

# --- 1. 准备企业根 CA ---
with open("corp-root-ca.pem", "r") as f:
    corp_ca = f.read()

# --- 2. 创建受限浏览器会话 ---
browser_session = client.create_browser_session(
    browserIdentifier="doc-research-browser",
    chromeEnterprisePolicies={
        "policies": {
            "URLBlacklist": ["*"],
            "URLWhitelist": [
                "docs.aws.amazon.com/bedrock-agentcore/",
                "docs.aws.amazon.com/bedrock/",
                "internal-kb.corp.example.com/",  # 内网知识库
            ],
            "DownloadRestrictions": 3,
            "DeveloperToolsAvailability": 2,
            "CACertificates": [
                {
                    "certificate": corp_ca,
                    "displayName": "Corp Root CA"
                }
            ]
        }
    }
)

# --- 3. 配置 Agent 使用该浏览器 ---
agent_config = {
    "agentIdentifier": "doc-researcher",
    "browserSessionId": browser_session["sessionId"],
    "sessionRecordingConfig": {
        "recordingMode": "SCREEN"
    }
}

# --- 4. 执行研究任务 ---
result = client.invoke_agent(
    **agent_config,
    inputText="总结 Bedrock AgentCore 浏览器工具的核心功能和安全配置方法"
)

print(result["outputText"])

# --- 5. 审查录制回放 ---
recording = client.get_session_recording(
    sessionId=browser_session["sessionId"]
)
print(f"审查回放: {recording['playbackUrl']}")

上线前的检查清单

检查项 说明
URLBlacklist 设为 ["*"] 否则白名单不生效,这是最常见的配置错误
白名单域名精确到路径 docs.aws.amazon.com 太宽泛,docs.aws.amazon.com/bedrock/ 才是精确边界
自定义 CA 用 PEM 格式 DER 格式不会被接受,确保你的 CA 证书是 PEM 编码
开启会话录制 这是审计和调试的唯一直观手段,不要省略
禁用开发者工具 DeveloperToolsAvailability: 2 防止通过 DevTools 绕过策略
测试拦截场景 主动让 Agent 尝试访问黑名单站点,确认策略确实生效

权衡提醒:白名单越窄,安全性越高,但 Agent 的信息获取能力也越受限。如果 Agent 需要交叉验证多个信息源,白名单需要覆盖所有必要站点。一个实用做法是:先宽后窄——初期放开较多站点观察 Agent 实际访问模式,再逐步收紧到最小集。

Chrome 企业策略让 AI Agent 的浏览器从"无人驾驶"变成"有围栏的无人驾驶"——Agent 仍然自主决定怎么浏览,但它只能在你画好的边界内行动。


相关推荐