INTEGRITY Документация

Amazon Bedrock

Amazon Bedrock позволяет создавать и масштабировать приложения генеративного ИИ на основе базовых моделей.

Конечная точка

https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/aws-bedrock

Предварительные требования

Для запросов к Amazon Bedrock вам потребуется:

Структура URL

При отправке запросов к Amazon Bedrock замените https://bedrock-runtime.us-east-1.amazonaws.com/ в URL, который вы сейчас используете с https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/aws-bedrock/bedrock-runtime/us-east-1/, затем добавьте нужную модель.

Например, чтобы вызвать модель Anthropic Claude в us-east-1:

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

Аутентификация в Amazon Bedrock

Amazon Bedrock использует AWS Signature Version 4 (SigV4) для аутентификации API-запросов. В отличие от таких провайдеров, как OpenAI или Anthropic, использующих простой API-ключ, AWS требует, чтобы каждый запрос был криптографически подписан вашими учетными данными.

AI Gateway берёт эту сложность на себя. Когда вы сохраняете свои учётные данные AWS с помощью BYOK, шлюз автоматически подписывает каждый запрос перед его пересылкой в AWS.

Сравнение методов аутентификации

Метод cf-aig-authorization заголовок Authorization заголовок Подпись
BYOK (рекомендуется) Bearer {CF_AIG_TOKEN} Не требуется Шлюз подписывает автоматически
Подпись на стороне клиента Bearer {CF_AIG_TOKEN} Pre-signed заголовки AWS Вы подписываете с помощью aws4fetch или AWS SDK

Рекомендуемый подход состоит в том, чтобы хранить учётные данные AWS с помощью Bring Your Own Keys (BYOK) функцию. Она защищает ваши учетные данные и избавляет от необходимости подписывать запросы на стороне клиента.

  1. В панели управления Cloudflare перейдите в AI > AI Gateway > ваш шлюз > Ключи провайдера.

  2. Выберите Добавить API-ключ и выберите Amazon Bedrock в качестве провайдера.

  3. Введите свои учётные данные AWS в виде объекта JSON со следующей структурой:

    {
    	"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
    	"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
    	"region": "us-east-1"
    }
  4. Выберите Save.

Если вы используете временные учётные данные AWS STS (например, полученные при принятии роли IAM), включите sessionToken поле:

{
	"accessKeyId": "ASIAIOSFODNN7EXAMPLE",
	"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
	"region": "us-east-1",
	"sessionToken": "FwoGZXIvYXdzEBY..."
}

После настройки BYOK вам нужно включить только cf-aig-authorization заголовок в своих запросах. AI Gateway автоматически выполняет подпись AWS SigV4.

Вариант 2: подписание на стороне клиента

Если вы предпочитаете подписывать запросы самостоятельно, можно использовать aws4fetch библиотеку или любой AWS SDK, чтобы подписать запрос перед отправкой через AI Gateway. См. пример клиентской подписи ниже.

Примеры

cURL с BYOK

С вашими учётными данными 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"
  }'

Подпись на стороне клиента с помощью aws4fetch

Если вы не используете BYOK, перед отправкой запроса через AI Gateway его необходимо подписать. В следующем примере используется aws4fetch библиотеку в Cloudflare Worker:

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 });
	},
};

Использование Unified API (совместим с OpenAI)

AI Gateway предоставляет Unified API который позволяет использовать формат OpenAI chat completions с моделями Bedrock. В настоящее время это поддерживается для Anthropic Claude и Amazon Nova семейства моделей. Вы можете использовать OpenAI SDK для доступа к этим моделям, работающим на Bedrock, не меняя формат запроса.

Конечная точка

https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat/chat/completions

cURL

С вашими учётными данными AWS сохранён как ключ провайдера, укажите модель с помощью 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?"
      }
    ]
  }'

OpenAI SDK

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);