View a markdown version of this page

使用浏览器代理 - Amazon Bedrock AgentCore

使用浏览器代理

Amazon Bed AgentCore rock Browser 支持通过您自己的外部代理服务器路由浏览器流量。这使组织能够:

  • 通过具有已知出口 IP 的代理路由流量,消除因轮换 IP 地址而导致的重新身份验证周期,从而实现 IP 稳定性 AWS

  • 通过为需要访问控制的服务提供稳定、可控的出口地址来@@ 支持 IP 许可名单 IP-based

  • 通过您现有的代理服务器进行路由以访问内部网页和资源,从而与@@ 企业基础设施集

概述

使用代理配置创建浏览器会话时,浏览器会将 AgentCore 浏览器配置为通过您指定的代理服务器路由 HTTP 和 HTTPS 流量。

浏览器代理请求流,显示从浏览器会话通过客户管理的代理服务器到目标网站的流量路由。

请求流程:

  1. StartBrowserSessionproxyConfiguration通过指定您的代理服务器进行呼叫。

  2. 如果使用身份验证,则从 S AWS ecrets Manager 中 AgentCore 检索代理凭证。

  3. 浏览器会话从应用代理配置开始。

  4. 浏览器流量根据您的域名路由规则通过您的代理服务器进行路由。

  5. 您的代理服务器将请求转发到目标网站。

代理服务器是您拥有和管理的基础架构。 AgentCore 浏览器以客户端的身份连接到它。

代理配置在启动时将 Chromium --proxy-server 标志应用于浏览器实例,在浏览器级别引导流量通过指定的代理。对于需要网络层强制执行的场景(例如,在运行时可以修改浏览器级别的设置时),请在您自己的 VPC 中部署浏览器会话。请参阅为 VPC 配置 Amazon 基岩 AgentCore 运行时和工具。

先决条件

在配置浏览器代理之前,请确保:

  • 一般浏览器先决条件-完成标准浏览器工具设置。请参阅 AgentCore 浏览器入门

  • 代理服务器 — 一种可从公共互联网访问的 HTTP/HTTPS 代理服务器(如果使用 VPC 配置,则可在您的 VPC 内访问),并且支持用于 HTTPS 流量隧道的 HTTP CONNECT 方法。

  • AWS S@@ ecrets Manager 密钥(如果使用身份验证)— 包含带username和密钥的 JSON 格式代理凭据的password密钥。

  • IAM 权限(如果使用身份验证)— IAM 身份调用者StartBrowserSession必须拥有凭证密钥的secretsmanager:GetSecretValue权限。

开始使用

本节显示通过代理路由浏览器流量的最简单配置。

步骤 1:创建凭据密钥(如果使用身份验证)

如果你的代理需要身份验证,请在 Secrets Manager 中创建一个 AWS 密钥:

aws secretsmanager create-secret \ --name "my-proxy-credentials" \ --secret-string '{"username":"<your-username>","password":"<your-password>"}'

凭证格式要求:

字段 允许使用的字符

username

字母数字加号 @ . _ + = -

password

字母数字加上 @. _ + =-! # $% *

不允许使用字符:冒号 (:)、换行符、空格、引号。

第 2 步:添加 IAM 权限

将此策略添加到将创建浏览器会话的 IAM 身份:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:AWS Region:AWS account:secret:secret-name*" } ] }

步骤 3:使用代理创建浏览器会话

您可以使用 AWS CLI、SDK 或 API 创建带有代理配置的浏览器会话。

AWS CLI
  1. 要使用 AWS CLI 启动与代理的浏览器会话,请执行以下操作:

    aws bedrock-agentcore start-browser-session \ --browser-identifier "aws.browser.v1" \ --name "my-proxy-session" \ --proxy-configuration '{ "proxies": [{ "externalProxy": { "server": "your-proxy-hostname", "port": 8080, "credentials": { "basicAuth": { "secretArn": "arn:aws:secretsmanager:region:account-id:secret:secret-name" } } } }] }'

    对于使用 IP 许可名单而不是凭据的代理,请省略以下字段:credentials

    aws bedrock-agentcore start-browser-session \ --browser-identifier "aws.browser.v1" \ --name "my-proxy-session" \ --proxy-configuration '{ "proxies": [{ "externalProxy": { "server": "your-proxy-hostname", "port": 8080 } }] }'
Boto3
  1. 要使用适用于 Python 的 AWS SDK (Boto3) 启动与代理的浏览器会话,请执行以下操作:

    import boto3 client = boto3.client('bedrock-agentcore', region_name='region') response = client.start_browser_session( browserIdentifier="aws.browser.v1", name="my-proxy-session", proxyConfiguration={ "proxies": [{ "externalProxy": { "server": "your-proxy-hostname", "port": 8080, "credentials": { "basicAuth": { "secretArn": "arn:aws:secretsmanager:region:account-id:secret:secret-name" } } } }] } ) print(f"Session ID: {response['sessionId']}")

    对于使用 IP 许可名单而不是凭据的代理,请省略以下字段:credentials

    proxyConfiguration={ "proxies": [{ "externalProxy": { "server": "your-proxy-hostname", "port": 8080 } }] }
