AIゲートウェイの設計2026年10月20日Flatkey Team

Amazon BedrockのOpenAI互換API:ベースURL・認証・モデル・コード(2026年)

OpenAI SDKでAmazon Bedrockを使う方法を解説。エンドポイントの選び方、短期・長期APIキー、モデルID、curl/Python/Nodeのコード、Guardrails、料金、よくあるエラーの対処法。

Amazon BedrockのOpenAI互換API:ベースURL・認証・モデル・コード(2026年)

はい、Amazon BedrockにはOpenAI互換APIがあります。OpenAI SDKの接続先を https://bedrock-runtime.{region}.amazonaws.com/openai/v1 に設定し、BedrockのAPIキー(またはAWS SigV4)で認証して、openai.gpt-oss-120b-1:0 のようなBedrockのモデルIDを指定するだけです。 この方法でChat Completions APIとResponses APIの両方を利用できます。AWSは新規アプリケーションには bedrock-runtime エンドポイントを推奨しており、bedrock-mantle は互換用の選択肢として残しています。注意点として、bedrock-runtime は GET /models を実装していません。本記事の内容はすべて Bedrock公式のChat Completionsドキュメント に基づき、2026年10月20日に確認したものです。

このガイドでは、2つのエンドポイント、2種類のAPIキー、モデルID、curl・Python・Nodeのコード、Guardrails、料金、遭遇しやすいエラー、そしてマルチプロバイダーゲートウェイよりBedrockが向いているケースを解説します。

クイックリファレンス

項目 値(2026年10月20日時点)
推奨ベースURL https://bedrock-runtime.{region}.amazonaws.com/openai/v1
互換用ベースURL https://bedrock-mantle.{region}.api.aws/v1(一部のモデルは /openai/v1)
対応するOpenAI API Chat Completions、Responses(モデルによる)、およびAnthropic Messages API
認証 BedrockのAPIキーを Authorization: Bearer … で送信、またはAWS SigV4
モデルIDの例 openai.gpt-oss-120b-1:0、openai.gpt-oss-20b-1:0、global.openai.gpt-5.6-sol
/models でのモデル一覧取得 bedrock-mantle のみ。bedrock-runtime では ListFoundationModels を使用
リージョン キーとエンドポイントはリージョン単位

出典:Chat Completions API、推論エンドポイント、クイックスタート。

bedrock-runtimeとbedrock-mantle:どちらのエンドポイントを使うべきか

AWSによると、両エンドポイントは「同じMantle推論エンジンを使用」しています。名前が示すのはエンドポイントの窓口の違いで、エンジン自体は同じです。違いは機能面にあります。

bedrock-runtime(推奨) bedrock-mantle(互換用)
ベースURL bedrock-runtime.{region}.amazonaws.com/openai/v1 bedrock-mantle.{region}.api.aws/v1
API InvokeModel、Converse、Chat Completions、Responses、Messages Chat Completions、Responses、Messages
GET /models 未実装(404 UnknownOperationException) 対応
Guardrails、インテリジェントプロンプトルーティング、クロスリージョン推論 対応 モデルカードを確認
サーバーサイドツール(Web検索など)、バックグラウンド推論、Projects、Workspaces 非対応 対応
クォータ このエンドポイント用のモデル別クォータ 別枠のモデル別クォータ

AWSの目安: まずは bedrock-runtime を使い、必要なモデルや機能が bedrock-mantle にしかない場合にのみ切り替えます。bedrock-mantle ではパスのプレフィックスがモデルによって異なります。プレフィックスを間違えると "model … isn't supported on this route" というエラーになるので、モデルカードのProgrammatic Access表を確認してください。

認証:BedrockのAPIキーとSigV4

BedrockのAPIキーを使うと、OpenAI SDKはAWS認証情報でリクエストに署名する代わりに、Bearerトークンで認証できます(APIキーのドキュメント、2026年10月20日)。

