SSD Nodes Learn 🎉 VPS от $5.50/мес
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-21

Аутентификация в Claude API: Anthropic, Bedrock, Vertex

Руководство по настройке доступа к Claude API через Anthropic ключ, AWS IAM, Google ADC и Microsoft Entra. Узнайте, как безопасно хранить учетные данные на Linux сервере.

Четыре способа аутентификации в Claude API

Аутентификация в Claude API сводится к одному решению: какие учетные данные ваш клиент передает по сети. Существует четыре варианта, и они не являются разновидностями одного механизма. Прямой Anthropic API отправляет статический ключ в заголовке x-api-key. Amazon Bedrock подписывает каждый запрос учетными данными AWS, и в этой схеме ключ Anthropic не используется вовсе. Google Cloud отправляет кратковременный токен доступа Google. Microsoft Foundry принимает ключ, выданный Azure, или токен Microsoft Entra.

Это руководство предназначено для интеграции SDK (software development kit) в сервис, работающий на Linux-сервере. Если вы настраиваете инструмент командной строки Claude Code, переменные и процесс будут другими: см. настройка Claude Code для работы с Bedrock или Vertex. Если сервис еще не создан, сначала разверните его с помощью первое приложение Claude API на VPS, а затем вернитесь сюда для настройки учетных данных.

Все приведенные ниже сведения были проверены по документации платформы Anthropic в августе 2026 года. Идентификаторы моделей, цены, версии SDK и структура эндпоинтов постоянно меняются, поэтому в данном руководстве вместо указания устаревающих значений приведены ссылки на страницы провайдеров.

Маршрут 1: API-ключ Anthropic

Это прямой путь и единственный способ, при котором Anthropic выдает секретный ключ. Запросы направляются к эндпоинту Messages на API-хосте Anthropic, и каждый запрос содержит три заголовка.

curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model": "MODEL_ID", "max_tokens": 64, "messages": [{"role": "user", "content": "Hello"}]}'

Замените MODEL_ID на актуальный идентификатор из обзора моделей Anthropic. Корректный ответ представляет собой JSON, содержащий массив content и объект usage. Неверный или просроченный ключ возвращает HTTP 401 с кодом authentication_error. Отсутствие заголовка anthropic-version приводит к отдельной ошибке, так как этот заголовок обязателен для каждого запроса; SDK устанавливают его автоматически.

Создание клиента — самый короткий процесс из четырех, так как здесь нечего настраивать. Каждый официальный SDK самостоятельно считывает ANTHROPIC_API_KEY из переменных окружения.

import os
from anthropic import Anthropic

client = Anthropic()  # reads ANTHROPIC_API_KEY from the environment

message = client.messages.create(
    model=os.environ["CLAUDE_MODEL"],
    max_tokens=64,
    messages=[{"role": "user", "content": "Hello"}],
)
print(message.usage)

Рекомендуется хранить идентификатор модели в переменных окружения рядом с ключом. Имена моделей меняются по графику, который вы не контролируете, и переразвертывание кода ради изменения одной строки — это лишняя работа.

Ключи создаются в консоли, где вы выбираете срок действия в момент создания: предустановки на 3 часа, 1 день, 7 дней или 30 дней, произвольный срок или «Никогда». Срок действия фиксируется при создании и не может быть изменен позже. Anthropic отправляет уведомление создателю ключа перед истечением срока действия долгоживущего ключа, но ключ с коротким сроком действия истекает без предупреждающего письма. Просроченный ключ возвращает 401 и не может быть реактивирован, поэтому решение всегда заключается в создании нового ключа.

При использовании прямого API не нужно выбирать регион, а счет выставляется напрямую вашей организации в Anthropic. Рабочие области (Workspaces) позволяют ограничить ключ одним проектом, что является наиболее прозрачным способом отслеживания расходов отдельного сервиса. Подробности расчетов см. в разделе сравнение цен на API за токен и подписки.

Здесь стоит упомянуть еще один вариант, так как он полностью исключает использование статического секрета. Workload Identity Federation позволяет рабочей нагрузке обменять OpenID Connect (OIDC) токен от доверенного поставщика идентификации на краткосрочный токен Anthropic по адресу POST /v1/oauth/token, при этом SDK обновляет этот токен до истечения срока его действия. Никакая строка sk-ant-api... не создается и не копируется. Это подходит для Kubernetes, GitHub Actions и облачных виртуальных машин, которые уже обладают идентификацией платформы. Обычный VPS, как правило, не имеет такого эмитента, поэтому для такого сервера API-ключ в файле — это надежное решение, и далее в руководстве мы будем исходить именно из этого.

