Przejdź do głównej zawartości

Claude Code wysyła ruch do modelu na api.anthropic.com, chyba że zmienne środowiskowe skierują go gdzie indziej: do Amazon Bedrock, Google Cloud’s Agent Platform, Microsoft Foundry, Claude Platform on AWS albo do bramki LLM przez ANTHROPIC_BASE_URL. Bramka wymaga też własnego poświadczenia; gdy ustawiony jest tylko adres bazowy, za każde zapytanie nadal płaci zapisany login claude.ai.

Ta strona jest dla programisty, który musi podłączyć się do trasy wybranej przez firmę, oraz dla tech leada lub inżyniera platformy, który wdraża tę trasę w zespole. Dział bezpieczeństwa zgodził się na Claude Code pod jednym warunkiem: żaden laptop nie łączy się bezpośrednio z Anthropic, a każdy token trafia na firmowe konto AWS z przypisanym nazwiskiem. Masz adres bramki, konto Bedrock i czterdziestu programistów, którzy są już zalogowani na prywatne subskrypcje.

  • Tabelę decyzyjną: dostawca chmurowy, Claude apps gateway od Anthropic czy bramka, którą już utrzymujecie
  • Działającą konfigurację dla każdego dostawcy chmurowego i dla każdej bramki w formacie Anthropic, w tym LiteLLM
  • Blok managed settings, który przełącza cały zespół bez edycji czyjegokolwiek profilu powłoki
  • Procedurę weryfikacji, która dowodzi, że każda sesja idzie wybraną trasą, bez zaglądania do każdego laptopa
  • Tabelę błędów, które pojawiają się przy routingu przez bramkę, z poprawką dla każdego z nich

Każdą zmienną, polecenie i komunikat błędu na tej stronie sprawdziliśmy 26 września 2026 r. w dokumentacji Claude Code i w zainstalowanym CLI w wersji 2.1.283. To, którą trasę organizacja powinna wybrać ze względu na rezydencję danych i zero retencji, to osobna decyzja: zobacz, gdzie działa model.

Dostawca chmurowy zmienia to, kto serwuje model. Bramka zmienia to, kto trzyma poświadczenie. Oba podejścia da się połączyć: bramka przed Amazon Bedrock to częsty wzorzec.

TrasaJak Claude Code do niej trafiaWybierz, gdyCo cię to kosztuje
Dostawca chmurowy bezpośrednioCLAUDE_CODE_USE_BEDROCK, CLAUDE_CODE_USE_VERTEX, CLAUDE_CODE_USE_FOUNDRY lub CLAUDE_CODE_USE_ANTHROPIC_AWS plus poświadczenia samego dostawcyRozliczenia i dane muszą zostać na waszym koncie chmurowym, a każdy programista ma już poświadczenia do chmuryIAM dla każdego programisty, identyfikatory modeli zależne od dostawcy i domyślne modele, które różnią się między dostawcami
Claude apps gatewayclaude gateway --config gateway.yaml na serwerze z Linuksem; programiści logują się przez /login u waszego dostawcy tożsamości OIDCChcesz logowania SSO, list dozwolonych modeli i managed settings per grupa IdP oraz metryk OTLP bez wdrażania produktu firmy trzeciejBaza PostgreSQL, nazwa hosta w sieci prywatnej i brak logowania tokenem usługowym, więc CI łączy się z dostawcą bezpośrednio
Własna bramka (LiteLLM, Kong, wewnętrzne proxy)ANTHROPIC_BASE_URL plus ANTHROPIC_AUTH_TOKEN, ANTHROPIC_API_KEY lub apiKeyHelperOrganizacja już ją utrzymuje dla innego ruchu LLM i chce jednego budżetu i jednego dziennika audytuBramka musi przekazywać każdy nagłówek i każde pole żądania, które wysyła kolejne wydanie Claude Code, inaczej funkcje przestają działać

Każda trasa wyłącza część funkcji, więc sprawdź je, zanim się zdecydujesz:

  • Subskrypcja claude.ai przestaje płacić. Gdy aktywne jest poświadczenie bramki lub apiKeyHelper, zapytania są rozliczane za token na właściciela poświadczenia, które przekazuje bramka.
  • Remote Control i dyktowanie głosowe przestają działać. Obie funkcje wymagają tożsamości claude.ai. Remote Control jest też wyłączone zawsze, gdy ANTHROPIC_BASE_URL wskazuje host inny niż Anthropic.
  • Slack i sesje w chmurze omijają trasę. Zawsze korzystają z API Anthropic i ignorują zmienne bramki, więc nie włączaj ich użytkownikom, których ruch musi zostać na bramce.
  • Znika WebSearch na Amazon Bedrock i w sesjach przez Claude apps gateway.