キーの種類 有効期間 権限の元 AWSの推奨
短期キー 最大12時間(またはセッションの長さ) キーを生成したIAMプリンシパルの権限 本番環境
長期キー 設定した有効期限まで ポリシーを付与した専用IAMユーザー 検証用のみ

実務上のポイント:

  • 短期キーはコード内で生成します。Pythonなら pip install aws-bedrock-token-generator、Nodeなら npm install @aws/bedrock-token-generator を使い、リクエストのたびにプロバイダーを呼び出します。トークンが有効な間はキャッシュ済みのトークンが返されます。
  • 長期キーは作成したリージョンでしか使えません。別リージョンへの呼び出しは Credential should be scoped to a valid region で失敗します。
  • キーの利用範囲はIAMアクション bedrock:CallWithBearerToken と bedrock-mantle:CallWithBearerToken で制限できます。
  • API呼び出しはCloudTrailに記録されますが、キー自体は記録されません。
  • boto3で AWS_BEARER_TOKEN_BEDROCK 変数を使うには boto3 1.39.0以降 が必要です(クイックスタート)。

コード:OpenAI SDKでBedrockを呼び出す

curl(APIキー)

export OPENAI_API_KEY="<bedrock-api-key>"
curl -X POST "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{"model": "openai.gpt-oss-120b-1:0",
       "messages": [{"role": "user", "content": "Hello from Bedrock"}]}'

curl(SigV4、APIキーなし)

curl -X POST "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1/chat/completions" \
  -H "Content-Type: application/json" \
  --aws-sigv4 "aws:amz:us-east-1:bedrock" \
  --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \
  -d '{"model": "openai.gpt-oss-120b-1:0", "messages": [{"role": "user", "content": "Hello"}]}'

Python(短期キーを自動更新)

from aws_bedrock_token_generator import provide_token   # pip install aws-bedrock-token-generator openai
from openai import OpenAI

REGION = "us-east-1"

def bedrock_client() -> OpenAI:
    # provide_token() returns a cached token or mints a fresh short-term key (<= 12h)
    return OpenAI(base_url=f"https://bedrock-runtime.{REGION}.amazonaws.com/openai/v1",
                  api_key=provide_token())

r = bedrock_client().chat.completions.create(
    model="openai.gpt-oss-120b-1:0",
    messages=[{"role": "user", "content": "Explain Bedrock API keys in one sentence."}],
)
print(r.choices[0].message.content, r.usage)

Node.js

import OpenAI from "openai";
import { getTokenProvider } from "@aws/bedrock-token-generator";

const provideToken = getTokenProvider();
const client = new OpenAI({
  baseURL: "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1",
  apiKey: await provideToken(),
});

const r = await client.chat.completions.create({
  model: "openai.gpt-oss-20b-1:0",
  messages: [{ role: "user", content: "Name two Bedrock endpoints." }],
});
console.log(r.choices[0].message.content);

モデル一覧の取得

bedrock-runtime では client.models.list() が404を返します。aws bedrock list-foundation-models --region us-east-1 を実行するか、SDKの接続先を bedrock-mantle にしてモデル一覧を取得します。

curl -s "https://bedrock-mantle.us-east-1.api.aws/v1/models" -H "Authorization: Bearer $OPENAI_API_KEY"

OpenAI形式のリクエストにBedrock Guardrailを追加する

Guardrailsは追加ヘッダーで指定します。ボディのオプション項目で入力のタグ付けを有効にできます。

r = bedrock_client().chat.completions.create(
    model="openai.gpt-oss-20b-1:0",
    messages=[{"role": "user", "content": "What is the weather like today?"}],
    extra_headers={
        "X-Amzn-Bedrock-GuardrailIdentifier": "GR12345",
        "X-Amzn-Bedrock-GuardrailVersion": "DRAFT",
        "X-Amzn-Bedrock-Trace": "ENABLED",
    },
    extra_body={"amazon-bedrock-guardrailConfig": {"tagSuffix": "xyz"}},
)

ヘッダー名は 公式のguardrailサンプル に基づいています。

OpenAI互換APIで使えるモデルは?

