将自定义标题传递给 Amazon Bedrock 运行 AgentCore 时
自定义标头允许您将上下文信息从应用程序直接传递到代理代码,而不会使主请求负载混乱。您可以传递任何不在受限制标头列表中的有效 HTTP 标头,包括 webhook 签名X-Custom-Signature,例如 API 密钥X-Api-Key、跟踪上下文或会话标识符。当您的代理配置了自定义 JWT 授权方时,您也可以传递Authorization标头进行 JWT-based 身份验证。为了向后兼容,X-Amzn-Bedrock-AgentCore-Runtime-Custom-继续支持前缀为前缀的标头。每次运行时最多可以配置 20 个标头,每个标头值限制为 4KB。
Amazon Bedrock AgentCore Runtime 允许您在请求中将标头传递给代理代码,前提是标头符合以下标准:
-
标头名称是有效的 HTTP 标头(字母数字字符、连字符和下划线),不在受限制的标头列表中。
-
不允许使用以
x-amz-开头的标头(这些标头保留给 AWS Sigv4 签名)。 -
不允许使用以开头
x-amzn-的标头,但前缀为的标头除外。X-Amzn-Bedrock-AgentCore-Runtime-Custom- -
标
Authorization头要求将代理运行时配置为customJWTAuthorizer用于 OAuth-based 入站访问。 -
标头值的大小不超过 4KB。
-
每个运行时最多可以配置 20 个标头。
-
标头名称不区分大小写,并且不允许重复(通过不区分大小写的比较)。
受限制的标题
为了维护安全性并防止敏感信息泄露,以下标头受到限制,无法配置为传播:
| 类别 | 标头 |
|---|---|
|
身份验证和授权 |
Proxy-Authorization, WWW-Authenticate |
|
内容协商 |
接受 Accept-Charset、 Accept-Encoding、 Accept-Language、 Content-Type、 Content-Length、 Content-Encoding、 Content-Language、 Content-Location、 Content-Range |
|
缓存 |
Cache-Control、etag、Expires、、 If-Match、 If-Modified-Since、、 If-None-Match、 If-Range、Pragma If-Unmodified-Since Last-Modified、Vary |
|
连接管理 |
连接、、 Keep-Alive Proxy-Connection、升级 |
|
请求上下文 |
主持人、 User-Agent、推荐人、发件人 |
|
射程/传输 |
续航里程、 Accept-Ranges、、TE Transfer-Encoding、TRailer |
|
服务器信息 |
服务器、日期、地点、 Retry-After |
|
Cookie |
Set-Cookie,Cookie |
|
安全性 |
Content-Security-Policy, Content-Security-Policy-Report-Only, Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options, X-XSS-Protection, Referrer-Policy, Permissions-Policy, Cross-Origin-Embedder-Policy, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy |
|
CORS |
Access-Control-Allow-Origin,, Access-Control-Allow-Methods, Access-Control-Allow-Headers, Access-Control-Allow-Credentials,, Access-Control-Expose-Headers, Access-Control-Max-Age Access-Control-Request-Method Access-Control-Request-Headers, Origin |
|
客户提示 |
Accept-CH、 Accept-CH-Lifetime、DPR、Width、、Downlink Viewport-Width、ECT、RTT、 Save-Data |
|
实验性/拟议 |
Clear-Site-Data, Feature-Policy, Expect-CT, Public-Key-Pins, Public-Key-Pins-Report-Only |
|
代理 |
通过、已转发 X-Forwarded-For、 X-Forwarded-Host、 X-Forwarded-Proto、 X-Real-IP、 X-Requested-With、 X-CSRF-Token |
|
IP 欺骗/网址操纵 |
True-Client-IP, X-Client-IP, X-Cluster-Client-IP, X-Originating-IP, X-Source-IP, X-Original-URL, X-Original-Host, X-Rewrite-URL |
|
CDN /代理 |
CF-Ray, CF-Connecting-IP, X-Amz-Cf-Id, X-Cache, X-Served-By |
|
HTTP/2 伪标题 |
:method、:path、:scheme、:authority、:stat |
|
服务器推送 |
Link |
|
WebSocket |
Sec-WebSocket-Key, Sec-WebSocket-Accept, Sec-WebSocket-Version, Sec-WebSocket-Protocol, Sec-WebSocket-Extensions |
除了上面列出的受限标题外:
-
所有以开头的标题
x-amz-都受到限制(例如x-amz-security-token、x-amz-date、x-amz-content-sha256)。这些是为 AWS 请求签名而保留的。 -
所有以开头的标头
x-amzn-都受到限制,但前缀为的标头除外。X-Amzn-Bedrock-AgentCore-Runtime-Custom-
步骤 1:创建您的代理
使用 AgentCore CLI 创建 AgentCore 项目:
agentcore create --name MyHeaderAgent cd MyHeaderAgent
更新代理的入口点文件以访问请求上下文中的自定义标头:
import json from bedrock_agentcore import BedrockAgentCoreApp, RequestContext from strands import Agent app = BedrockAgentCoreApp() agent = Agent() @app.entrypoint def agent_invocation(payload, context: RequestContext): """Handler for agent invocation""" user_message = payload.get( "prompt", "No prompt found in input, please guide customer to create a json payload with prompt key" ) app.logger.info("invoking agent with user message: %s", payload) response = agent(user_message) # access request headers here request_headers = context.request_headers app.logger.info("Headers: %s", json.dumps(request_headers)) return response app.run()
步骤 2:使用自定义标头配置和部署代理
在代理运行时上配置请求标头许可名单,以便在调用时将自定义标头转发到您的代理代码。
例
第 3 步:使用自定义标头调用您的代理
在调用代理时传递自定义标头,以便您的代理代码可以通过请求上下文访问它们。
例
步骤 4:(可选)配置入站 JWT 身份验证
要将用于 OAuth-based 入站访问的 JWT 令牌传递给您的代理,请在代理配置authorizerConfiguration中配置authorizerType和。