Każdy dostawca ma własną zmienną przełączającą i własny łańcuch poświadczeń. Amazon Bedrock i Google Cloud mają też kreator: uruchom w sesji /setup-bedrock lub /setup-vertex, a wynik trafi do bloku env w ~/.claude/settings.json.

Raz na konto wyślij formularz przypadku użycia Anthropic w katalogu modeli Bedrock, a potem nadaj roli każdego programisty tę politykę:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowModelAndInferenceProfileAccess",
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream",
"bedrock:ListInferenceProfiles",
"bedrock:GetInferenceProfile"
],
"Resource": [
"arn:aws:bedrock:*:*:inference-profile/*",
"arn:aws:bedrock:*:*:application-inference-profile/*",
"arn:aws:bedrock:*:*:foundation-model/*"
]
}
]
}

Oficjalna polityka dodaje instrukcję aws-marketplace do pierwszej subskrypcji modelu; zostaw ją na koncie, które subskrybuje. Następnie w terminalu:

Okno terminala
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_PROFILE=bedrock-dev # SSO profile; the standard AWS credential chain applies
export AWS_REGION=us-east-1 # optional when the profile sets a region
export ANTHROPIC_DEFAULT_OPUS_MODEL='us.anthropic.claude-opus-5-5'
export ANTHROPIC_DEFAULT_HAIKU_MODEL='us.anthropic.claude-haiku-4-5-20251001-v1:0'
claude

Claude Code rozwiązuje modele na międzyregionalne profile inferencji (us., eu., apac. lub global., dobierane według regionu). Ustaw ANTHROPIC_BEDROCK_REGION_PREFIX=global, żeby preferować profile globalne. Endpoint Mantle, który serwuje format Anthropic Messages w Bedrock, to osobny przełącznik (CLAUDE_CODE_USE_MANTLE=1) z własnymi akcjami IAM bedrock-mantle: i identyfikatorami modeli w rodzaju anthropic.claude-sonnet-5.

Przed wdrożeniem w zespole przypnij modele u każdego dostawcy. Aliasy takie jak opus i sonnet wskazują wartości domyślne wbudowane w daną wersję Claude Code, a te różnią się między dostawcami: na Bedrock i Google Cloud alias sonnet to Sonnet 4.5, dopóki nie ustawisz ANTHROPIC_DEFAULT_SONNET_MODEL. Anthropic oznaczył Sonnet 4.5 jako przestarzały 2026-09-30 i wycofuje go 2026-11-30 na platformach, które prowadzi; Bedrock i Google Cloud ustalają własne daty (sprawdzone 2026-10-12), więc ustaw tę zmienną na aktualny model Sonnet. Opus 5.5 wymaga Claude Code w wersji 2.1.280 lub nowszej, którą oba kanały wydań mają na 2026-10-12 (stable to 2.1.287); na starszej wersji domyślnym modelem na Bedrock i Google Cloud jest Opus 5. Aktualne identyfikatory i ceny modeli znajdziesz w przeglądzie modeli.