Маршрут 2: учетные данные AWS в Amazon Bedrock

В Bedrock вам не требуется ключ Anthropic. SDK подписывает каждый HTTP-запрос с помощью AWS Signature Version 4 (SigV4), используя обычные учетные данные AWS, а AWS определяет, имеет ли вызывающая сторона право на запуск модели.

pip install -U "anthropic[bedrock]"
aws sts get-caller-identity

aws sts get-caller-identity выводит номер учетной записи и ARN (Amazon Resource Name) идентификатора, к которому привязаны ваши учетные данные. Запустите эту команду перед всем остальным. Если она завершается ошибкой, вызов Claude также не удастся, так как SDK использует ту же цепочку поиска: сначала аргументы конструктора, затем переменные окружения AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN и AWS_REGION, затем файл конфигурации AWS и остальную стандартную цепочку (SSO, принятые роли, роль задачи ECS, служба метаданных экземпляра).

При создании клиента меняется класс и один аргумент.

from anthropic import AnthropicBedrock

client = AnthropicBedrock(aws_region="us-east-1")

Регион здесь перестает быть формальностью. Эндпоинты Bedrock привязаны к регионам, доступ к моделям предоставляется в консоли AWS для каждого региона отдельно, а сам регион является частью подписи SigV4, поэтому подпись, вычисленная для одного региона, будет отклонена другим. Установите AWS_REGION явно в окружении сервиса. Anthropic указывает, что клиент AnthropicBedrock считывает AWS_REGION и использует us-east-1, если переменная не задана, но не считывает ~/.aws/config для определения региона. Именно поэтому AWS CLI может успешно получить список моделей Claude на том же сервере, где ваш процесс на Python выдает ошибку: CLI прочитал ваш файл конфигурации, а клиент — нет.

На экземпляре EC2 вы назначаете роль IAM (identity and access management), и секретные данные не сохраняются на диске, так как служба метаданных экземпляра передает SDK временные учетные данные. У VPS вне AWS нет ни роли экземпляра, ни службы метаданных. В этом случае вы выбираете между долгосрочной парой ключей доступа пользователя IAM, хранящейся на сервере (что по сути является тем же типом секрета, что и ключ Anthropic), и федерацией: аутентификация через вашего провайдера идентификации, вызов AWS STS (security token service) и использование полученных временных учетных данных. Bedrock также принимает bearer-токен через AWS_BEARER_TOKEN_BEDROCK; документация ограничивает его действие 12 часами, а AWS называет этот путь наименее предпочтительным.

Счет выставляется на ваш аккаунт AWS, а не Anthropic, что обычно и является основной причиной использования этого метода. Региональные эндпоинты стоят на 10% дороже глобального эндпоинта, согласно данным на август 2026 года. Стоит учитывать одну ошибку Bedrock, которая выглядит как проблема с правами доступа, но таковой не является: Invocation of model ID ... with on-demand throughput isn't supported. Retry your request with the ID or ARN of an inference profile that contains this model.. Это ошибка маршрутизации модели, и изменение учетных данных её не исправит.

Маршрут 3: учетные данные Google в Vertex AI

Google Cloud использует Application Default Credentials (ADC) — фиксированный порядок поиска, которому следуют библиотеки аутентификации Google для обнаружения учетных данных без их явного указания. ADC сначала проверяет GOOGLE_APPLICATION_CREDENTIALS, затем файл, созданный gcloud auth application-default login, и в последнюю очередь — сервисную учетную запись, привязанную через сервер метаданных.

pip install -U "anthropic[vertex]"
gcloud auth application-default login

На рабочей станции команда входа записывает $HOME/.config/gcloud/application_default_credentials.json, и на этом настройка завершена. На сервере этот инструмент использовать нельзя, так как сохраненные им учетные данные принадлежат человеку и перестают действовать вместе с его учетной записью. За пределами Google Cloud сервер метаданных также отсутствует, поэтому ADC переходит к GOOGLE_APPLICATION_CREDENTIALS, указывающему на файл ключа сервисной учетной записи. Этот JSON-файл является долгоживущим секретом и требует обращения в точном соответствии с инструкциями, приведенными далее в этом руководстве. Внутри Google Cloud достаточно привязать сервисную учетную запись к VM, и тогда не потребуется защищать никакие файлы.

from anthropic import AnthropicVertex

client = AnthropicVertex(project_id="my-project", region="global")

Две вещи меняются, если вы отказываетесь от SDK в пользу прямого HTTP. Идентификатор модели перемещается из тела запроса в путь URL, а anthropic_version переносится из заголовка в тело запроса, где он должен иметь вид vertex-2023-10-16. Учетные данные представляют собой обычный токен доступа Google.

