Руководство и понимание

Хранилища учетных данных поставщика для многомодельных шлюзов AI: отдельная среда выполнения, администрирование, выставление счетов и доступ BYOK

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

Ключи нисходящего API и учетные данные вышестоящего поставщика решают разные проблемы. Ключ разработчика, выданный вашим шлюзом, идентифицирует приложение, команду, клиента, бюджет и контекст политики. Ключ вышестоящего поставщика позволяет шлюзу тратить деньги и получать доступ к моделям в учетной записи поставщика. Если относиться к ним как к одному и тому же секрету, команды в конечном итоге получают один неограниченный ключ в общем проекте, учетные данные администратора в службах среды выполнения и отсутствие надежного способа ответить, какой арендатор вызвал какую плату со стороны поставщика.

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

Проблема считывателя: учетные данные восходящего потока становятся невидимой инфраструктурой

Большинство развертываний с несколькими моделями начинаются с простой цели: направить один OpenAI-совместимый запрос к лучшему доступному поставщику. Затем появляются дополнительные учетные записи: один проект поставщика для производства, другой для оценки, рабочее пространство Anthropic для бизнес-подразделения, проект Google Cloud для Gemini и несколько предоставленных клиентом ключей для контрактов BYOK.

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

Факт: платформы поставщиков предоставляют разные границы учетных записей и типы учетных данных. OpenAI документирует проекты и учетные записи служб, а разрешения ключа API учетной записи службы по умолчанию обеспечивают доступ на чтение и запись для ресурсов API проекта. OpenAI также предоставляет ключевые объекты API администратора отдельно от обычного использования API проекта или среды выполнения. Anthropic документирует рабочие пространства как организационные границы и заявляет, что конечным точкам Admin API требуются ключи Admin API, отличные от стандартных ключей API; Anthropic также отмечает, что ключи API привязаны к рабочему пространству, в котором они созданы, и не могут перемещаться между рабочими пространствами. В документации по ключу Gemini API Google говорится, что каждый ключ Gemini API связан с проектом Google Cloud, и рекомендуются ограничения API, чтобы уменьшить ущерб в случае компрометации ключа.

Рекомендация: не создавайте одно общее поле «provider_key» и не называйте это завершенным. Создайте реестр учетных данных, который сохранит границы, специфичные для поставщика, и при этом предоставит шлюзу нормализованную модель политики.

Определите таксономию учетных данных перед принятием ключей

Хранилище должно отклонять неоднозначные учетные данные. Во время импорта оператор или рабочий процесс автоматизации должны классифицировать учетные данные. Используйте как минимум следующие категории:

<ул>
  • Учетные данные для вывода во время выполнения: используются шлюзом для вызова конечных точек вывода модели, таких как чат, ответы, внедрения, модерация, транскрипция или создание изображений, в зависимости от поддержки поставщика.
  • Учетные данные администратора для автоматизации: используются для управления организациями, рабочими областями, проектами, пользователями, ключами или административными ресурсами на стороне поставщика. Они никогда не должны находиться в пути запроса во время выполнения.
  • Учетные данные для выставления счетов и отчетности: используются для получения отчетов об использовании, счетах, затратах или организациях, где поставщики поддерживают эти API. Держите их отдельно от ключей вывода, чтобы задания по составлению отчетов не могли генерировать использование модели.
  • Учетные данные только для оценки: используются в рабочих процессах тестирования, контроля качества, миграции или промежуточного тестирования. У них должны быть низкие квоты, четкая экологическая маркировка и отсутствие права на резервное производство.
  • Учетные данные BYOK клиента: ключи, предоставленные клиентом, привязанные к конкретному арендатору, учетной записи поставщика, контракту и политике данных. Их не следует объединять в общую маршрутизацию, если только клиент не дал на это явного согласия.
  • Эта таксономия — не просто документация. Он должен управлять контролем доступа, правомочностью маршрутизации, оповещением и ротацией рабочих процессов. Если учетные данные импортируются без категории, владельца, границ учетной записи поставщика и разрешенного использования, они должны оставаться отключенными.

    Храните секреты в хранилище, а не в записях о продуктах

    Хранилище должно быть единственным компонентом, который может расшифровать учетные данные восходящего потока. Другие системы могут хранить ссылки, хеши, поля статуса и метаданные политики, но не само значение учетных данных.

    Не храните в этих местах секреты исходного кода

    <ул>
  • Строки профиля арендатора.
  • Файлы конфигурации маршрутизации модели.
  • Запросить журналы или диапазоны трассировки.
  • Полезные данные событий аналитики.
  • Переменные CI для разработчиков.
  • Заявки в службу поддержки, инструменты чата или снимки экрана.
  • Пригодная для использования конструкция хранилища имеет две плоскости. Секретная плоскость хранит зашифрованные учетные данные и строго контролирует операции расшифровки. В плоскости метаданных хранятся несекретные атрибуты, используемые маршрутизацией и управлением. Маршрутизатору обычно требуется только идентификатор учетных данных и кратковременное извлечение секрета из памяти во время отправки, а не широкий доступ к базе данных для каждого ключа поставщика.

    Защитите хранилище как ценную инфраструктуру: шифрование конвертов или управляемый KMS, строгие удостоверения служб, процедуры взлома, тестирование резервного копирования и восстановления, проверку доступа и оповещение о необычном расшифрованном томе. Центральное хранилище упрощает управление, но также концентрирует риски. Это компромисс.

    Прикрепите метаданные политики к каждому учетным данным

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

    Практическая квалификационная запись включает в себя:

    <ул>
  • credential_id: внутренний неизменяемый идентификатор.
  • Поставщик: OpenAI, Anthropic, Gemini, Azure OpenAI или другой адаптер.
  • provider_account_boundary: организация, проект, рабочая область, облачный проект, подписка или эквивалент.
  • credential_class: время выполнения, администрирование, выставление счетов, оценка или BYOK.
  • среда: производство, подготовка, разработка, оценка, песочница.
  • tenant_binding: общие учетные данные платформы, один клиент, группа клиентов или клиент BYOK клиента.
  • allowed_model_families, например создание текста, встраивание, визуальное представление, изображение, звук или определенные профили модели.
  • allowed_endpoints: нормализованные возможности шлюза, сопоставленные с конечными точками поставщика.
  • data_policy разрешенный класс хранения, класс ведения журнала, требования к месту жительства и ограничения функций.
  • budget_scope: центр затрат, клиент-посредник, внутренний отдел или контракт.
  • владелец: назначенная команда или ответственное лицо.
  • создано_at, истекает_at, ротация_due_at, последнее_использовано_at.
  • health_status: неизвестно, работоспособно, деградировало, несанкционировано, квота_исчерпана, отключено.
  • emergency_disable: немедленная блокировка маршрутизации независимо от нормального состояния политики.
  • Сохраняйте эту модель нейтральной по отношению к поставщикам, но не стирайте реалии поставщиков. Ключ, привязанный к рабочему пространству Anthropic, и ключ Gemini, привязанный к проекту Google Cloud, не являются взаимозаменяемыми только потому, что оба могут генерировать текст. Это происхождение необходимо шлюзу для аудита, возврата платежей и безопасного переключения при сбое.

    Отдельный доступ к среде выполнения, администрированию и оплате

    Самое важное правило простое: ключ, используемый для вывода во время выполнения, не должен управлять организациями-поставщиками, рабочими пространствами, пользователями, проектами или административными ресурсами.

    Трафик во время выполнения имеет большой объем и подвержен самой большой рабочей поверхности. Он проходит через маршрутизаторы запросов, логику повторов, обработчики потоковой передачи, адаптеры моделей и рабочие процессы инцидентов. Учетные данные администратора встречаются редко и оказывают большое влияние. Для них должен использоваться отдельный путь утверждения с коротким сроком жизни, именуемым «утверждением человеком», где это необходимо, строгим журналированием и отсутствием права на маршрутизацию во время выполнения.

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

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

    Создание механизма политики выбора учетных данных

    Выбор учетных данных должен происходить после того, как шлюз аутентифицирует нижестоящего вызывающего абонента и до попытки вызова провайдера. Механизм политики должен объединить несколько входных данных:

    <ул>
  • Идентификатор арендатора и область действия ключа API нижестоящего уровня.
  • Запрошенный профиль модели или идентификатор модели, зависящий от поставщика.
  • Возможности конечной точки: чат, встраивания, изображения, аудио, пакетные файлы, файлы, инструменты или автоматизация администрирования.
  • Требования к хранению и местоположению данных.
  • Бюджет, резервирование кредита и центр затрат.
  • Ограничение скорости и давление квот.
  • Метаданные учетных данных, работоспособность, окружающая среда и привязка клиента.
  • Система должна возвращать один из трех результатов: разрешить с выбранными учетными данными, отклонить с указанием политики или потребовать утверждения. Отказы должны быть достаточно точными, чтобы оперативные группы могли устранить проблему, не раскрывая секретные материалы разработчикам.

    Пример решения:

    {
      "tenant_id": "tenant_42",
      "requested_profile": "fast-text-prod",
      "endpoint": "chat.completions",
      "data_policy": "no_prompt_logging",
      "credential_requirements": {
        "класс": "время выполнения",
        «окружающая среда»: «производство»,
        "tenant_binding": "tenant_42",
        "allowed_model_family": "текст",
        "health_status": "здоров"
      },
      «решение»: «разрешить»,
      "credential_id": "cred_8f2...",
      "audit_reason": "Учетные данные BYOK клиента соответствуют текстовому профилю среды выполнения и политике данных"
    

    Не реализуйте откат типа «попробуйте следующий ключ». Резервный вариант должен повторно запустить политику. Учетные данные общей платформы могут быть действительны для доступа поставщика, но недействительны для клиента, использующего только BYOK. Учетные данные в другом проекте могут иметь квоту, но могут нарушать требования к распределению или сохранению затрат.

    Рассматривайте BYOK как доступ, принадлежащий арендатору, а не как резервную мощность

    BYOK меняет модель доверия. Клиент предоставил учетные данные, чтобы его трафик можно было взимать, регулировать или изолировать в учетной записи поставщика. Эти учетные данные должны быть привязаны к источнику учетной записи арендатора клиента и поставщика.

    Рекомендуемые элементы управления BYOK:

    <ул>
  • Одна запись хранилища для каждого клиента, поставщика, границы учетной записи и среды.
  • Нет межклиентской маршрутизации через учетные данные BYOK.
  • Не использовать в качестве общей резервной емкости, если клиент не дал явного согласия.
  • Состояние работоспособности, видимое клиенту, без раскрытия необработанного ключа.
  • Отдельный рабочий процесс ротации, позволяющий клиенту добавить замену до того, как старый ключ будет отключен.
  • Четкая атрибуция в аналитике использования и счетах: клиент шлюза, граница учетной записи поставщика, идентификатор учетных данных, профиль модели и идентификатор трассировки запроса.
  • Для агентств, реселлеров и партнеров по автоматизации API BYOK может быть более сложным, поскольку служба может предоставлять клиентов и учетные данные программным способом. То же правило по-прежнему применяется: автоматизация может импортировать и привязывать учетные данные, но она не должна размывать владение арендатором.

    Добавьте предполетную проверку работоспособности без утечки подсказок

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

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

    Необходимо выполнить проверку работоспособности:

    <ул>
  • При импорте учетных данных.
  • Перед активацией учетных данных для рабочей маршрутизации.
  • После изменения ограничений на стороне поставщика.
  • Во время переключения ротации.
  • Периодически для учетных данных, имеющих право на производство.
  • Компромисс: автоматические проверки рано выявляют ключи с истекшим сроком действия или недостаточной областью действия, но плохо разработанные проверки могут привести к ненужным звонкам поставщикам, шуму при выставлении счетов или ложным срабатываниям сигналов тревоги во время перебоев в работе поставщика. Сохраните результат работоспособности с отметкой времени, классом ошибки поставщика, протестированной конечной точкой и протестированным семейством моделей. Не храните секретные значения или конфиденциальные запросы.

    Ротация с двумя слотами, а не с одной рискованной заменой

    Ротация учетных данных не должна быть операцией «удалить и выполнить». Используйте модель ротации с двумя слотами:

    <ол>
  • Импортировать заменяющие учетные данные как неактивные, с полными метаданными и владельцем.
  • Выполните синтетическую проверку работоспособности для предполагаемых конечных точек, семейств моделей и границ аккаунта.
  • Включите возможность теневого трафика для небольшой части безопасного синтетического трафика или трафика с низким уровнем риска, где это возможно.
  • Постепенный перенос рабочего трафика со старых учетных данных на новые.
  • Отслеживание ошибок, задержки, квот и распределения затрат по идентификатору учетных данных.
  • Заморозить возврат к старым учетным данным, как только новые учетные данные станут стабильными.
  • Отзовите старые учетные данные у поставщика и отметьте запись хранилища как отозванную.
  • Убедитесь, что после отзыва старых учетных данных не происходит расшифровки или вызовов поставщика.
  • Сроки ротации должны быть видны в операционных представлениях и оповещениях. Для экстренной ротации требуется более короткий путь: отключить учетные данные, заблокировать маршрутизацию, разрешить утвержденную замену и сохранить все записи аудита для анализа инцидентов.

    Ограничить использование ключей поставщика там, где поставщик это поддерживает

    Политика шлюза необходима, но ограничения на стороне провайдера уменьшают радиус атаки, если ключ скомпрометирован или используется неправильно. Для ключей API Gemini и других облачных платформ используйте ограничения API/сервисов и подходящие ограничения приложений, если они доступны. При работе с проектами поставщиков, рабочими областями и учетными записями служб избегайте широких организационных привилегий, если достаточно ключа среды выполнения на уровне проекта.

    Рекомендация: ведите контрольный список ограничений на стороне поставщика для каждого класса учетных данных. Контрольный список должен быть частью одобрения импорта и ротации, а не отдельной задачей безопасности, которую можно пропустить под давлением.

    Компромисс. Ограничения на стороне поставщика увеличивают операционные издержки. Новые конечные точки, семейства моделей, регионы или функции автоматизации могут потребовать изменения политики и ограничений. Это предпочтительнее, чем обнаружить после утечки, что один ключ может получить доступ ко всем рабочим нагрузкам в общем проекте.

    Сохраняйте журнал аудита учетных данных только для добавления

    В журнале аудита должно быть указано, кто импортировал учетные данные, что ему было разрешено делать, какие решения по маршрутизации выбрали его, когда произошел сбой, а также когда он был заменен или отозван.

    Зарегистрируйте эти события:

    <ул>
  • Учетные данные созданы или импортированы.
  • Изменены метаданные, включая разрешенные конечные точки, привязку клиента или политику данных.
  • Проверка работоспособности выполнена и результат записан.
  • Учетные данные, выбранные политикой маршрутизации для запроса.
  • Расшифровка учетных данных, запрошенная внутренним удостоверением службы.
  • Не удалось выполнить вызов поставщика из-за ошибки аутентификации, авторизации, квоты или ограничения.
  • Ротация началась, трафик переключился, старые учетные данные отозваны.
  • Аварийное отключение включено или отключено.
  • Доступны учетные данные администратора или разбитого стекла.
  • Не добавляйте необработанные значения учетных данных в события аудита. Используйте идентификаторы учетных данных, границы учетных записей поставщика, идентификаторы трассировки запросов, идентификаторы субъектов и причины принятия решений по политике. Для большого объема трафика во время выполнения вы можете получить подробные данные расшифровки телеметрии, но выбор маршрутизации и распределение затрат должны оставаться достаточно полными для выставления счетов и реагирования на инциденты.

    Контрольный список реализации

    <ул>
  • Создайте таксономию учетных данных и отклоните несекретный импорт.
  • Переместите все секреты поставщика в специальное зашифрованное хранилище.
  • Хранить метаданные маршрутизации отдельно от секретных материалов.
  • Выделите учетные данные среды выполнения, администратора, выставления счетов, оценки и BYOK в отдельные классы авторизации.
  • Привяжите учетные данные BYOK к происхождению учетных записей арендатора и поставщика.
  • Прежде чем выбирать какие-либо восходящие учетные данные, требуется одобрение механизма политики.
  • Проведите оперативную проверку работоспособности перед тем, как получить право на производство.
  • Используйте ротацию на два слота с постепенным смещением трафика и отзывом на стороне поставщика.
  • Применять ограничения на стороне поставщика везде, где это возможно.
  • Ведение журналов аудита только для добавления данных об импорте, использовании, сбоях, ротации и отзыве.
  • Храните учетные данные администратора под строгим контролем: короткий срок жизни, именованное утверждение, строгая регистрация, отсутствие использования во время выполнения.
  • Практическое заключение

    Начните с инвентаризации всех учетных данных вышестоящего поставщика, которые в настоящее время используются шлюзом, сценариями, заданиями CI, средствами оценки и средствами автоматизации партнеров. Для каждого из них назначьте класс, владельца, границу учетной записи поставщика, привязку клиента, разрешенные конечные точки, разрешенные семейства моделей, крайний срок ротации и статус аварийного отключения. Все, что вы не можете классифицировать, следует отключить или поместить в карантин до тех пор, пока у него не будет четкой цели.

    Затем примените одно архитектурное правило: последующие разработчики получают ключи области шлюза; только шлюз контролирует доступ вышестоящего провайдера. Такое разделение позволяет сохранить минимальные привилегии, атрибуцию арендаторов, точность выставления счетов, маршрутизацию политик данных и безопасную автоматизацию даже при увеличении количества поставщиков, проектов, рабочих пространств и клиентов BYOK.

    Связанное чтение

    FAQ

    Часто задаваемые вопросы

    Должны ли учетные данные поставщика храниться в записях арендаторов?
    Нет. Храните зашифрованные учетные данные в специальном хранилище. Записи арендатора могут ссылаться на идентификатор учетных данных и метаданные политики, но они не должны содержать секреты вышестоящего поставщика.
    Можно ли использовать один ключ поставщика как для вывода во время выполнения, так и для автоматизации администрирования?
    Избегайте этого. Ключи среды выполнения доступны для больших объемов запросов, а ключи администратора могут изменять ресурсы организации, рабочего пространства или проекта. Разделите их с помощью разных классов учетных данных, удостоверений служб, утверждений и журналов аудита.
    Как следует обрабатывать учетные данные BYOK в многотенантном шлюзе?
    Привяжите все учетные данные BYOK к арендатору клиента, границам учетной записи поставщика, среде и разрешенному использованию. Не используйте ключи, предоставленные клиентом, в качестве общей резервной емкости, если только клиент не дал на это явного согласия.
    Каков самый безопасный способ ротации ключей вышестоящего поставщика?
    Используйте двухэтапный процесс: импортируйте замену как неактивную, выполните проверки работоспособности, постепенно перемещайте трафик, отслеживайте ошибки и распределение затрат, отзовите старые учетные данные поставщика и убедитесь, что трафик все еще не использует их.