В Google Maps JavaScript API API-ключ выполняет роль идентификатора проекта в инфраструктуре Google Cloud. Он не является секретом в классическом понимании серверных токенов, поскольку используется в клиентском коде браузера и неизбежно попадает в публичный доступ при загрузке страницы.
Из этого следует ключевой архитектурный принцип: защита API-ключа в клиентских приложениях невозможна через сокрытие кода, а достигается через ограничения его использования и контроль окружения.
Основной механизм защиты ключа в браузерных приложениях — ограничение по источнику запросов (HTTP referrer).
Каждый запрос к Google Maps API содержит:
На стороне Google Cloud происходит проверка:
В консоли Google Cloud для API-ключа задаются ограничения:
https://example.com/*https://*.example.com/*http://localhost:3000/* (для разработки)Такой подход делает ключ бесполезным вне разрешённого контекста, даже если он будет скопирован.
Помимо ограничения по домену, ключ жёстко привязывается к набору сервисов.
Для ключа, используемого с картами, обычно указываются:
Это предотвращает использование ключа в других сервисах Google Cloud даже при его компрометации.
Системная ошибка — использование одного ключа во всех слоях приложения.
Используется исключительно для:
Обязан иметь строгие ограничения по referrer.
Используется в backend-среде:
Он может быть ограничен по IP-адресам:
Хотя ключ нельзя полностью скрыть на клиенте, его необходимо исключить из исходного кода.
Пример:
VITE_GOOGLE_MAPS_API_KEY=your_key_here
или
REACT_APP_GOOGLE_MAPS_API_KEY=your_key_here
Ключ не должен быть:
Современные сборщики (Vite, Webpack, Next.js) встраивают переменные окружения в финальный бандл.
Это означает:
Следовательно, безопасность достигается не скрытием, а ограничением использования ключа на уровне Google Cloud.
Для операций, требующих повышенного контроля (например, геокодирование или Places Search), применяется серверный прокси.
Даже при правильной конфигурации ключ может быть скомпрометирован.
В Google Cloud применяются:
Анализ поведения ключа позволяет выявить:
Регулярная замена ключей снижает риск длительной эксплуатации скомпрометированного доступа.
Практика включает:
Важно избегать одновременного использования ключей без необходимости.
Наиболее распространённые проблемы:
*).env в репозиторияхТакие ошибки приводят к неконтролируемому расходу квоты и потенциальной блокировке API.
Корректная схема работы с Google Maps JavaScript API включает:
Такая модель учитывает фундаментальное свойство веб-клиента: любой код на стороне браузера является публичным.