curl https://aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/global/publishers/anthropic/models/${MODEL_ID}:rawPredict \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{"anthropic_version": "vertex-2023-10-16", "max_tokens": 64, "messages": [{"role": "user", "content": "Hello"}]}'

Регион является обязательным аргументом. global выполняет динамическую маршрутизацию для обеспечения доступности, us и eu являются идентификаторами мультирегионов, а имя, такое как us-east5, закрепляет запрос за конкретным регионом. Мультирегиональные и региональные конечные точки стоят на 10% дороже глобальных, согласно документации на август 2026 года. Биллинг осуществляется через проект Google Cloud, поэтому квоты и счета выставляются компанией Google.

Маршрут 4: Microsoft Foundry — это путь через Azure

Если вы искали Claude в Azure, то это нужный вам раздел, и поддерживаемый маршрут действительно существует. Claude работает в Microsoft Foundry (ранее Azure AI Foundry), оплата производится через Azure Marketplace в единицах потребления Claude (Claude Consumption Units). Вы создаете ресурс Foundry, развертываете в нем модель Claude и обращаетесь к эндпоинту, размещенному в Azure, по адресу https://{resource}.services.ai.azure.com/anthropic/v1/*.

Работают два типа учетных данных. Первый — это ключ, выданный Azure, который находится на вкладке Details развертывания в портале Foundry; его нужно передавать в заголовке api-key или x-api-key. Второй — это токен Microsoft Entra, который предпочтительнее использовать на сервере, так как в этом случае управление доступом на основе ролей Azure (RBAC) определяет, кто может обращаться к эндпоинту.