APIの対応状況はモデルとエンドポイントの両方で異なるため、各モデルカードを確認してください(API互換性表)。2026年10月20日時点のAWSドキュメントからの例:

モデル runtimeでのChat Completions runtimeでのResponses 備考
openai.gpt-oss-120b-1:0 / -20b-1:0 対応 非対応(Responsesはmantleのみ) オープンウェイトのGPT OSS
global.openai.gpt-5.6-sol 対応 対応 AWSクイックスタートに掲載、グローバル推論プロファイル
GPT-6ファミリー、GPT-5.x モデルカードによる モデルカードによる 互換性表のOpenAIセクションに掲載
Anthropic Claude Messages API(/anthropic)を使用 該当なし ANTHROPIC_BASE_URL=https://bedrock-runtime.{region}.amazonaws.com/anthropic

OpenAI互換呼び出しのBedrock料金

料金はそのモデルの通常のBedrockトークン単価です。OpenAI互換インターフェースによる追加料金はありません。Bedrockの料金ページ(2026年10月20日)からの例、100万トークンあたり:

モデル リージョン 入力 出力
gpt-oss-20b アジアパシフィック(シドニー) $0.0721 $0.3090
gpt-oss-120b アジアパシフィック(シドニー) $0.1545 $0.6180
GPT OSS Safeguard 20B 米国東部/西部 $0.07 $0.20
GPT OSS Safeguard 120B 米国東部/西部 $0.15 $0.60

料金はリージョンによって異なり、BedrockにはPriority、Flex、Batchの各ティアもあります。正確な料金は料金ページのリージョン選択で確認してください。

よくあるエラーと対処法

エラー 原因 対処法
/models で 404 UnknownOperationException bedrock-runtime はModels APIを実装していない ListFoundationModels を使うか、bedrock-mantle の /models を呼ぶ
model … isn't supported on this route bedrock-mantle のパスプレフィックスの誤り モデルカードで /v1 か /openai/v1 かを確認
Credential should be scoped to a valid region 長期キーを作成リージョン外で使用 対象リージョンでキーを生成する
Unable to locate credentials 1.39.0より古いboto3は AWS_BEARER_TOKEN_BEDROCK を無視する pip install --upgrade boto3
GPT OSSでResponses APIが使えない GPT OSSのResponses対応は bedrock-mantle のみ Chat Completionsを使うかエンドポイントを切り替える
AccessDenied モデルアクセスがない、または CallWithBearerToken が拒否されている モデルアクセスを有効化し、IAMポリシーを見直す

Bedrock・OpenAI直接利用・マルチプロバイダーゲートウェイの比較

要件 Bedrock OpenAI互換 プロバイダーAPIを直接利用 マルチプロバイダーゲートウェイ(例:Flatkey)
AWSアカウント、IAM、CloudTrailの中で完結させたい 最適 不可 不可
AWSクレジットやEnterprise Discount Program(EDP)のコミットを使いたい 可 不可 不可
GuardrailsやVPCに近い統制 可 プロバイダー次第 ゲートウェイ次第
最新モデルをリリース当日に使いたい モデルによる 通常は最速 場合による
OpenAI、Anthropic、Google、Alibaba、DeepSeek、Moonshot、Zhipuを1つのキーで Bedrockがホストするモデルのみ 不可 可
リージョンごとのキー管理 必要 不要 不要

AWSに全面的に乗っているなら、BedrockのOpenAI互換APIが最もすっきりした選択です。Bedrockがホストしていないモデルも必要なら、同じOpenAI SDKのコードのままベースURLを差し替えましょう。Flatkeyなら、https://router.flatkey.ai/v1 の1つのキーでGPT、Claude、Gemini、Qwen、DeepSeek、Kimi、GLMにアクセスできます。

import os
from openai import OpenAI

ROUTES = {
    "bedrock": OpenAI(base_url="https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1",
                      api_key=os.environ["AWS_BEARER_TOKEN_BEDROCK"]),
    "flatkey": OpenAI(base_url="https://router.flatkey.ai/v1",
                      api_key=os.environ["FLATKEY_API_KEY"]),
}