API
  1. 要使用 API 启动与代理的浏览器会话,请执行以下操作:

    PUT /browsers/aws.browser.v1/sessions/start HTTP/1.1 Host: bedrock-agentcore.region.amazonaws.com Content-Type: application/json Authorization: AWS4-HMAC-SHA256 ... { "name": "my-proxy-session", "proxyConfiguration": { "proxies": [{ "externalProxy": { "server": "your-proxy-hostname", "port": 8080, "credentials": { "basicAuth": { "secretArn": "arn:aws:secretsmanager:region:account-id:secret:secret-name" } } } }] } }

配置选项

Domain-based 路由

domainPatterns用于通过指定代理路由特定域:

AWS CLI
  1. aws bedrock-agentcore start-browser-session \ --browser-identifier "aws.browser.v1" \ --name "domain-routing-session" \ --proxy-configuration '{ "proxies": [ { "externalProxy": { "server": "corp-proxy.example.com", "port": 8080, "domainPatterns": [".company.com", ".internal.corp"] } }, { "externalProxy": { "server": "general-proxy.example.com", "port": 8080 } } ] }'
Boto3
  1. proxyConfiguration={ "proxies": [ { "externalProxy": { "server": "corp-proxy.example.com", "port": 8080, "domainPatterns": [".company.com", ".internal.corp"] } }, { "externalProxy": { "server": "general-proxy.example.com", "port": 8080 } } ] }
API
  1. { "proxyConfiguration": { "proxies": [ { "externalProxy": { "server": "corp-proxy.example.com", "port": 8080, "domainPatterns": [".company.com", ".internal.corp"] } }, { "externalProxy": { "server": "general-proxy.example.com", "port": 8080 } } ] } }

使用此配置:

  • 向 *.company.com 和 *.internal.corp 发出的请求通过 corp-proxy.example.com

  • 所有其他请求都经过路由general-proxy.example.com(默认)

域名模式格式:

模式 Matches 不匹配

.example.com

example.com , www.example.com , api.example.com

notexample.com

example.com

example.com(仅限精确匹配)

www.example.com

使用.example.com(前导点)表示子域名。不要使用 *.example.com。

绕过域名

bypass.domainPatterns用于应在没有任何代理的情况下直接连接的域:

AWS CLI
  1. aws bedrock-agentcore start-browser-session \ --browser-identifier "aws.browser.v1" \ --name "bypass-session" \ --proxy-configuration '{ "proxies": [{ "externalProxy": { "server": "proxy.example.com", "port": 8080 } }], "bypass": { "domainPatterns": [".amazonaws.com"] } }'
Boto3
  1. proxyConfiguration={ "proxies": [{ "externalProxy": { "server": "proxy.example.com", "port": 8080 } }], "bypass": { "domainPatterns": [".amazonaws.com"] } }
API
  1. { "proxyConfiguration": { "proxies": [{ "externalProxy": { "server": "proxy.example.com", "port": 8080 } }], "bypass": { "domainPatterns": [".amazonaws.com"] } } }
注意

代理配置是浏览器级别的路由设置,不提供网络级别的流量控制。要进行网络层强制执行,请在您的 VPC 中部署浏览器会话。请参阅为 VPC 配置 Amazon 基岩 AgentCore 运行时和工具。

路由优先级

根据此优先级(从高到低)的交通路线:

  1. 绕过域名-匹配的域名直接bypass.domainPatterns连接。

  2. 代理域模式 — 与代理通过该代理的domainPatterns路由相匹配的域(根据数组顺序首次匹配获胜)。

  3. 默认代理 — 不匹配的域名不通过代理进行路由domainPatterns

完整示例

以下示例显示了包含域模式、旁路域和身份验证凭据的完整代理配置。

AWS CLI
  1. aws bedrock-agentcore start-browser-session \ --browser-identifier "aws.browser.v1" \ --name "proxy-session" \ --proxy-configuration '{ "proxies": [{ "externalProxy": { "server": "proxy-hostname", "port": 8080, "domainPatterns": [".company.com"], "credentials": { "basicAuth": { "secretArn": "arn:aws:secretsmanager:region:account-id:secret:secret-name" } } } }], "bypass": { "domainPatterns": [".amazonaws.com"] } }'
