Рекомендации по безопасности
Лучшие практики использования AACsearch для защиты ваших данных, API-ключей и аккаунта.
Рекомендации по безопасности
Безопасность — это совместная ответственность. AACsearch обеспечивает инфраструктуру, защищённую по стандартам индустрии, а вы должны правильно использовать аккаунт и API-ключи.
Управление API-ключами
Никогда не коммитьте ключи в Git
КРИТИЧНО: API-ключи должны храниться в переменных окружения, а НЕ в коде.
Неправильно:
const apiKey = "ss_search_abc123def456"; // ❌ Не делайте так!
const response = await fetch('https://app.aacsearch.com/api/v1/search', {
headers: { 'Authorization': `Bearer ${apiKey}` }
});Правильно:
const apiKey = process.env.AACSEARCH_API_KEY; // ✓ Используйте переменные окружения
const response = await fetch('https://app.aacsearch.com/api/v1/search', {
headers: { 'Authorization': `Bearer ${apiKey}` }
});Создавайте отдельные ключи для каждого сервиса
Вместо того, чтобы использовать один админ-ключ везде, создайте специализированные ключи:
| Ключ | Скоп | Где использовать | Шаг |
|---|---|---|---|
| Публичный ключ поиска | search | На клиенте, в браузере, в мобильном приложении | 1 |
| Ключ импорта | ingest | На сервере при загрузке документов | 2 |
| Админ-ключ | admin | Только на вашем личном компьютере, никогда на сервере | 3 |
Как создать специализированные ключи
- Откройте Поиск → API-ключи
- Нажмите Создать ключ
- Дайте ему имя (например, "Frontend Search" или "Import Worker")
- Выберите скоп: Search / Ingest / Admin
- Выберите индексы, к которым этот ключ имеет доступ (необязательно)
- Нажмите Создать
- Скопируйте ключ один раз и сохраните в
.env.local
Заметка: ключ показывается только один раз при создании. Если вы потеряли ключ, создайте новый.
Ротация ключей
Каждые 3 месяца создавайте новые ключи и удаляйте старые:
# Создайте новый ключ
# (в панели AACsearch → API-ключи → Создать ключ)
# Обновите переменные окружения
echo "AACSEARCH_API_KEY=ss_search_new_key_here" >> .env.local
# Протестируйте, что новый ключ работает
curl -H "Authorization: Bearer ss_search_new_key_here" \
https://app.aacsearch.com/api/v1/indexes
# Удалите старый ключ
# (в панели → API-ключи → Старый ключ → Удалить)Если ключ скомпрометирован
Если вы случайно разместили ключ в публичном репозитории или выслали его кому-то:
- Немедленно удалите ключ — откройте API-ключи → Старый ключ → Удалить
- Создайте новый ключ — пройдите шаги выше
- Проверьте логи доступа — откройте Настройки → Аудит и посмотрите, был ли несанкционированный доступ
- Переиндексируйте критичные данные — если ключ был админ-ключом, пересоздайте индексы
Защита аккаунта
Установите сильный пароль
Используйте пароль, который:
- ✓ Содержит заглавные буквы (A-Z), строчные (a-z), цифры (0-9) и спецсимволы (!@#$%^&*)
- ✓ Имеет минимум 12 символов (желательно 16+)
- ✓ Не совпадает с вашим именем, почтой или названием компании
- ✓ Не был использован на других сайтах
Пример сильного пароля:
Tr0p1cal!Sunset#2025$AACsearchПлохой пароль:
aacsearch123 ❌ Слишком простой
Password! ❌ Слишком распространёнИспользуйте менеджер паролей (1Password, Bitwarden, Dashlane) чтобы генерировать и хранить пароли.
Включите двухфакторную аутентификацию (2FA)
2FA делает невозможным вход в аккаунт даже если кто-то узнает пароль.
- Откройте Настройки → Безопасность
- Найдите раздел Двухфакторная аутентификация
- Нажмите Включить 2FA
- Выберите метод:
- Приложение-аутентификатор (рекомендуется) — Google Authenticator, Microsoft Authenticator, Authy
- SMS (менее безопасно) — код по SMS
- Сохраните резервные коды в безопасном месте
Где хранить резервные коды:
- ✓ В менеджере паролей
- ✓ В зашифрованном файле на компьютере
- ✓ На отпечатанной бумаге в сейфе
- ✗ В открытом виде в облаке (Google Drive, Dropbox)
Проверяйте активные сессии
Если вы заметили подозрительную активность:
- Откройте Настройки → Безопасность → Активные сессии
- Посмотрите список всех устройств, с которых вы вошли
- Нажмите Выйти из сессии рядом с неизвестным устройством
Защита данных
Ограничивайте доступ сотрудников
-
Откройте Настройки → Члены организации
-
Создайте члены с разными правами:
- Админ — полный доступ (только владелец)
- Редактор — может создавать и редактировать индексы
- Зритель — может только смотреть статистику и результаты поиска
- Техподдержка — может отвечать на вопросы, но не может редактировать данные
-
Удаляйте членов, которые больше не работают в компании
Используйте HTTPS везде
Убедитесь, что все запросы к API идут через HTTPS, а не HTTP:
# ✓ Правильно
curl https://app.aacsearch.com/api/v1/indexes
# ✗ Неправильно
curl http://app.aacsearch.com/api/v1/indexes # ❌ Данные не зашифрованыЛогируйте все действия с индексами
Если нужен аудит того, кто и когда что делал:
- Откройте Настройки → Аудит
- Вы видите все действия: кто создал индекс, кто загрузил документы, кто изменил настройки
- Экспортируйте логи для анализа (если требуется по закону)
Безопасность на сервере (backend)
Никогда не делайте поиск напрямую с сервера клиента
Плохо:
// На клиенте (браузер)
const apiKey = "ss_search_..."; // ❌ API-ключ видна в исходном коде
const response = await fetch('https://app.aacsearch.com/api/v1/search', {
headers: { 'Authorization': `Bearer ${apiKey}` }
});Хорошо:
// На клиенте (браузер)
const response = await fetch('https://your-domain.com/api/search', {
method: 'POST',
body: JSON.stringify({ query: 'кроссовки' })
});
// На сервере (Node.js, Python, Go)
const apiKey = process.env.AACSEARCH_API_KEY; // Ключ в переменных окружения
const searchResponse = await fetch('https://app.aacsearch.com/api/v1/search', {
headers: { 'Authorization': `Bearer ${apiKey}` }
});Используйте переменные окружения
Правильно:
# .env.local (не коммитьте в Git!)
AACSEARCH_API_KEY=ss_search_abc123def456
AACSEARCH_ADMIN_KEY=ss_admin_xyz789uvw012// code.js
const apiKey = process.env.AACSEARCH_API_KEY;В GitHub Actions / CI-CD:
# .github/workflows/deploy.yml
- name: Deploy
env:
AACSEARCH_API_KEY: ${{ secrets.AACSEARCH_API_KEY }}
run: npm startДобавьте rate limiting на сервере
Если вы предоставляете публичный endpoint поиска, защитите его от DDoS:
// Express.js с express-rate-limit
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 минут
max: 100 // максимум 100 запросов за 15 минут
});
app.post('/api/search', limiter, async (req, res) => {
// Ваш код поиска
});# Django с django-ratelimit
from django_ratelimit.decorators import ratelimit
@ratelimit(key='ip', rate='100/15m') # 100 запросов за 15 минут
def search(request):
# Ваш код поискаВалидируйте входные данные
Никогда не передавайте пользовательский ввод напрямую в AACsearch API:
// ❌ Плохо
app.post('/search', (req, res) => {
const query = req.query.q; // Опасно!
fetch(`https://app.aacsearch.com/api/v1/search?query=${query}`, ...);
});
// ✓ Хорошо
const Joi = require('joi');
app.post('/search', (req, res) => {
const { error, value } = Joi.object({
query: Joi.string().max(500).required(),
limit: Joi.number().max(100).default(20)
}).validate(req.query);
if (error) {
return res.status(400).json({ error: error.message });
}
fetch(`https://app.aacsearch.com/api/v1/search`, {
method: 'POST',
body: JSON.stringify({ query: value.query, limit: value.limit })
});
});Безопасность фронтенда
Используйте публичные ключи поиска (read-only)
Если вы встраиваете виджет на сайте, используйте публичный ключ поиска, который может только читать данные:
<div id="aac-search"></div>
<script
src="https://app.aacsearch.com/api/widget/widget.js"
data-api-key="ss_search_..." <!-- Публичный ключ, безопасно видна в браузере -->
data-index-slug="products"
data-container="#aac-search">
</script>Публичный ключ поиска может:
- ✓ Искать в индексе
- ✓ Получать результаты
Публичный ключ НЕ может:
- ✗ Загружать документы
- ✗ Удалять документы
- ✗ Менять конфигурацию
- ✗ Смотреть API-ключи других
Используйте Content Security Policy (CSP)
Защитите от XSS-атак и инъекций скриптов:
<!-- Только в head, НЕ в виджете -->
<meta http-equiv="Content-Security-Policy"
content="script-src 'self' https://app.aacsearch.com; img-src 'self' data: https:;">Это позволяет загружать скрипты только с вашего домена и aacsearch.com.
Мониторьте запросы в браузере
Используйте Developer Tools (F12) чтобы проверить запросы:
- Откройте F12 → Network
- Сделайте поиск в виджете
- Посмотрите запрос
/api/v1/search - Убедитесь:
- ✓ Используется HTTPS (не HTTP)
- ✓ Заголовок
Authorization: Bearer ss_search_... - ✓ Отправляются только нужные данные (query, filters)
- ✗ НЕ отправляются персональные данные пользователя (IP, email, phone)
Реагирование на инциденты
Если заметили неправомерный доступ
- Немедленно удалите скомпрометированный ключ — откройте API-ключи → Удалить
- Проверьте логи — откройте Настройки → Аудит и посмотрите время и дату неправомерного доступа
- Посмотрите, что было скачано — какие индексы и документы были доступны
- Пишите в поддержку — если это серьёзное нарушение, свяжитесь с security@aacsearch.com
Если потеряли пароль
- На странице входа нажмите Забыли пароль?
- Введите email
- Нажмите ссылку в письме (действительна 24 часа)
- Установите новый пароль
- Войдите с новым паролем
Если письмо не пришло:
- Проверьте папку Спам
- Подождите 5 минут
- Пишите на support@aacsearch.com
Если потеряли 2FA-ключ
Если у вас больше нет доступа к authenticator-приложению:
- На странице входа нажмите Потеряли доступ к 2FA?
- Используйте один из резервных кодов (которые вы сохранили при включении 2FA)
- Установите новое 2FA-приложение
- Если резервных кодов нет, пишите на support@aacsearch.com
Соответствие стандартам
SOC 2 Type II
Мы прошли аудит SOC 2 Type II, который проверяет:
- ✓ Security — защита от неправомерного доступа
- ✓ Availability — сервис доступен 99.9% времени
- ✓ Processing Integrity — данные не теряются и не повреждаются
- ✓ Confidentiality — данные остаются конфиденциальными
- ✓ Privacy — соблюдение законов о защите данных
Чек-лист безопасности
Перед запуском в production проверьте:
- API-ключи хранятся в
.env.local, не в коде - 2FA включена на аккаунте
- Разные ключи для разных сервисов (search, ingest, admin)
- Используется HTTPS везде (не HTTP)
- Rate limiting на сервере
- Валидация входных данных
- Аудит логируется для критичных операций
- Сотрудникам даны минимальные требуемые права
Помощь и поддержка
Если у вас есть вопросы о безопасности:
- Email: security@aacsearch.com
- Баг-баунти: Отправить отчёт
- Не раскрывайте уязвимости публично, сначала пишите нам
Часто задаваемые вопросы
Q: Нужна ли мне 2FA?
A: Это рекомендуется, особенно если у вас админ-доступ или вы храните критичные данные.
Q: Как часто я должен менять пароль?
A: Если он сильный и уникальный, менять не нужно. Только если заметили подозрительную активность или скомпрометирован.
Q: Можно ли хранить API-ключ в .env файле в Git?
A: Нет. Добавьте .env.local в .gitignore и храните ключи только локально или в CI-CD секретах.
Q: Что если я случайно разместил ключ в публичном repo?
A: Немедленно удалите ключ из AACsearch, создайте новый и очистите Git историю (используйте git filter-branch или BFG Repo-Cleaner).