Amazon Bedrock ↗ では、基盤モデルを使って生成 AI アプリケーションを構築し、スケールできます。
https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/aws-bedrockAmazon Bedrock へリクエストを送るときは、次が必要です。
- AI Gateway のアカウント ID
- AI Gateway のゲートウェイ名
- Amazon Bedrock の権限を持つ AWS 認証情報(
accessKeyId、secretAccessKey、region) - 使う Amazon Bedrock モデルの名前
Amazon Bedrock へリクエストを送るときは、現在使っている URL の https://bedrock-runtime.us-east-1.amazonaws.com/ を https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/aws-bedrock/bedrock-runtime/us-east-1/ に置き換え、続けて使うモデルを付けます。
たとえば us-east-1 で Anthropic Claude モデルを呼び出す場合:
https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/aws-bedrock/bedrock-runtime/us-east-1/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/invokeAmazon Bedrock は、API リクエストの認証に AWS Signature Version 4 (SigV4) ↗ を使います。単純な API キーを使う OpenAI や Anthropic などと違い、AWS では各リクエストを認証情報で暗号署名する必要があります。
この複雑さは AI Gateway が処理します。BYOK で AWS 認証情報を保存すると、ゲートウェイは AWS へ転送する前に各リクエストへ自動で署名します。
| 方法 | cf-aig-authorization ヘッダー |
Authorization ヘッダー |
署名 |
|---|---|---|---|
| BYOK(推奨) | Bearer {CF_AIG_TOKEN} |
不要 | ゲートウェイが自動で署名します |
| クライアント側での署名 | Bearer {CF_AIG_TOKEN} |
事前署名済みの AWS ヘッダー | aws4fetch または AWS SDK で署名します |
推奨する方法は、AI Gateway の Bring Your Own Keys(BYOK) で AWS 認証情報を保存することです。認証情報を安全に保てて、クライアント側でのリクエスト署名も不要になります。
-
Cloudflare ダッシュボードで AI > AI Gateway > 対象のゲートウェイ > Provider Keys を開きます。
-
Add API Key を選び、プロバイダーとして Amazon Bedrock を選びます。
-
次の構造の JSON オブジェクトとして AWS 認証情報を入力します。
{ "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "region": "us-east-1" } -
Save を選びます。
AWS STS の一時認証情報(IAM ロールの引き受けなど)を使う場合は、sessionToken フィールドを含めます。
{
"accessKeyId": "ASIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1",
"sessionToken": "FwoGZXIvYXdzEBY..."
}BYOK を設定すれば、リクエストに含めるのは cf-aig-authorization ヘッダーだけです。AWS SigV4 の署名は AI Gateway が自動で行います。
自分でリクエストに署名する場合は、aws4fetch ↗ ライブラリまたは任意の AWS SDK を使い、AI Gateway 経由で送る前に署名します。後述の aws4fetch によるクライアント側署名の例 を参照してください。
AWS 認証情報を プロバイダーキーとして保存 していれば、リクエストは簡単です。AWS の署名は不要です。
curl "https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/aws-bedrock/bedrock-runtime/us-east-1/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/invoke" \
-H "cf-aig-authorization: Bearer {CF_AIG_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "What is Cloudflare?"
}
],
"max_tokens": 256,
"anthropic_version": "bedrock-2023-05-31"
}'BYOK を使わない場合は、AI Gateway 経由で送る前にリクエストへ署名する必要があります。次の例は、Cloudflare Worker で aws4fetch ライブラリを使います。
import { AwsClient } from "aws4fetch";
interface Env {
accessKey: string;
secretAccessKey: string;
}
export default {
async fetch(
request: Request,
env: Env,
ctx: ExecutionContext,
): Promise<Response> {
const cfAccountId = "{account_id}";
const gatewayName = "{gateway_id}";
const region = "us-east-1";
const awsClient = new AwsClient({
accessKeyId: env.accessKey,
secretAccessKey: env.secretAccessKey,
region: region,
service: "bedrock",
});
const body = JSON.stringify({
messages: [{ role: "user", content: "What does ethereal mean?" }],
max_tokens: 256,
anthropic_version: "bedrock-2023-05-31",
});
// Sign against the original AWS URL
const awsUrl = `https://bedrock-runtime.${region}.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/invoke`;
const presignedRequest = await awsClient.sign(awsUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: body,
});
// Send through AI Gateway
const gatewayUrl = `https://gateway.ai.cloudflare.com/v1/${cfAccountId}/${gatewayName}/aws-bedrock/bedrock-runtime/${region}/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/invoke`;
const response = await fetch(gatewayUrl, {
method: "POST",
headers: presignedRequest.headers,
body: body,
});
if (
response.ok &&
response.headers.get("content-type")?.includes("application/json")
) {
const data = await response.json();
return new Response(JSON.stringify(data));
}
return new Response("Invalid response", { status: 500 });
},
};Amazon Bedrock は、bedrock-mantle エンドポイント ↗ 経由で Anthropic ネイティブの Messages API を提供します。AI Gateway は、ネイティブの Anthropic リクエスト、レスポンス、server-sent events を変換せずにそのまま通します。
ネイティブの Anthropic クライアントには、次のベース URL を設定します。
https://gateway.ai.cloudflare.com/v1/<ACCOUNT_ID>/<GATEWAY_ID>/aws-bedrock/bedrock-mantle/<AWS_REGION>/anthropicクライアントはベース URL に /v1/messages を付けます。bedrock-mantle エンドポイントに対応する ↗ AWS リージョンを選び、anthropic. プレフィックス付きのモデル ID(例: anthropic.claude-opus-5)を使います。
保存済みの AWS 認証情報を使う場合、関連する AWS Identity and Access Management(IAM)ポリシーで bedrock-mantle:CreateInference アクションを許可する必要があります。AI Gateway は、bedrock-mantle サービス向けに各リクエストへ署名します。
次の例は、保存済みの AWS 認証情報または Amazon Bedrock API キーで Messages API を呼び出します。
例を実行する前に、$ACCOUNT_ID、$GATEWAY_ID、$AWS_REGION、$CF_AIG_TOKEN を設定します。API キーの例では、Amazon Bedrock API キー ↗ を $BEDROCK_API_KEY にも設定します。
curl "https://gateway.ai.cloudflare.com/v1/$ACCOUNT_ID/$GATEWAY_ID/aws-bedrock/bedrock-mantle/$AWS_REGION/anthropic/v1/messages" \
--header "cf-aig-authorization: Bearer $CF_AIG_TOKEN" \
--header "anthropic-version: 2023-06-01" \
--header "Content-Type: application/json" \
--data '{
"model": "anthropic.claude-opus-5",
"max_tokens": 256,
"messages": [
{
"role": "user",
"content": "What is Cloudflare?"
}
]
}'curl "https://gateway.ai.cloudflare.com/v1/$ACCOUNT_ID/$GATEWAY_ID/aws-bedrock/bedrock-mantle/$AWS_REGION/anthropic/v1/messages" \
--header "Authorization: Bearer $BEDROCK_API_KEY" \
--header "cf-aig-authorization: Bearer $CF_AIG_TOKEN" \
--header "anthropic-version: 2023-06-01" \
--header "Content-Type: application/json" \
--data '{
"model": "anthropic.claude-opus-5",
"max_tokens": 256,
"messages": [
{
"role": "user",
"content": "What is Cloudflare?"
}
]
}'AI Gateway は、bearer トークンを Bedrock Mantle が期待する x-api-key ヘッダーへマッピングします。
AI Gateway は Unified API を提供します。Bedrock モデルを OpenAI の chat completions 形式で使えます。現在対応しているのは Anthropic Claude と Amazon Nova のモデルファミリーです。リクエスト形式を変えずに、OpenAI SDK で Bedrock 上のこれらのモデルへアクセスできます。
Amazon Bedrock への認証に API キーを使う場合、Unified API はリクエストを us-east-1 へ送ります。AWS Signature Version 4(SigV4)で認証する場合は、保存済み AWS 認証情報で選んだリージョンを使います。
https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat/chat/completionsAWS 認証情報を プロバイダーキーとして保存 していれば、モデルは aws-bedrock/{model} 形式で指定します。
curl "https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat/chat/completions" \
-H "cf-aig-authorization: Bearer {CF_AIG_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"model": "aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0",
"messages": [
{
"role": "user",
"content": "What is Cloudflare?"
}
]
}'import OpenAI from "openai";
const client = new OpenAI({
apiKey: "{CF_AIG_TOKEN}",
baseURL:
"https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat",
});
const response = await client.chat.completions.create({
model: "aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0",
messages: [
{
role: "user",
content: "What is Cloudflare?",
},
],
});
console.log(response.choices[0].message.content);