def ask(route, model, prompt):
    r = ROUTES[route].chat.completions.create(model=model, messages=[{"role": "user", "content": prompt}])
    return r.choices[0].message.content

print(ask("bedrock", "openai.gpt-oss-120b-1:0", "hi"))
print(ask("flatkey", "qwen3.8-max", "hi"))         # same SDK, different provider
print(ask("flatkey", "claude-sonnet-5-5", "hi"))

2026年10月20日時点で、Flatkeyの gpt-6-sol ページには100万トークンあたり入力$1.20、出力$6.00と記載されています。これは定価$2 / $10に対するプロモーション価格です。同じモデルのBedrock料金と比較してみてください。関連記事:OpenAI互換APIのベースURL、プロバイダーとの直接契約とAI APIゲートウェイの比較、エンタープライズ向けAI APIゲートウェイのチェックリスト。

移行チェックリスト:OpenAIアプリからBedrockへ

  1. リージョンを決め、Bedrockコンソールでモデルアクセスを確認する。
  2. OPENAI_BASE_URL を https://bedrock-runtime.{region}.amazonaws.com/openai/v1 に置き換える。
  3. キーを短期のBedrock APIキープロバイダーに置き換える。長期キーを本番に持ち込まない。
  4. モデル名をBedrockのIDに対応付ける(例:gpt-oss-120b → openai.gpt-oss-120b-1:0)。
  5. client.models.list() の呼び出しを削除するか、bedrock-mantle に移す。
  6. ストリーミング、ツール呼び出し、構造化出力をモデルカードに沿ってテストする。
  7. ポリシー上必要な箇所にguardrailヘッダーを追加する。
  8. 選んだエンドポイントのクォータを確認する(レート制限への対処)。
  9. モデル別・チーム別に支出を追跡する(コストの按分)。

よくある質問

Amazon BedrockはOpenAI APIに対応していますか?

はい。Bedrockは https://bedrock-runtime.{region}.amazonaws.com/openai/v1 でOpenAIのChat Completions APIとResponses APIを実装しているため、既存のOpenAI SDKのコードはベースURL、APIキー、モデルIDを変えるだけで動きます。

BedrockのOpenAI互換ベースURLは何ですか?

推奨URLは https://bedrock-runtime.{region}.amazonaws.com/openai/v1 で、たとえば https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1 です。互換用エンドポイントは https://bedrock-mantle.{region}.api.aws/v1 です。

OpenAI SDKをBedrockで認証するには?

Amazon BedrockのAPIキーを api_key に設定し、Authorization: Bearer として送信します。本番環境では短期キー(最大12時間)が推奨されています。bedrock-runtime ではSigV4署名も使えます。

Bedrockで models.list() が失敗するのはなぜですか?

bedrock-runtime エンドポイントはOpenAIの GET /models 操作を実装しておらず、404 UnknownOperationException を返します。ListFoundationModels を使うか、bedrock-mantle の /models を呼び出してください。

BedrockでGPT OSSをResponses APIで使えますか?

bedrock-runtime では使えません。GPT OSSはそこでChat Completionsに対応しており、GPT OSSのResponses APIは bedrock-mantle でのみ利用できます。

OpenAI互換エンドポイントに追加料金はかかりますか?

AWSはこのインターフェースに別途料金を設定していません。リージョンとティアに応じた、そのモデルの標準的なBedrockトークン料金を支払います。

まとめ

AWSでOpenAI SDKを使うには、ベースURLを bedrock-runtime.{region}.amazonaws.com/openai/v1 にし、短期のBedrock APIキーを使い、モデルIDを対応付けて、models.list() をやめるだけです。Bedrock以外のモデルも必要なら、同じSDKのパターンのまま Flatkeyルーター を通じて1つのキーで利用できます。

最終更新:2026年10月20日 · Flatkey Team。記載内容は本文中でリンクしたAWS公式ドキュメントに基づいています。