Аутентификация
После успешной установки сетевого соединения сервер принимает к обработке запросы от клиента, в которых передается аутентификационная информация. На ее основании сервер определяет учетную запись (аккаунт) клиента и проверяет доступ на выполнение запроса.
Поддерживаются следующие режимы аутентификации:
- Анонимный доступ — включен по умолчанию и доступен сразу после установки кластера.
- Аутентификация с использованием стороннего IAM-провайдера, например Yandex Identity and Access Management.
- Аутентификация по логину и паролю.
Аутентификация с использованием стороннего IAM-провайдера
- Access Token — параметром для клиента (SDK или CLI) задается фиксированный токен, который передается в запросы.
- Refresh Token — параметром для клиента (SDK или CLI) задается OAuth токен персональной учетной записи, на основании которого клиент периодически в фоновом режиме обращается к IAM API для ротации (получения следующего) токена, передаваемого в запросы.
- Service Account Key — параметром для клиента (SDK или CLI) задаются атрибуты сервисной учетной записи и ключ для подписи, на основании которых клиент периодически в фоновом режиме обращается к IAM API для ротации (получения следующего) токена, передаваемого в запросы.
- Metadata — клиент (SDK или CLI) периодически обращается к локальному сервису для ротации (получения следующего) токена, передаваемого в запросы.
Любой обладатель валидного токена может получить доступ на выполнение операций, поэтому главная задача системы безопасности — обеспечение секретности токена и предотвращение его компрометации.
Режимы аутентификации с ротацией токена Refresh Token и Service Account Key обеспечивают больший уровень безопасности по сравнению с режимом с фиксированным токеном Access Token, так как на сервер YDB по сети передаются только короткоживущие секреты.
Максимальная безопасность и производительность обеспечивается при использовании режима Metadata, так как он исключает необходимость работы с секретами при развертывании приложения, а также позволяет обратиться к IAM и закешировать токен заранее, до запуска приложения.
При выборе режима аутентификации среди поддерживаемых сервером и окружением, следует руководствоваться следующими рекомендациями:
- Anonymous обычно применяется на самостоятельно разворачиваемых локальных кластерах YDB, недоступных по сети.
- Access Token применяется при отсутствии поддержки других режимов на стороне сервера или в настроечных/отладочных целях. Он не требует взаимодействий клиента с IAM. Однако, если IAM поддерживает API для ротации токенов, то обычно выдаваемые таким IAM фиксированные токены имеют короткий срок жизни, что вынуждает регулярно обновлять их в IAM вручную заново.
- Refresh Token может применяться при выполнении разовых ручных операций под персональной учетной записью, например, связанных с обслуживанием данных в БД, выполнением ad-hoc операций в CLI, или запусками приложений с рабочей станции. Такой токен можно получить вручную в IAM один раз на долгий срок и сохранить в переменной окружения на личной рабочей станции для автоматического применения при запуске CLI без дополнительных параметров аутентификации.
- Service Account Key применяется в первую очередь для приложений, рассчитанных на эксплуатацию в окружениях, где поддерживается режим Metadata, при их тестировании вне таких окружений (например, на рабочей станции). Также он может применяться для приложений вне таких окружений, работая как аналог Refresh Token для сервисных учетных записей. В отличие от персональной учетной записи, объекты доступа и роли сервисной учетной записи могут быть ограничены.
- Metadata применяется при разворачивании приложений в облаках. В настоящее время этот режим поддерживается на виртуальных машинах и в Cloud Functions Yandex.Cloud.
Токен для указания в параметрах может быть получен в системе IAM, с которой связана конкретная установка YDB. В частности, для сервиса YDB в Yandex.Cloud применяется Yandex.Passport OAuth и сервисные аккаунты Yandex.Cloud. При использовании YDB в корпоративных контекстах могут применяться стандартные для данной организации системы централизованной аутентификации.
При использовании режимов, предусматривающих обращение клиента YDB к IAM, дополнительно может быть задан URL IAM, предоставляющий API выдачи токенов. По умолчанию в существующих SDK и CLI производится попытка обращения к API IAM Yandex.Cloud, размещенному на iam.api.cloud.yandex.net:443
.
Аутентификация по логину и паролю
Процесс аутентификации по логину и паролю включает следующие шаги:
-
Клиент обращается к БД и передает логин и пароль пользователя сервису аутентификации YDB.
Имя пользователя может содержать только строчные буквы латинского алфавита и цифры. Требования к паролю не предъявляются, пароль может быть пустым.
-
Сервис аутентификации передает аутентификационные данные в компонент аутентификации YDB.
-
Компонент валидирует аутентификационные данные, при успешном сопоставлении создает токен и возвращает его сервису аутентификации.
Использование токена ускоряет процесс аутентификации и повышает безопасность. Время жизни токена по умолчанию 12 часов. Для ротации токенов YDB SDK самостоятельно обращается к сервису аутентификации.
Имя пользователя и хеш пароля хранятся в таблице внутри компонента аутентификации. Пароль хеширован методом Argon2. В режиме аутентификации по логину и паролю доступ к таблице имеет только администратор системы.
-
Сервис аутентификации возвращает токен клиенту.
-
Клиент обращается к БД, передавая в качестве аутентификационной информации токен.
Для включения аутентификации по логину и паролю укажите значение true
для ключа enforce_user_token_requirement
в конфигурационном файле кластера.
Об управлении ролями и пользователями читайте в Управление доступом.