Boto3
  1. import boto3 client = boto3.client('bedrock-agentcore', region_name='region') response = client.start_browser_session( browserIdentifier="aws.browser.v1", name="proxy-session", proxyConfiguration={ "proxies": [{ "externalProxy": { "server": "proxy-hostname", "port": 8080, "domainPatterns": [".company.com"], "credentials": { "basicAuth": { "secretArn": "arn:aws:secretsmanager:region:account-id:secret:secret-name" } } } }], "bypass": { "domainPatterns": [".amazonaws.com"] } } ) print(f"Session ID: {response['sessionId']}")
API
  1. PUT /browsers/aws.browser.v1/sessions/start HTTP/1.1 Host: bedrock-agentcore.region.amazonaws.com Content-Type: application/json Authorization: AWS4-HMAC-SHA256 ... { "name": "proxy-session", "proxyConfiguration": { "proxies": [{ "externalProxy": { "server": "proxy-hostname", "port": 8080, "domainPatterns": [".company.com"], "credentials": { "basicAuth": { "secretArn": "arn:aws:secretsmanager:region:account-id:secret:secret-name" } } } }], "bypass": { "domainPatterns": [".amazonaws.com"] } } }

使用案例

基于会话的门户的 IP 稳定性

医疗保健和金融门户网站通常根据源 IP 地址验证会话。轮换 AWS IP 地址会导致频繁地重新进行身份验证。通过具有稳定出口 IP 的代理路由流量,以保持会话的连续性。

企业基础设施集成

通过公司代理路由流量的组织可以将这种做法扩展到 AgentCore 浏览器会话,从而允许访问需要基于代理的连接的内部网页和资源。

地理内容访问权限

通过特定地理位置的代理路由流量,访问特定地区的内容或测试区域网站的差异。

合作伙伴网络访问权限

通过专用的代理基础设施路由合作伙伴特定的流量,同时对其他流量使用通用代理。

会话行为

配置生命周期

  • 创建时设置-代理配置在会话创建时设置一次。不支持在运行时更改配置。创建新会话以使用不同的设置。

  • Session-scoped— 每个浏览器会话都有独立的代理配置。

  • 超时-标准会话超时适用。会话结束时,代理配置将被丢弃。

连接行为

  • Fail-open— 创建会话时未验证代理连接。配置了不可用代理的会话将在加载页面时显示错误。

  • 运行时错误-连接失败显示为浏览器错误页面,在 Live View 中可见,便于故障排除。

  • 不自动重试-失败的请求不会自动重试。

Cross-account 秘密访问

如果凭证密钥位于其他 AWS 账户中,请配置以下内容:

秘密资源策略(在拥有密钥的账户中):

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::caller-account-id:root"}, "Action": "secretsmanager:GetSecretValue", "Resource": "*" }] }

KMS 密钥策略(如果使用客户管理的 KMS 密钥):

{ "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::caller-account-id:root"}, "Action": "kms:Decrypt", "Resource": "*" }

安全注意事项

凭据保护

  • 证书存储在 S AWS ecrets Manager 中,并使用您的 IAM 凭证获取。

  • API 响应中永远不会返回凭证。 GetBrowserSession仅限返回secretArn

  • 凭据不会写入日志。

访问控制

  • IAM 权限控制哪些身份可以使用哪些凭证。

  • Cross-account 访问需要明确的资源策略。

性能注意事项

  • 容量-确保您的代理可以处理预期的请求量。

  • Bypas s — bypass.domainPatterns 为延迟敏感型呼叫添加 AWS 端点。

  • 邻近性 — 使用地理位置靠近您所在 AWS 地区的代理。

约束

约束 限制 可调整

每个会话的最大代理数量

5

每个代理的最大域名模式

100

最大旁路域模式

100

服务器主机名长度

253 个字符

域名模式长度

253 个字符

端口范围

1—65535

要申请增加可调整的约束条件,请联系 AWS 支持人员。

限制

在配置浏览器代理之前,请查看以下限制以确保该功能符合您的要求:

限制 说明

流量路由

代理配置是在会话启动时应用的浏览器级别设置。它不是网络级别的控件,也不能保证所有流量都将通过代理。要进行网络层强制执行,请使用配置 Amazon Bedrock AgentCore 运行时和 VPC 工具。

受支持的协议

仅限 HTTP 和 HTTPS 代理。不支持 SOCKS4 和 SOCKS5 代理。

身份验证

HTTP 基本身份验证或不进行身份验证(IP 许可名单)。不支持 NTLM、Kerberos 和基于证书的身份验证。

代理变更

代理配置在会话创建时设置一次。不支持在运行时更改配置。创建新会话以更改代理设置。

代理轮换

不支持针对 IP 循环或负载分配的自动代理轮换。创建新的会话来轮换代理。

连接验证

创建会话时未验证代理连接。运行时会出现连接错误。