ACCESS_TOKEN=$(az account get-access-token --resource https://ai.azure.com --query accessToken -o tsv)

curl https://${RESOURCE}.services.ai.azure.com/anthropic/v1/messages \
  -H "content-type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -d '{"model": "DEPLOYMENT_NAME", "max_tokens": 64, "messages": [{"role": "user", "content": "Hello"}]}'

Поле model содержит имя вашего развертывания, а не идентификатор модели. По умолчанию они совпадают, но перестают совпадать, как только вы даете развертыванию собственное имя. Это самая частая причина ошибки Deployment not found при корректном в остальном запросе. SDK для Python и TypeScript считывают ANTHROPIC_FOUNDRY_API_KEY и ANTHROPIC_FOUNDRY_RESOURCE из переменных окружения. Поддержка Foundry есть не во всех SDK: по состоянию на август 2026 года она охватывает C#, Java, PHP, Python и TypeScript, в то время как для SDK Go и Ruby необходимо использовать универсальный клиент, настроенный на базовый URL Foundry.

У этого обходного пути есть нюанс. Если переменная ANTHROPIC_API_KEY все еще установлена в окружении, универсальный клиент подхватит ее и отправит ваш ключ Anthropic на эндпоинт Microsoft. Удалите эту переменную или отключите использование значений по умолчанию из окружения в клиенте. Токены Entra истекают примерно через час, поэтому долгоживущий процесс должен обновлять их, а не захватывать один раз при запуске.

Как долго действуют учетные данные на вашем сервере?

ChartDocumented maximum credential lifetime by route, hours
The data behind this chart
[
  {
    "label": "Anthropic key, 30-day preset",
    "max_lifetime_hours": 720
  },
  {
    "label": "Anthropic key, 7-day preset",
    "max_lifetime_hours": 168
  },
  {
    "label": "AWS STS assumed role",
    "max_lifetime_hours": 12
  },
  {
    "label": "Bedrock bearer token",
    "max_lifetime_hours": 12
  },
  {
    "label": "Entra ID access token",
    "max_lifetime_hours": 1
  },
  {
    "label": "Federated Anthropic token",
    "max_lifetime_hours": 1
  }
]

Это предельные значения и настройки по умолчанию, опубликованные каждым провайдером и актуальные на август 2026 года; это не измеренные показатели. Они важны по одной причине: они показывают, как долго скомпрометированные учетные данные будут оставаться активными, пока вы обнаруживаете факт утечки. Токены с коротким сроком действия, указанные в нижней части таблицы, живут по 1 часу каждый, а SDK обновляет их автоматически, поэтому короткий срок жизни не требует от вас дополнительных усилий. Предполагаемая роль (assumed role) действует 12 часа. Ключ, созданный с предустановкой на 30 дней, остается действительным в течение 720 часов, и именно эти учетные данные хранятся в файле на вашем сервере в течение месяца.

Где хранить учетные данные на VPS

Поместите секрет в файл, доступный для чтения только пользователю root, и позвольте systemd передать его процессу. Этот подход не зависит от версии SDK, поэтому его стоит реализовать один раз и правильно.

sudo useradd --system --home /opt/claude-app --shell /usr/sbin/nologin claudeapp
sudo install -d -m 700 -o root -g root /etc/claude-app
sudo install -m 600 -o root -g root /dev/null /etc/claude-app/env
sudoedit /etc/claude-app/env

Файл содержит строки в формате KEY=value. Никаких export, кавычек или синтаксиса оболочки, так как systemd анализирует файл самостоятельно, не запуская его через shell.

ANTHROPIC_API_KEY=sk-ant-api03-REPLACE-ME
CLAUDE_MODEL=REPLACE-ME
[Unit]
Description=Claude API service
After=network-online.target

[Service]
User=claudeapp
EnvironmentFile=/etc/claude-app/env
ExecStart=/opt/claude-app/venv/bin/python -m claude_app
Restart=on-failure

[Install]
WantedBy=multi-user.target

systemd считывает EnvironmentFile= от имени root до того, как сменить пользователя на User=claudeapp, поэтому сервисной учетной записи не требуется доступ на чтение к этому файлу. Достаточно прав 600, принадлежащих root, поэтому команда install выше устанавливает именно такие параметры. Запустите сервис с помощью sudo systemctl enable --now claude-app, затем убедитесь командой systemctl status claude-app, что юнит перешел в состояние active (running), а не перезапускается в цикле.

Четыре ошибки, которых следует избегать, и причины для каждой из них:

  • Не записывайте ключ с помощью Environment= внутри файла юнита. Юнит в каталоге /etc/systemd/system доступен для чтения всем, поэтому systemctl cat claude-app выведет секрет любому локальному пользователю.
  • Не добавляйте секрет в репозиторий. .gitignore предотвращает добавление нового файла в коммит, но не помогает с уже закоммиченными файлами, так как история git сохраняет всё, что было передано.
  • Не включайте секрет в образ контейнера. Инструкции ENV и значения --build-arg записываются в слои образа, а docker history --no-trunc позволяет их просмотреть. Удаление файла в последующем слое не удаляет его из предыдущих. Передавайте секреты во время выполнения с помощью --env-file или через смонтированный файл.
  • Не считайте переменные окружения процесса защищенными от root. sudo tr '\\0' '\\n' < /proc/$(pgrep -u claudeapp -f claude_app | head -1)/environ выведет ключ. Цель состоит в том, чтобы скрыть секрет от всех остальных учетных записей на сервере, а не от root, который может прочитать его в любом случае.

Последний пункт определяет границы применимости данного метода. Переменная окружения — подходящее место для секрета, если его могут прочитать только сам сервис и root. Это неподходящий вариант, если процесс выполняет сторонний код, так как всё, что может исполнить процесс, может прочитать и его окружение. Как ограничить доступ AI-агента к секретам рассматривает этот случай, который является отдельной задачей с другим решением.

Как сменить ключ без простоя?

Выполните ротацию с опережением, а затем отзовите старый ключ.

  1. Создайте новый ключ в консоли, в той же рабочей области, что и старый.
  2. Запишите его в /etc/claude-app/env с помощью sudoedit.
  3. Выполните sudo systemctl restart claude-app.
  4. Убедитесь, что сервис отвечает на запросы, после чего отзовите старый ключ в консоли.

EnvironmentFile считывается при запуске юнита, поэтому запущенный процесс сохраняет значение, полученное при старте. systemctl daemon-reload перечитывает файлы юнитов, но не затрагивает переменные окружения запущенного процесса, поэтому новый ключ вступит в силу только после перезапуска. Отзыв ключа на этапе 1 вместо этапа 4 приведет к простою, который продлится до выполнения этапа 3.

Остальные три способа подразумевают ротацию на стороне провайдера. IAM-пользователь поддерживает два активных ключа доступа одновременно: создайте второй, разверните его, а затем удалите первый. Ключ сервисного аккаунта Google ротируется аналогично. Ключ Foundry пересоздается на портале, что немедленно делает старый недействительным, поэтому запишите новое значение до того, как нажмете кнопку. Токены Entra и федеративные токены Anthropic вообще не требуют ротации, и это самый весомый аргумент в пользу их использования везде, где это возможно.

Пока вы находитесь в консоли, установите лимит расходов для рабочей области. Утекший ключ становится дорогостоящим еще до того, как его успеют использовать для других целей, а в руководстве ограничение расходов агента на VPS подробно описаны соответствующие настройки.

Почему клиент возвращает 401 или 403?

401 с authentication_error при прямом обращении к API. Ключ неверен, отозван или истек срок его действия. Срок действия — это то, что часто упускают из виду, так как код не менялся, а вчера запрос работал. Проверьте столбец срока действия ключа в консоли или прочитайте expires_at через Admin API, где для ключей без ограничения срока действия указано null.

SDK игнорирует настройки федерации и использует ключ. ANTHROPIC_API_KEY и ANTHROPIC_AUTH_TOKEN имеют приоритет над федерацией в порядке проверки учетных данных, поэтому любой из них перекрывает её. Важный нюанс: переменная, экспортированная как пустая строка, всё равно занимает своё место, поэтому ANTHROPIC_API_KEY="" заставляет SDK выполнять аутентификацию с пустым ключом, а не переходить к следующему методу. Используйте unset ANTHROPIC_API_KEY.

401 с сообщением Authentication failed при использовании федерации. Это сообщение намеренно сделано одинаковым для любой возможной причины, чтобы вызывающая сторона не могла изучить конфигурацию ваших правил через чтение текста ошибки. Истинная причина записывается на странице истории аутентификации в консоли. Начните оттуда, вместо того чтобы пытаться угадать содержимое JWT.

403 в Foundry. Токен прошел аутентификацию, но вашей учетной записи Azure не хватает роли, разрешающей выполнение вызова. Назначьте удостоверению, выполняющему запрос, роль Azure RBAC, например Foundry User (ранее Azure AI User) или Cognitive Services User.

Любая ошибка в Bedrock. Сначала выполните aws sts get-caller-identity от имени сервисного пользователя. Эта команда покажет, есть ли на сервере вообще рабочие учетные данные AWS, что позволит отделить проблему с учетными данными от проблемы с доступом к модели или несоответствия регионов. Доступ к моделям предоставляется для каждого региона отдельно в консоли AWS, и его легко включить в одном регионе, пытаясь при этом обратиться к другому.

FAQ

Нужен ли мне API-ключ Anthropic для использования Claude в Bedrock или Vertex?

Нет. В Amazon Bedrock SDK подписывает каждый запрос учетными данными AWS с использованием SigV4, а в Google Cloud отправляет токен доступа Google, полученный через Application Default Credentials. В обеих конфигурациях не используются секретные ключи, выданные Anthropic, а оплата за использование списывается с облачного аккаунта, а не через Anthropic. Именно поэтому ключ Anthropic, оставленный в ANTHROPIC_API_KEY, представляет опасность на этих хостах: стандартный клиент, направленный на облачную конечную точку, без проблем отправит его туда.

Доступен ли Claude в Azure?

Да, через Microsoft Foundry (ранее Azure AI Foundry). Вы создаете ресурс Foundry, разворачиваете в нем модель Claude и вызываете https://{resource}.services.ai.azure.com/anthropic/v1/messages, используя либо ключ, выданный Azure в заголовке api-key, либо токен носителя Microsoft Entra. Оплата за использование производится через Azure Marketplace в единицах потребления Claude (Claude Consumption Units). Поле model в теле запроса должно содержать имя вашего развертывания, которое совпадает с идентификатором модели только до тех пор, пока вы не переименуете развертывание.

Где следует хранить API-ключ Claude на сервере Linux?

В файле, принадлежащем root, с правами доступа 600, который загружается через EnvironmentFile= в юните systemd. systemd считывает этот файл от имени root до переключения на пользователя User=, указанного в юните, поэтому сервисной учетной записи не требуется доступ к этому файлу. Не храните ключ в репозитории, в самом файле юнита (который доступен для чтения всем и выводится командой systemctl cat) или в слоях образа контейнера, так как docker history --no-trunc выводит содержимое всех переменных, установленных через ENV или --build-arg.

Почему мой API-запрос к Claude начал возвращать 401, хотя ничего не менялось?

Самая частая причина — истечение срока действия ключа, выбранного при его создании. Срок действия устанавливается при создании, его нельзя изменить впоследствии, и ключи с коротким сроком жизни истекают без отправки предупреждающего письма. Истекший ключ нельзя активировать повторно, поэтому создайте новый, запишите его в файл окружения, перезапустите сервис, а затем аннулируйте старый ключ. Если ключ точно является актуальным, проверьте, не перекрывается ли он устаревшими учетными данными: ANTHROPIC_API_KEY, установленная в пустую строку, имеет приоритет над любыми другими источниками учетных данных.

#claude#api#authentication#bedrock#vertex#secrets-management