Appearance
在 OpenClaw 中使用 Amazon Bedrock 模型不需要 API Key,而是通过 AWS SDK 默认凭据链(环境变量、~/.aws/credentials、EC2 实例角色)认证。配置 provider: "amazon-bedrock" 和 api: "bedrock-converse-stream" 即可调用 Claude 等模型。自动模型发现默认只检测到环境标记才启用,EC2/IMDS 环境下需显式设置 discovery.enabled: true。也支持跨区域推理配置文件、服务层级(flex/priority/reserved)、Guardrails 以及 Bedrock 嵌入(用于 memory search)。关键命令:openclaw models list 验证发现结果。
OpenClaw 配置 Amazon Bedrock:AWS 凭据、自动模型发现与 Guardrails 接入步骤
OpenClaw 通过 pi-ai 的 Bedrock Converse 流式提供商使用 Amazon Bedrock 模型。认证基于 AWS SDK 默认凭据链,不需要 API Key。
| 属性 | 值 |
|---|---|
| Provider | amazon-bedrock |
| API | bedrock-converse-stream |
| 认证 | AWS 凭据(环境变量、共享配置、EC2 实例角色或 SSO) |
| 区域 | AWS_REGION 或 AWS_DEFAULT_REGION(默认:us-east-1) |
怎么配置 Amazon Bedrock(凭据 + 模型)
方式一:环境变量(开发机、CI)
bash
export AWS_ACCESS_KEY_ID="AKIA..."
export AWS_SECRET_ACCESS_KEY="..."
export AWS_REGION="us-east-1"
# 可选
export AWS_SESSION_TOKEN="..."
export AWS_PROFILE="your-profile"
# 可选(Bedrock 专用令牌)
export AWS_BEARER_TOKEN_BEDROCK="..."然后配置 provider,不需要 apiKey:
json5
{
models: {
providers: {
"amazon-bedrock": {
baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com",
api: "bedrock-converse-stream",
auth: "aws-sdk",
models: [
{
id: "us.anthropic.claude-opus-4-6-v1:0",
name: "Claude Opus 4.6 (Bedrock)",
reasoning: true,
input: ["text", "image"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 200000,
maxTokens: 8192,
},
],
},
},
},
agents: {
defaults: {
model: { primary: "amazon-bedrock/us.anthropic.claude-opus-4-6-v1:0" },
},
},
}验证模型可用:
bash
openclaw models list只要设置了
AWS_ACCESS_KEY_ID、AWS_PROFILE或AWS_BEARER_TOKEN_BEDROCK之一的 env marker,OpenClaw 会自动启用隐式 Bedrock provider 进行模型发现,无需额外配置。
方式二:EC2 实例角色(IMDS)
在附有 IAM 角色的 EC2 实例上,AWS SDK 能通过实例元数据服务(IMDS)自动获取临时凭据。但 OpenClaw 的自动模式(auto mode)默认不会因为 IMDS 而启用,需要显式开启发现:
bash
openclaw config set plugins.entries.amazon-bedrock.config.discovery.enabled true
openclaw config set plugins.entries.amazon-bedrock.config.discovery.region us-east-1如果你想为 openclaw status 等表面也启用 env marker 自动检测,可以额外导出:
bash
export AWS_PROFILE=default
export AWS_REGION=us-east-1不需要伪造 API Key。
EC2 实例角色所需 IAM 权限:
bedrock:InvokeModelbedrock:InvokeModelWithResponseStreambedrock:ListFoundationModels(自动发现)bedrock:ListInferenceProfiles(推理配置文件发现)
或直接附加托管策略 AmazonBedrockFullAccess。
快速建好 IAM 角色并附加
bash
# 1. 创建 IAM 角色和实例配置文件
aws iam create-role --role-name EC2-Bedrock-Access \
--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"}]}'
aws iam attach-role-policy --role-name EC2-Bedrock-Access \
--policy-arn arn:aws:iam::aws:policy/AmazonBedrockFullAccess
aws iam create-instance-profile --instance-profile-name EC2-Bedrock-Access
aws iam add-role-to-instance-profile \
--instance-profile-name EC2-Bedrock-Access \
--role-name EC2-Bedrock-Access
# 2. 附加到你的 EC2 实例
aws ec2 associate-iam-instance-profile \
--instance-id i-xxxxx \
--iam-instance-profile Name=EC2-Bedrock-Access
# 3. 在 EC2 实例上启用发现
openclaw config set plugins.entries.amazon-bedrock.config.discovery.enabled true
openclaw config set plugins.entries.amazon-bedrock.config.discovery.region us-east-1
# 4. 可选:添加 env marker 让自动模式也工作
echo 'export AWS_PROFILE=default' >> ~/.bashrc
echo 'export AWS_REGION=us-east-1' >> ~/.bashrc
source ~/.bashrc
# 5. 验证发现
openclaw models list自动模型发现
OpenClaw 能自动发现支持流式和文本输出的 Bedrock 模型。发现请求使用 bedrock:ListFoundationModels 和 bedrock:ListInferenceProfiles,结果缓存(默认 1 小时)。
隐式 provider 启用逻辑:
- 如果
plugins.entries.amazon-bedrock.config.discovery.enabled设为true,即使没有 AWS env marker 也会尝试发现。 - 如果该字段未设置(自动模式),OpenClaw 只在检测到以下 env marker 之一时自动添加隐式 Bedrock provider:
AWS_BEARER_TOKEN_BEDROCK、AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY、或AWS_PROFILE。 - 实际 Bedrock runtime 认证路径始终使用 AWS SDK 默认链,所以共享配置、SSO、IMDS 实例角色仍然可以工作——即使发现需要
enabled: true来跳出自动模式。
发现配置选项
配置放在 plugins.entries.amazon-bedrock.config.discovery 下:
json5
{
plugins: {
entries: {
"amazon-bedrock": {
config: {
discovery: {
enabled: true,
region: "us-east-1",
providerFilter: ["anthropic", "amazon"],
refreshInterval: 3600,
defaultContextWindow: 32000,
defaultMaxTokens: 4096,
},
},
},
},
},
}| 选项 | 默认值 | 描述 |
|---|---|---|
enabled | auto | 自动模式下只在检测到 AWS env marker 时启用。设为 true 强制发现。 |
region | AWS_REGION / AWS_DEFAULT_REGION / us-east-1 | 用于发现 API 调用的区域。 |
providerFilter | (全部) | 匹配 Bedrock provider 名称,例如 anthropic、amazon。 |
refreshInterval | 3600 | 缓存秒数,设为 0 禁用缓存。 |
defaultContextWindow | 32000 | 发现模型的默认上下文窗口大小(已知模型限制时请覆盖)。 |
defaultMaxTokens | 4096 | 发现模型的默认最大输出 token 数(已知模型限制时请覆盖)。 |
推理配置文件
OpenClaw 会与基础模型一起发现区域和全局推理配置文件。当配置文件映射到已知基础模型时,它会继承该模型的全部能力(上下文窗口、最大 token、推理、视觉),并且自动注入正确的 Bedrock 请求区域。
- 区域推理配置文件 ID 示例:
us.anthropic.claude-opus-4-6-v1:0 - 全局推理配置文件 ID 示例:
anthropic.claude-opus-4-6-v1:0
无需额外配置。只要发现已启用且 IAM 主体拥有 bedrock:ListInferenceProfiles,配置文件就会出现在 openclaw models list 中。
可选高级配置
服务层级(Service Tier)
某些 Bedrock 模型支持 service_tier 参数来优化成本或延迟。可用的层级:
| 层级 | 描述 |
|---|---|
default | 标准 Bedrock 层级 |
flex | 折扣处理(适用于能容忍较长延迟的工作负载) |
priority | 优先处理(低延迟敏感) |
reserved | 预留容量(稳定工作负载) |
通过 agents.defaults.params 或每个模型 agents.defaults.models["<model-key>"].params 设置:
json5
{
agents: {
defaults: {
params: {
serviceTier: "flex", // 对所有模型生效
},
models: {
"amazon-bedrock/mistral.mistral-large-3-675b-instruct": {
params: {
serviceTier: "priority", // 单模型覆盖
},
},
},
},
},
}无效的层级会导致 Bedrock 返回验证错误,错误信息可能显示“The provided model identifier is invalid”,实际原因是该模型不支持该 tier。检查模型文档确认支持哪些 tier。
Guardrails(内容护栏)
你可以对所有 Bedrock 模型调用应用 Amazon Bedrock Guardrails,实现内容过滤、话题拒绝、敏感信息过滤等。配置在 amazon-bedrock 插件下:
json5
{
plugins: {
entries: {
"amazon-bedrock": {
config: {
guardrail: {
guardrailIdentifier: "abc123", // Guardrail ID 或完整 ARN
guardrailVersion: "1", // 版本号或 "DRAFT"
streamProcessingMode: "sync", // 可选:"sync" 或 "async"
trace: "enabled", // 可选:调试时设为 "enabled" 或 "enabled_full"
},
},
},
},
},
}| 选项 | 必需 | 描述 |
|---|---|---|
guardrailIdentifier | 是 | Guardrail ID(如 abc123)或完整 ARN(arn:aws:bedrock:us-east-1:123456789012:guardrail/abc123)。 |
guardrailVersion | 是 | 已发布版本号,或 "DRAFT" 表示工作草稿。 |
streamProcessingMode | 否 | "sync" 或 "async",流式评估时的 guardrail 模式。 |
trace | 否 | "enabled" 或 "enabled_full" 用于调试;生产环境省略或设为 "disabled"。 |
使用 Guardrails 的 IAM 主体需要额外
bedrock:ApplyGuardrail权限。
Claude Opus 4.7 temperature 自动省略
Bedrock 拒绝为 Claude Opus 4.7 传递 temperature 参数。OpenClaw 会自动从请求中移除 temperature(包括 inferenceConfig 字段),适用于所有 Opus 4.7 的 Bedrock 引用:基础模型 ID、命名推理配置文件、应用程序推理配置文件(解析后为 Opus 4.7),以及带区域前缀的点号变体(us.、eu.、ap.、apac.、au.、jp.、global.)。无需手动配置。
内存搜索嵌入(Bedrock)
Bedrock 也可以作为内存搜索的嵌入提供方。配置在 agents.defaults.memorySearch 下:
json5
{
agents: {
defaults: {
memorySearch: {
provider: "bedrock",
model: "amazon.titan-embed-text-v2:0", // 默认
},
},
},
}Bedrock 嵌入使用同样的 AWS SDK 凭据链(实例角色、SSO、访问密钥、共享配置、Web Identity)。无需 API Key。当 provider 设为 "auto" 时,如果凭据链能解析,会自动选择 Bedrock。
支持的嵌入模型包括 Amazon Titan Embed(v1, v2)、Amazon Nova Embed、Cohere Embed(v3, v4)和 TwelveLabs Marengo。详见内存配置参考——Bedrock。
注意事项
- Bedrock 需要在你的 AWS 账户/区域中启用模型访问(在 AWS 控制台 Model Access 中申请)。
- 自动发现需要 IAM 主体拥有
bedrock:ListFoundationModels和bedrock:ListInferenceProfiles权限。 - 如果使用自动模式,在 gateway 主机上设置一个支持的 AWS auth env marker。如果偏好 IMDS/共享配置且无需 env marker,设置
discovery.enabled: true。 - OpenClaw 解析凭据源的顺序:
AWS_BEARER_TOKEN_BEDROCK→AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY→AWS_PROFILE→ 默认 AWS SDK 链。 - 推理支持取决于模型,请查看 Bedrock 模型卡当前能力。
- 如果你更希望使用托管密钥流程,也可以在 Bedrock 前放置一个兼容 OpenAI 的代理,然后将其配置为 OpenAI provider。
常见问题
Amazon Bedrock 拿不到模型,openclaw models list 为空怎么办?
先确认 IAM 主体有 bedrock:ListFoundationModels 和 bedrock:ListInferenceProfiles 权限(附加 AmazonBedrockFullAccess 最直接)。如果是 EC2 实例角色,要显式设置 discovery.enabled: true(自动模式不会主动检测 IMDS)。另外检查 AWS 区域是否已启用该模型的访问。
使用 EC2 实例角色时,为什么不能自动发现 Bedrock 模型?
因为自动模式只在检测到 AWS_BEARER_TOKEN_BEDROCK、AWS_ACCESS_KEY_ID 或 AWS_PROFILE 等环境变量时才启用。IMDS 不暴露环境变量,所以必须手动执行:
bash
openclaw config set plugins.entries.amazon-bedrock.config.discovery.enabled true
openclaw config set plugins.entries.amazon-bedrock.config.discovery.region us-east-1之后 openclaw models list 应能显示发现的模型。
Guardrails 配置后报 “The provided model identifier is invalid” 错误?
这个错误通常指服务层级(service tier)不受支持或 Guardrails 配置错误,而不是模型 ID 无效。检查 serviceTier 是否选了对该模型有效的值(default、flex、priority、reserved),并确认 IAM 主体有 bedrock:ApplyGuardrail 权限。如果只配了 Guardrails 而未设置 service tier,可先移除 service tier 相关配置再试。