Zadziała każda bramka, która przyjmuje API Anthropic Messages pod POST /v1/messages. Poproś zespół bramki o dwie rzeczy: adres bazowy i poświadczenie. Adres bazowy to sam host, bez /v1; ścieżkę Claude Code dopisuje sam.

  1. Przetestuj bramkę, zanim dotknie jej Claude Code. Zapytanie na jeden token oddziela problemy bramki od problemów konfiguracji:

    Okno terminala
    export ANTHROPIC_BASE_URL=https://llm-gateway.internal.example.com
    export ANTHROPIC_AUTH_TOKEN="$(vault kv get -field=api_key secret/llm-gateway/claude-code)"
    curl -sS -w '\n%{http_code}\n' -X POST "$ANTHROPIC_BASE_URL/v1/messages" \
    -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
    -H "anthropic-version: 2023-06-01" \
    -H "content-type: application/json" \
    -d '{"model": "claude-opus-5-5", "max_tokens": 1, "messages": [{"role": "user", "content": "."}]}'

    Odpowiedź zaczynająca się od {"id":"msg_ oznacza, że trasa działa. Błąd o nieznanym modelu też potwierdza adres i poświadczenie; 401 oznacza, że bramka czyta inny nagłówek.

  2. Wybierz zmienną poświadczenia według nagłówka, który czyta bramka. ANTHROPIC_AUTH_TOKEN trafia do Authorization: Bearer, ANTHROPIC_API_KEY do x-api-key, a wynik polecenia apiKeyHelper do obu. Jeśli nikt ci nie powiedział, który nagłówek obowiązuje, zacznij od ANTHROPIC_AUTH_TOKEN i zmień zmienną po 401. ANTHROPIC_API_KEY w sesji interaktywnej wymaga jednorazowego zatwierdzenia.

  3. Uruchom claude z tej samej powłoki i wpisz /status. Zakładka Status musi pokazać wiersz Anthropic base URL z adresem bramki oraz wiersz Auth token lub API key z nazwą twojej zmiennej. Wiersz Login method z kontem claude.ai oznacza, że nadal płaci subskrypcja.

  4. Zapisz wartości w bloku env w ~/.claude/settings.json, a nie tylko w powłoce. Agenty w tle uruchamiane przez supervisora nie zawsze dziedziczą eksporty z powłoki, a wartość z pliku ustawień wygrywa z eksportem. Nigdy nie wpisuj poświadczenia do projektowego .claude/settings.json, który trafia do repozytorium.

Żeby pobierać rotowane poświadczenie zamiast je przechowywać, wskaż w apiKeyHelper skrypt, który wypisuje wyłącznie klucz. Claude Code przechowuje wynik w pamięci podręcznej przez pięć minut; zmienisz to zmienną CLAUDE_CODE_API_KEY_HELPER_TTL_MS. Od wersji 2.1.227 każdy dodatkowy wiersz wypisany przez skrypt, na przykład baner, powoduje błąd helpera.

{
"apiKeyHelper": "~/bin/get-gateway-key.sh",
"env": {
"ANTHROPIC_BASE_URL": "https://llm-gateway.internal.example.com",
"ANTHROPIC_CUSTOM_HEADERS": "X-Team: payments",
"CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY": "1"
}
}

ANTHROPIC_CUSTOM_HEADERS dodaje nagłówki routingu lub dzierżawcy (pary rozdzielaj \n). Wykrywanie modeli dopisuje listę z /v1/models bramki do selektora /model.

LiteLLM to otwartoźródłowa bramka z kluczami wirtualnymi, budżetami i logowaniem zapytań (★59,6 tys. na GitHubie i wersja 1.102.1 na PyPI, oba odczyty z 26 września 2026 r.). Anthropic jej nie rekomenduje ani nie audytuje. 24 marca 2026 r. wersje 1.82.7 i 1.82.8 na PyPI zawierały złośliwy kod kradnący poświadczenia; obie usunięto, więc zawsze instaluj przypiętą wersję:

Okno terminala
uv tool install 'litellm[proxy]==1.102.1'

Nie trzymaj kluczy dostawcy w pliku: prefiks os.environ/ każe LiteLLM odczytać wartość ze środowiska. Nazwij każdą trasę tak jak identyfikator modelu, o który pyta Claude Code.

litellm_config.yaml
model_list:
- model_name: claude-opus-5-5
litellm_params:
model: anthropic/claude-opus-5-5
api_key: os.environ/ANTHROPIC_API_KEY
- model_name: claude-haiku-4-5
litellm_params:
model: anthropic/claude-haiku-4-5
api_key: os.environ/ANTHROPIC_API_KEY
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
database_url: os.environ/LITELLM_DATABASE_URL # needed for per-developer virtual keys
Okno terminala
litellm --config litellm_config.yaml --port 4000

Programiści ustawiają potem ANTHROPIC_BASE_URL na adres proxy, a ANTHROPIC_AUTH_TOKEN na własny klucz wirtualny LiteLLM, nigdy na klucz główny. Ustaw po stronie klienta ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5, żeby wywołania w tle prosiły o nazwę, którą proxy obsługuje. Stronę pojedynczego programisty, czyli LiteLLM, Claude Code Router i modele lokalne, opisuje strona bramki i modele lokalne.

Gdy bramka wystawia natywny format dostawcy zamiast formatu Anthropic, użyj zmiennej adresu bazowego tego dostawcy i każ Claude Code nie podpisywać żądań, bo poświadczenie chmurowe trzyma bramka:

Okno terminala
export CLAUDE_CODE_USE_BEDROCK=1
export ANTHROPIC_BEDROCK_BASE_URL=https://llm-gateway.internal.example.com/bedrock
export CLAUDE_CODE_SKIP_BEDROCK_AUTH=1
export ANTHROPIC_AUTH_TOKEN="$GATEWAY_TOKEN" # only if the gateway wants its own token

Odpowiedniki to ANTHROPIC_VERTEX_BASE_URL z CLAUDE_CODE_SKIP_VERTEX_AUTH, ANTHROPIC_BEDROCK_MANTLE_BASE_URL z CLAUDE_CODE_SKIP_MANTLE_AUTH, ANTHROPIC_AWS_BASE_URL dla Claude Platform on AWS oraz ANTHROPIC_FOUNDRY_BASE_URL z ANTHROPIC_FOUNDRY_API_KEY. Nie ustawiaj AWS_BEARER_TOKEN_BEDROCK: jeśli jest ustawiony, zastępuje token bramki nawet przy wyłączonym podpisywaniu.

Programiści nie powinni niczego konfigurować. Dostarcz trasę w bloku env pliku managed settings (/etc/claude-code/managed-settings.json na Linuksie, /Library/Application Support/ClaudeCode/managed-settings.json na macOS, C:\Program Files\ClaudeCode\managed-settings.json na Windowsie) i pozwól, żeby apiKeyHelper pobierał każdemu programiście jego własny klucz:

{
"env": {
"ANTHROPIC_BASE_URL": "https://llm-gateway.internal.example.com",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-5-5",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4-5",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
},
"apiKeyHelper": "/usr/local/bin/get-gateway-key"
}

Zarządzanego ANTHROPIC_BASE_URL programista nie nadpisze eksportem w powłoce. Cztery zasady chronią wdrożenie przed zablokowaniem ludzi:

  • Nigdy nie dodawaj forceLoginMethod ani forceLoginOrgUUID obok poświadczenia bramki. Każdy z tych kluczy blokuje przy starcie ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN i apiKeyHelper.
  • Używaj pliku, a nie server-managed settings. Server-managed settings wymagają bezpośredniego połączenia z api.anthropic.com, więc nigdy nie docierają do sesji idących przez bramkę.
  • Zaplanuj skutki CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC. Zmienna wyłącza automatyczne aktualizacje i sprawdzanie fast mode, więc aktualizacje dostarczaj menedżerem pakietów. Kontrola bezpieczeństwa WebFetch nadal łączy się z api.anthropic.com, chyba że ustawisz też skipWebFetchPreflight: true.
  • Każde wydanie Claude Code najpierw przetestuj na bramce. Nowe wydania wysyłają nowe wartości anthropic-beta i pola żądania, a bramka z listą dozwolonych pól odpowiada wtedy 400. Trzymaj flotę na przetestowanej wersji przez requiredMaximumVersion, dopóki test kanarkowy nie przejdzie.

Dwie powierzchnie wymagają osobnego dostarczenia. Rozszerzenie VS Code sprawdza poświadczenie w claudeCode.environmentVariables przed uruchomieniem, a aplikacja desktopowa czyta własną konfigurację third-party inference zamiast ANTHROPIC_BASE_URL, więc wypchnij obie przez MDM razem z plikiem managed settings. Politykę wokół trasy, czyli reguły deny, telemetrię i zarządzany CLAUDE.md, opisuje integracja korporacyjna.

W przypadku Claude apps gateway plik managed settings zawiera logowanie zamiast poświadczenia: "forceLoginMethod": "gateway" i "forceLoginGatewayUrl": "https://claude-gateway.internal.example.com". Bramka działa z tego samego pliku binarnego (claude gateway --config gateway.yaml, wersja 2.1.195 lub nowsza) i tylko pod nazwą hosta, która rozwiązuje się na adresy prywatne.

Jak udowodnić, że każda sesja idzie wybraną trasą?

Dział zatytułowany „Jak udowodnić, że każda sesja idzie wybraną trasą?”

Trasa, której nie widać, jest polityką tylko na papierze. Cztery sprawdzenia dają właścicielowi platformy, który zatwierdza wdrożenie, dowód bez ręcznego przeglądania czyjejkolwiek konfiguracji:

  1. Sprawdzenie na maszynie kanarkowej. Na jednej maszynie z każdego obrazu systemu uruchom claude, potem /status: wiersz Setting sources musi obejmować managed settings, Anthropic base URL musi pokazywać bramkę, a wiersz poświadczenia musi wskazywać helper lub zmienną. Przy dostawcy chmurowym pokazuje go wiersz dostawcy, na przykład Amazon Bedrock (Mantle).
  2. Test ruchu wychodzącego. Na maszynie kanarkowej zablokuj api.anthropic.com na zaporze i zadaj Claude Code pytanie. Odpowiedź dowodzi, że ruch do modelu nie idzie bezpośrednio. Błąd oznacza, że jakieś zapytanie nadal tak idzie, a /status pokaże, jakiego adresu bazowego użyła sesja. Pomiń błędy sprawdzania fast mode i kontroli wstępnej WebFetch (oba z założenia łączą się z api.anthropic.com, chyba że je wyłączysz); liczy się tylko brak odpowiedzi modelu.
  3. Sprawdzenie routingu dla każdej nazwy modelu. Wyślij opisane wyżej zapytanie curl na jeden token dla każdej nazwy modelu, którą obsługuje bramka. Nazwa, której bramka nie routuje, zwróci błąd pierwszemu programiście, który ją wybierze.
  4. Przypisanie ruchu po stronie bramki. Dziennik użycia bramki musi pokazywać jeden klucz na programistę i zero ruchu na kluczu współdzielonym; nagłówek żądania x-claude-code-session-id grupuje zapytania programisty według sesji, więc jedną sesję prześledzisz od początku do końca. Claude apps gateway eksportuje metryki OTLP z tożsamością użytkownika; przy innych bramkach porównuj wydatki per klucz z kontrolą kosztów i narzędziami do śledzenia kosztów agentów.

Sprawdzenia 1 i 3 uruchamiaj w CI dla każdej nowej wersji Claude Code, zanim trafi do programistów.

ObjawPrzyczynaNaprawa
Użycie nadal obciąża prywatne subskrypcjeUstawiono tylko ANTHROPIC_BASE_URL, więc aktywnym poświadczeniem zostaje login claude.aiDodaj ANTHROPIC_AUTH_TOKEN, ANTHROPIC_API_KEY lub apiKeyHelper; uruchom /logout, żeby usunąć zapisany login
401 z informacją o nieprawidłowym tokeniePoświadczenie trafia do nagłówka, którego bramka nie czyta, albo zostało unieważnioneZamień ANTHROPIC_AUTH_TOKEN z ANTHROPIC_API_KEY; wygeneruj nowy klucz w bramce
Pojawia się ekran logowania, choć test curl przechodziPoświadczenie leży w projektowym pliku ustawień, który działa dopiero po kreatorze pierwszego uruchomienia i potwierdzeniu zaufania do folderuUstaw je w eksporcie powłoki, w ~/.claude/settings.json lub w managed settings
This machine's managed settings require a first-party loginManaged settings zawierają forceLoginMethod lub forceLoginOrgUUIDUsuń te klucze albo zrezygnuj z poświadczenia bramki; nie mogą współistnieć
400 z context_management lub Extra inputs are not permittedUpstream odrzuca pola, które Claude Code wysyła do endpointów w formacie AnthropicUstaw CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1, a potem popraw bramkę, żeby przekazywała pola bez zmian
400 z własnym komunikatem bramki o limicie kontekstuBramka wymusza mniejsze okno i przepisuje błąd, więc Claude Code nie kompaktuje rozmowyUruchom /compact; ustaw CLAUDE_CODE_AUTO_COMPACT_WINDOW na limit bramki (minimum 100 000)
403 z treścią HTML i pustym dziennikiem bramkiWeb application firewall blokuje prompty zawierające znaczniki w stylu XML i kod źródłowyWyłącz inspekcję treści dla /v1/messages (w AWS WAF reguła CrossSiteScripting_Body)
Bedrock streaming response has content-typeBramka przepisała Content-Type strumienia zdarzeń BedrockPrzekazuj treść odpowiedzi i Content-Type bez zmian
Bedrock: on-demand throughput isn't supportedUżyto gołego identyfikatora modelu tam, gdzie wymagany jest profil inferencjiUżyj identyfikatora profilu, na przykład us.anthropic.claude-opus-5-5
Google Cloud: 404 model not foundModel nie jest włączony albo nie jest serwowany w CLOUD_ML_REGIONWłącz go w Model Garden; ustaw nadpisanie VERTEX_REGION_CLAUDE_*
Błędy TLS, choć curl działaClaude Code nie zna CA proxy inspekcji TLSUstaw NODE_EXTRA_CA_CERTS; zobacz konfigurację proxy
Rachunek u dostawcy skacze po aktualizacjiWdrożenie bez przypiętych modeli przeszło na nowy domyślny OpusPrzypnij ANTHROPIC_MODEL lub zmienne ANTHROPIC_DEFAULT_*_MODEL, potem przejrzyj zarządzanie kosztami

Brak Remote Control jest oczekiwany na każdej bramce i trasie chmurowej: claude doctor pokazuje, co go blokuje, a kanały i Remote Control opisują alternatywy.