Для приложений и проектов, в которых используются API и SDK платформы Google Карт, необходимы ключи API или протокол OAuth 2.0, если он поддерживается. Это позволяет предотвратить несанкционированное использование и списание средств.
Эти рекомендации помогут вам защитить доступ к Maps Platform.
Если вы хотите использовать OAuth 2.0 для авторизации трафика между серверами, найдите соответствующий раздел в документации по API. Подробнее об использовании OAuth для серверных приложений…
Помимо ограничений для приложений и ключей API, следуйте рекомендациям по обеспечению безопасности для отдельных продуктов платформы Google Карт. Например, посмотрите советы для Maps JavaScript API в разделе Рекомендуемые ограничения для приложений и API ниже.
Если у вас уже есть ключи API, изучите рекомендации в разделе Если вы задаете ограничения для используемого ключа API ниже.
Также ознакомьтесь с руководством по цифровой подписи, поддерживаемой Maps Static API и Street View Static API.
Рекомендации
Чтобы обеспечить высокий уровень безопасности и не платить за несанкционированное использование, следуйте этим рекомендациям для всех API, SDK и сервисов платформы Google Карт.
Рекомендации для всех способов использования ключей API
Ограничьте действие ключей API
Используйте разные ключи API в разных приложениях
Проверьте использование ключа API
Будьте внимательны при ротации ключей API
Разделите клиентское и серверное использование на отдельные проекты
Отключите неиспользуемые сервисы
Дополнительные рекомендации для клиентских приложений
Защита вызовов клиентских веб-сервисов
Дополнительные рекомендации для сайтов и клиентских приложений, использующих Static Web API
Дополнительные рекомендации для серверных приложений, использующих веб-сервисы
Защитите ключи API веб-сервисов
Как использовать OAuth для серверных приложений
Если вы задаете ограничения или повторно генерируете используемый ключ API
Прежде чем изменять ключ API, важно проверить, как он используется.
Если вы измените ключ API, добавьте новый ключ во все приложения, где он необходим.
Если ваш ключ API не был взломан и не используется несанкционированно, вы можете постепенно перевести приложения на новые ключи API, не трогая изначальный ключ, пока у вас не останется только один тип трафика. После этого вы сможете задать для ключа API ограничения по типу приложений, не опасаясь сбоев в работе сервисов.
Инструкции приведены в разделе Перейдите на использование нескольких ключей API.
Регулярно проверяйте сведения об использовании. Так вы увидите, когда определенные API, типы платформ и домены перейдут на новый ключ API, и сможете удалить старый или задать для него ограничение. Подробную информацию вы найдете в разделах Отчеты и мониторинг и Показатели.
Если ваш ключ API был взломан, вам необходимо как можно быстрее защитить его, чтобы предотвратить несанкционированное использование. В приложениях для Android и iOS ключи заменяются только после того, как пользователи обновят приложение. Обновлять и заменять ключи на веб-страницах и в серверных приложениях намного проще, но даже в таких случаях иногда нужно тщательно спланировать переход и действовать максимально быстро.
Подробную информацию вы найдете в разделе Что делать в случае несанкционированного использования ключа API.
Дополнительная информация
Рекомендуемые ограничения для приложений и API
Ограничьте действие ключей API
Мы рекомендуем всегда использовать для ключей API один тип ограничения для приложений и как минимум одно ограничение API. Подробная информация о том, как настроить ограничения для API, SDK или сервиса JavaScript, приводится в разделе Рекомендуемые ограничения для приложений и API.
Ограничения для приложений. Вы можете ограничить использование ключа API определенной платформой, например приложениями для Android или iOS, сайтами для клиентских приложений, IP-адресами или подсетями CIDR для серверных приложений, отправляющих вызовы REST API к веб-сервисам.
Чтобы задать ограничение для ключа, укажите, каким типам приложений разрешено использовать ключ. После этого запросы будут приниматься только из этих источников.
Ограничения API. Вы можете указать, какие API, SDK и сервисы платформы Google Карт могут использовать ваш ключ API. После этого будут разрешены запросы только к указанным API и SDK. Для любого ключа API можно задать любое количество ограничений API. В список доступных API входят все API, включенные в проекте.
Как настроить ограничение по типу приложений для ключа API
В консоли Google Cloud откройте страницу Google Maps Platform > Credentials (Платформа Google Карт > Учетные данные).
Выберите ключ API.
На странице Edit API key (Изменить ключ API) в разделе Key restrictions (Ограничения ключа) выберите Set an application restriction (Настроить ограничение для приложений).

Выберите тип ограничения и укажите всю нужную информацию.
Тип ограничения Описание Сайты Укажите один или несколько сайтов – источников перехода. - Широко поддерживаемые схемы URI перехода:
httpsиhttp. Другие схемы не гарантированно работают корректно, поскольку современные браузеры из соображений конфиденциальности не отправляют заголовок `Referer` в исходящих запросах. - Всегда указывайте полную строку URL перехода, включая протокол, имя хоста и необязательный порт, например
https://google.com. - Можно использовать подстановочные знаки для авторизации всех субдоменов. Например, если ввести значение
https://*.google.com, то будут допускаться все сайты, у которых названия доменов оканчиваются на.google.com. - С осторожностью настраивайте разрешения для полного пути перехода, например
https://google.com/some/path, потому что в целях конфиденциальности большинство браузеров удаляют путь из запросов из разных источников.
IP-адреса Укажите один или несколько адресов IPv4 или IPv6 или подсети в формате CIDR. IP-адреса должны совпадать с исходными адресами, определенными серверами платформы Google Карт. Если вы используете преобразование сетевых адресов (NAT), это, как правило, будет публичный IP-адрес вашей машины. Приложения для Android Добавьте название пакета Android (из файла
AndroidManifest.xml) и цифровой отпечаток сертификата для подписи SHA-1 для каждого приложения для Android, которому нужно дать разрешение.- Выберите Android apps (Приложения для Android).
- Нажмите + Добавить.
- Укажите название пакета и цифровой отпечаток сертификата SHA-1. Пример:
com.example.android.mapexample
BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75
- Нажмите Сохранить.
Существует два типа сертификатов.
- Сертификат для отладки. Его следует использовать исключительно при тестировании приложений и работе с кодом до публикации. Не пытайтесь опубликовать приложение, подписанное с помощью сертификата для отладки. Этот сертификат создается автоматически при выполнении отладочной сборки приложения с помощью инструментов Android SDK.
- Сертификат для выпуска. Используйте этот сертификат, когда будете готовы выпустить приложение в магазин приложений. Он создается с помощью Android SDK Tools, когда вы запускаете конечную сборку.
Узнать больше о подписи и сертификатах приложений для Android можно из руководства по добавлению подписи в приложения.
Если вы используете функцию подписания приложений в Google Play, чтобы получать цифровой отпечаток сертификата для подписи, прочитайте статью о работе с поставщиками API. Если вы сами управляете ключом для подписания, прочитайте статью о самозаверяющей подписи приложения или инструкции для вашей среды сборки.
Приложения для iOS Добавьте идентификатор пакета каждого приложения iOS, которому нужно предоставить разрешение.
- Выберите Приложения для iOS.
- Нажмите + Добавить.
- Добавьте идентификатор пакета, чтобы принимать запросы от приложения iOS с этим идентификатором.
- Нажмите Сохранить.
Подробнее о рекомендациях в отношении ограничений для приложений…
- Широко поддерживаемые схемы URI перехода:
Нажмите Сохранить.
Как настроить ограничения API для ключа API
В консоли Google Cloud откройте страницу Google Maps Platform > Credentials (Платформа Google Карт > Учетные данные).
Выберите ключ API.
На странице Edit API key (Изменить ключ API) в разделе API restrictions (Ограничения API):
Нажмите Restrict key (Задать ограничения для ключа).
В раскрывающемся списке Select APIs (Выберите API) укажите нужные API или SDK. Приложение будет использовать ключ API для доступа к ним.
Если нужных API или SDK нет в списке, включите их. Для этого выполните инструкции из раздела о том, как включить один или несколько API или SDK.

Нажмите Сохранить.
Заданное ограничение будет добавлено в определение ключа API. Укажите все нужные сведения и нажмите Save (Сохранить), чтобы сохранить ограничения ключа API. Более подробные сведения можно найти в руководстве по получению ключа API в документации для нужного API или SDK.
Подробнее о рекомендуемых ограничениях API…
Проверьте использование ключа API
Если вы задаете ограничения для существующих ключей API или хотите проверить по ключам, какие API используются, и ограничить их, вам нужно проверить использование ключей API. Ниже рассказывается, как посмотреть, в каких сервисах и методах API используется ключ API. Если вы видите случаи использования за пределами сервисов платформы Google Карт, проверьте, не нужно ли добавить больше ограничений, чтобы предотвратить нежелательное использование. Инструмент Metrics Explorer в Cloud Console платформы Google Карт поможет определить, какие ограничения для приложений и API нужно добавить для ключа API.
Как определить, какие API используют ваш ключ API
В отчетах о ряде показателей содержатся данные, которые помогут определить, какие API используют ваш ключ API. С помощью этих отчетов вы сможете:
- посмотреть, как используется ключ API;
- выявить неожиданные случаи использования;
- проверить, безопасно ли удалять неиспользуемый ключ (узнайте, как удалить ненужный ключ API).
Когда вы применяете ограничения API, отчеты помогут вам создать список разрешенных API или проверить автоматически созданные рекомендации по ограничениям для ключа API. Подробнее о том, как применять рекомендуемые ограничения ключа API… и создавать диаграммы в Metrics Explorer…
Откройте Metrics Explorer в консоли Google Cloud.
Войдите в аккаунт и выберите проект, ключи API из которого нужно проверить.
В Metrics Explorer перейдите на страницу нужного типа API:
Для ключей API, использующих любые API, кроме Maps Embed API, перейдите на страницу Metrics Explorer.
Для ключей API, использующих Maps Embed API, перейдите в Metrics Explorer.
Проверьте все ключи API:
Выберите Add filter (Добавить фильтр).
Выберите ярлык
credential_id.Выберите значение, соответствующее нужному ключу.
Посмотрите, для каких API используется этот ключ API, и убедитесь, что использование ожидаемо.
Нажмите Remove filter (Удалить фильтр) в строке активного фильтра.
Повторите эти действия для остальных ключей.
Ограничьте ключи API только используемыми API.
Если ваш ключ используется не так, как вы предполагали, прочитайте раздел Что делать в случае несанкционированного использования ключа API.
Как выбрать правильный тип ограничений для приложения с помощью Metrics Explorer
После того как вы выполните проверку и примите меры, чтобы ваш ключ API использовался только для нужных сервисов платформы Google Карт, убедитесь, что для ключа правильно заданы ограничения приложений.
Если для ключа API предлагаются рекомендуемые ограничения, примените их.
Если у ключа API нет рекомендуемых ограничений, определите, ограничения для какого типа приложений вам нужны. Для этого обратите внимание на platform_type в Metrics Explorer.
Откройте Metrics Explorer в консоли Google Cloud.
Войдите в аккаунт и выберите проект, API из которого надо проверить.
Перейдите на эту страницу в Metrics Explorer.
Проверьте все ключи API:
Выберите Add filter (Добавить фильтр).
Выберите ярлык
credential_id.Выберите значение, соответствующее нужному ключу.
Нажмите Remove filter (Удалить фильтр) в строке активного фильтра.
Повторите эти действия для остальных ключей.
Определив тип платформы (
platform_type) для ключей API, примените ограничения для приложений:PLATFORM_TYPE_JS– примените к ключу ограничения для сайтов.PLATFORM_TYPE_ANDROID– примените к ключу ограничения для приложений Android.PLATFORM_TYPE_IOS– примените к ключу ограничения для приложений iOS.PLATFORM_TYPE_WEBSERVICEВам может понадобиться применить к ключу ограничения по IP-адресу, чтобы надежно защитить его.Рекомендации для Maps Static API и Street View Static API приведены в разделе Как защитить Static Web API.
Рекомендации по Maps Embed API вы найдете в разделе Сайты с Maps Embed API.
Ключ API используется на разных типах платформ. Скорее всего, вы не сможете защитить свой трафик, используя один ключ API, вам нужно добавить несколько. Инструкции приведены в разделе Перейдите на использование нескольких ключей API.
Используйте разные ключи API в разных приложениях
Это ограничит область действия ключей. Если кто-то получит несанкционированный доступ к одному ключу API, этот ключ можно будет удалить и сгенерировать новый, не затрагивая остальные. Для одного проекта можно создать до 300 ключей API. Подробнее об ограничениях для ключей API…
В целях безопасности лучше всего использовать один ключ API для одного приложения, но вы можете использовать ограниченные ключи для нескольких приложений, если в них задано одинаковое ограничение для приложений.
Примените рекомендуемые ограничения ключа API
Некоторым владельцам и редакторам проектов, а также администраторам ключей API в консоли Google Cloud предлагаются определенные ограничения ключа API с учетом использования платформы Google Карт и действий с ключами, для которых не заданы ограничения.
Эти рекомендации показываются как заранее настроенные варианты на странице Google Maps Platform > Credentials (Платформа Google Карт > Учетные данные).
API и SDK платформы Google Карт, поддерживаемые автоматическими рекомендациями
Maps JavaScript API, включая: Directions Service (устаревший); Distance Matrix Service (устаревший); Elevation Service; Geocoding Service; класс Place; виджет Place Autocomplete (новый); Place Autocomplete Data API; библиотеку Places; Places Service; виджет Place Autocomplete; Places UI Kit.
Maps Static API и Street View Static API
Maps Embed API
Maps SDK для Android, Navigation SDK для Android, Places SDK для Android и Places UI Kit для Android
Maps SDK для iOS, Navigation SDK для iOS, Places SDK для iOS, Places Swift SDK для iOS и Places UI Kit для iOS.
Причины, по которым список рекомендаций может быть неполным или вообще отсутствовать
Почему рекомендации могут не показываться
Вы используете ключ API в каких-либо сервисах, помимо платформы Google Карт, или в сервисах платформы Google Карт, которые пока не поддерживаются автоматическими рекомендациями.
В этом случае не применяйте рекомендацию, пока не сделаете следующее:
Откройте страницу Metrics Explorer в консоли Google Cloud и убедитесь, что API используется правильно.
Вручную добавьте отсутствующие сервисы в список API для авторизации.
Вручную добавьте отсутствующие ограничения приложений для добавленных в список API сервисов. Если для какого-либо из добавленных сервисов требуются ограничения приложений другого типа, прочитайте раздел Перейдите на использование нескольких ключей API.
Ваш ключ API не используется в клиентских SDK или API.
Ваш ключ API используется в приложении с низким трафиком или на сайте, на котором более 60 дней не было посетителей.
Вы недавно создали новый ключ или начали использовать существующий ключ в новом приложении. В этом случае рекомендации обновятся через несколько дней.
Вы используете ключ API в нескольких приложениях, для которых требуются конфликтующие ограничения, или один и тот же ключ используется в слишком многих приложениях или на сайтах. В таких ситуациях лучше перейти на использование нескольких ключей. Подробнее см. Перенос на несколько ключей API.
Причины, по которым список рекомендаций может быть неполным
Ваш ключ API используется в приложении с низким трафиком или на сайте, на котором более 60 дней не было посетителей.
Вы совсем недавно начали использовать существующий ключ в новом API или сервисе, и автоматическая система рекомендаций по ограничению ключей API ещё не обработала обновленные показатели использования. Передача показателей использования может занять несколько дней.
В этом случае не применяйте рекомендацию, пока не сделаете следующее:
Откройте страницу Metrics Explorer в консоли Google Cloud и убедитесь, что API используется правильно.
Вручную добавьте отсутствующие сервисы в список API для авторизации.
Вручную добавьте отсутствующие ограничения приложений для добавленных в список API сервисов. Если для какого-либо из добавленных сервисов требуются ограничения приложений другого типа, прочитайте раздел Перейдите на использование нескольких ключей API.
Если вам не нужно срочно ограничить ключ, например из-за несанкционированного использования, вы можете подождать день или два, пока рекомендации не обновятся.
Причины, по которым вы можете видеть рекомендации, которые не отображаются на диаграммах
На вашем сайте или в приложении были только очень короткие всплески трафика. В этом случае перейдите из режима Chart (Диаграмма) в режим Table (Таблица) или Both (Диаграмма и таблица), поскольку использование отображается в легенде. Подробнее о том, как включить полную легенду диаграммы…
Трафик поступает из Maps Embed API. В этом случае выполните инструкции, приведенные в разделе Как определить, какие API используют ваш ключ API.
Трафик сайта или приложения относится к периоду за пределами диапазона дат, доступного на странице Metrics Explorer в консоли Google Cloud.
Как применить рекомендуемые ограничения
В консоли Google Cloud откройте страницу Google Maps Platform > Credentials (Платформа Google Карт > Учетные данные).
Выберите Apply recommended restrictions (Применить рекомендуемые ограничения), если этот вариант доступен.

Выберите Check API usage (Проверить использование API), чтобы посмотреть, в каких сервисах используется ключ API. Если в списке указаны не только сервисы платформы Google Карт, приостановите процесс, чтобы вручную проверить рекомендации, как описано выше. О том, как устранить неполадки, читайте в начале раздела Примените рекомендуемые ограничения ключа API.
Убедитесь, что все предложенные ограничения соответствуют сайтам и приложениям, которым разрешено использовать ваш ключ API.
Совет. Запишите и удалите все ограничения приложений и API, которые не связаны с вашими сервисами. Если из-за непредвиденной зависимости произойдет сбой, вы сможете вернуть нужные приложения и API.
Если вы обнаружили, что в рекомендации отсутствует приложение, сайт или API, добавьте его вручную или подождите несколько дней, пока эта рекомендация обновится.
Если вам нужна помощь с рекомендацией, обратитесь в службу поддержки.
Нажмите Применить.
Что делать, если после применения рекомендации ваше приложение было отклонено
Если после применения рекомендации ваше приложение или сайт были отклонены, посмотрите в сообщении об ошибке ответа API, какое ограничение для приложений нужно добавить.
Клиентские SDK и API
- Браузеры и приложения на основе WebView
Современные браузеры обычно редактируют заголовок
Refererв запросах из разных источников в целях конфиденциальности, часто сокращая его доOrigin. Однако точное поведение зависит от применяемойreferrer-policyсайта, на котором размещен контент, а также может варьироваться в зависимости от браузера пользователя и его версии.Веб-приложения, использующие непрозрачные или локальные схемы URI для загрузки контента, обычно полностью удаляют заголовок
Refererиз всех исходящих вызовов в браузере или компоненте WebView, выполняющем отрисовку. Это может привести к сбою запросов, использующих ключи API с ограничениями для сайтов.Дополнительную информацию можно найти в статье Как разместить браузерные приложения на сервере.
Инструкции по устранению неполадок для приложений на основе браузера и WebView:
Для Maps JavaScript API сведения об авторизации приложения можно найти в консоли отладки браузера.
Редкие схемы URI поддерживаются частично. Если части вашего приложения не работают с экзотической схемой URI даже после авторизации необходимого реферера, вам, скорее всего, потребуется разместить приложение удаленно на сервере и загрузить его по протоколу HTTPS (или HTTP).
Если вам нужна помощь с экзотическими схемами URI, обратитесь в службу поддержки.
Другие API платформы Google Карт обычно возвращают URL перехода, который нужно авторизовать, в ответе об ошибке API, если клиент отправил эту информацию с отклоненным запросом.
Экзотические схемы URI не поддерживаются.
- Приложения для Android
Используйте Android Debug Bridge (adb) или logcat.
- Приложения для iOS
Подробнее о том, как просматривать сообщения в журнале…
Приложения, напрямую вызывающие веб-сервисы
Для приложений, которые обращаются к конечным точкам HTTPS REST API или gRPC платформы Google Карт напрямую, без использования клиентского SDK платформы Google Карт, см. информацию ниже.
- Приложения для Android и iOS
Если ваше приложение для Android или iOS вызывает сервисы платформы Google Карт напрямую, не используя ни один из доступных клиентских SDK платформы Google Карт, ознакомьтесь с советами по устранению неполадок в разделах Приложения для Android и Приложения для iOS, а также с текущими рекомендациями по безопасности для мобильных устройств в разделе Защита вызовов веб-сервисов на стороне клиента.
Если ваше приложение регистрирует ответы об ошибках Maps Platform API, приведенные выше инструкции для клиентских SDK также могут оказаться полезными для устранения неполадок с аутентификацией.
- Серверные приложения
Для серверных приложений, использующих ключи API, лучше всего подходят ограничения по IP-адресам. Если вы применили к ключу ограничения по IP-адресу и ваш служебный журнал регистрирует ответы об ошибках Maps Platform API, проверьте системные журналы, чтобы получить дополнительную информацию. В ответе об ошибке будет указан IP-адрес сервера, который нужно авторизовать.
- Приложения на основе браузера или WebView
Maps Static API, Street View Static API и более новые API платформы Google Карт также поддерживают ограничения по URL перехода. Однако обратите внимание, что браузеры и компоненты WebView, скорее всего, будут ограничивать заголовок
RefererдоOriginдля перекрестных запросов и, возможно, вообще не будут его отправлять, например для локальных ресурсов или ресурсов, обслуживаемых по протоколам, отличным от HTTP или HTTPS.Если вы не можете использовать Maps JavaScript API в своем приложении и ограничения для сайтов не работают, прочитайте статью Как защитить вызовы веб-сервисов на стороне клиента. В ней рассказывается, как безопасно вызывать веб-сервисы платформы Google Карт из клиентского приложения в браузере.
Советы по проверке ограничений API
О том, как проверить обязательные ограничения API, читайте в разделе Как определить, какие API используют ваш ключ API.
Если вы не можете определить, какие ограничения нужно применить, выполните следующие действия:
- Запишите, какие ограничения действуют сейчас.
- Временно удалите их, пока вы анализируете проблему. Выполните инструкции из раздела Проверьте использование ключа API, чтобы посмотреть данные за прошлые периоды.
- При необходимости обратитесь в службу поддержки.
Удаляйте ненужные ключи API
Прежде, чем удалять ключ API, проверьте, не нужен ли он для работы ваших ресурсов. Если трафика нет, скорее всего, ключ можно удалить. Подробнее о том, как проверить использование ключа API…
Чтобы удалить ключ API, выполните следующие действия:
В консоли Google Cloud откройте страницу Google Maps Platform > Credentials (Платформа Google Карт > Учетные данные).
Выберите ключ API.
Нажмите кнопку Delete (Удалить) в верхней части страницы.
На странице Delete credential (Удаление учетных данных) выберите Delete (Удалить).
После удаления ключа API может пройти несколько минут, прежде чем изменение распространится в системе. Когда процесс завершится, трафик, использующий удаленный ключ API, будет отклоняться.
Будьте внимательны при ротации ключей API
При ротации создается новый ключ API, имеющий те же ограничения, что и старый. В течение этого времени система принимает и старый, и новый ключ, чтобы вы могли перевести приложения на новый ключ.
Прежде чем сменить ключ API:
Сначала попробуйте настроить ограничения для ключей API.
Если это невозможно сделать, потому что требуются конфликтующие типы ограничений для приложений, перейдите на использование нескольких ключей API с ограничениями. Вы сможете контролировать процесс и сроки перехода на новые ключи API.
Если вы не можете выполнить эти рекомендации, смените ключ API, чтобы прекратить несанкционированное использование. Вот как это сделать:
В консоли Google Cloud откройте страницу Google Maps Platform > Credentials (Платформа Google Карт > Учетные данные).
Откройте нужный ключ API.
В верхней части страницы нажмите Rotate key (Сменить ключ).
При необходимости измените название ключа API.
Нажмите Создать.
Обновите приложения, чтобы использовать новый ключ.
После того как вы обновите приложения, чтобы они использовали новый ключ, удалите старый ключ, нажав кнопку Удалить предыдущий ключ в разделе "Предыдущий ключ" на странице нового ключа API.
Перейдите на использование нескольких ключей API
Если у вас общий ключ API для нескольких приложений, но вы хотите начать использовать разные ключи, выполните следующие действия:
Определите, для каких приложений нужно создать новые ключи.
- Обновлять веб-приложения проще всего, так как вы контролируете весь код. Планируйте обновить ключи для всех веб-приложений.
- Изменять ключи в мобильных приложениях намного сложнее. Нужно, чтобы все пользователи обновили приложение, прежде чем вы перейдете на новые ключи.
Создайте новые ключи и задайте для них ограничения. Добавьте ограничения для приложений и как минимум одно ограничение API. Подробную информацию вы найдете в разделе Рекомендации.
Добавьте в приложения новые ключи. Для мобильных приложений это может занять несколько месяцев, пока все пользователи не обновят приложение до последней версии с новым ключом API.
Разделите клиентские и серверные сервисы в отдельные проекты
Если вам нужно вызывать сервисы платформы Google Карт как из серверных приложений, так и непосредственно из клиентских приложений, работающих на устройствах конечных пользователей, мы рекомендуем разделить использование между двумя отдельными проектами.
Этот подход позволяет применять соответствующие ограничения квот в минуту на пользователя для большинства сервисов платформы Google Карт в вашем клиентском проекте, помогая гарантировать, что все конечные пользователи получат свою справедливую долю от общей квоты проекта, не влияя друг на друга.
Однако, поскольку ограничения квоты на пользователя влияют как на клиентские, так и на серверные приложения, если вам также требуется высокая пропускная способность для серверных заданий, настройте отдельный проект для этого варианта использования с более высоким ограничением квоты на пользователя или без ограничений.
Отключите неиспользуемые сервисы
Не оставляйте неиспользуемые сервисы включенными в проекте, так как это может привести к злоупотреблениям, особенно если вы не ограничили все свои общедоступные ключи API. Рекомендуем включать сервисы в проекте только тогда, когда они нужны вашим приложениям.
Добавление ограничений API для ключа предотвращает его использование в сервисах, для которых он не был авторизован, но ограничения API применяются только к этому конкретному ключу. Отключите сервис на уровне проекта, чтобы предотвратить несанкционированное использование сервиса с любым ключом, связанным с проектом.
Использование клиентских SDK
При использовании клиентских SDK платформы Google Карт вы всегда сможете применить к ключу API нужные ограничения, чтобы защитить свой сервис.
Использование клиентских SDK также позволит вам внедрить более продвинутые механизмы безопасности, такие как Проверка приложений Firebase, в API платформы Google Карт, которые их поддерживают. Подробнее о том, как защитить ключ API с помощью Проверки приложений…
Если для вашей платформы нет клиентских SDK, прочитайте статью Как защитить вызовы веб-сервисов на стороне клиента.
Доступность клиентских SDK платформы Google Карт для разных платформ описана в разделе Рекомендуемые ограничения для приложений и API.
Защита Static Web API
Static Web API, например Maps Static API и Street View Static API, похожи на вызовы API веб-сервисов.
И те, и другие вызываются с помощью HTTPS REST API, а URL запроса к API обычно генерируется на сервере. Но вместо ответа JSON Static Web API создают изображения, которые можно встраивать в сгенерированный HTML-код. Кроме того, сервис платформы Google Карт вызывает, как правило, клиент конечного пользователя, а не сервер.
Используйте цифровую подпись
Мы рекомендуем в дополнение к ключу API всегда использовать цифровую подпись. Подумайте, сколько неподписанных запросов в день вы готовы разрешить и измените квоты неподписанных запросов.
Также ознакомьтесь с руководством по цифровой подписи.
Защитите секрет для подписания
Чтобы защитить Static Web API, не встраивайте секреты для подписания API непосредственно в код или дерево кода и не раскрывайте их в приложениях на стороне клиента. Следуйте рекомендациям о том, как защитить секрет:
Создавайте подписанные URL запросов Maps Static API и Street View Static API на стороне сервера при показе веб-страницы или в ответ на запрос от мобильного приложения.
Для статического веб-контента можно использовать виджет Sign a URL now (Подписать URL сейчас) в Cloud Console на странице Google Maps Platform > Credentials (Платформа Google Карт > Учетные данные).
Для динамического веб-контента ознакомьтесь с доступными примерами кода для подписания URL-запросов.
Храните секреты для подписания вне исходного кода и дерева кода приложения. Если вы добавите секреты для подписания или другую конфиденциальную информацию в переменные среды или включите файлы, которые хранятся отдельно, а потом предоставите кому-либо доступ к коду, секреты для подписания не будут включены в эти файлы. Если вы храните секреты для подписания или другую конфиденциальную информацию в файлах, не добавляйте их в дерево исходного кода приложения, иначе эта информация может оказаться в системе управления кодом. Это особенно важно, если вы используете общедоступную систему управления кодом, например GitHub.
Как защитить ключи API веб-сервисов
Чтобы узнать, как безопасно использовать API и сервисы платформы Google Карт в клиентских приложениях, ознакомьтесь со статьями Использование клиентских SDK и Защита вызовов веб-сервисов на стороне клиента.
Не храните ключи API в исходном коде или дереве кода приложения. Если вы добавите ключи API или другую информацию в переменные среды или включите файлы, которые хранятся отдельно, а потом предоставите кому-либо доступ к коду, ключи API не будут включены в эти файлы. Это особенно важно, если вы используете общедоступную систему управления кодом, например GitHub.
Чтобы защитить ключ API веб-сервиса от случайного использования, Google рекомендует применять ограничения API к любому ключу, используемому для платформы Google Карт. Кроме того, применение ограничений по IP-адресам к ключу веб-сервиса поможет защитить его от несанкционированного использования с других исходных IP-адресов, даже если ключ случайно попадет в чужие руки.
Как использовать OAuth для серверных приложений
OAuth 2.0 – это открытый стандарт делегирования доступа.
Протокол OAuth 2.0 поддерживает сценарии, в которых конечный пользователь разрешает приложению доступ к своим персональным данным.Однако в случае с Платформой Google Карт разработчик использует временные токены доступа, чтобы разрешить приложению вызывать API от имени сервисного аккаунта облачного проекта Google Cloud с разрешениями сервисного аккаунта.
Поскольку сервисный аккаунт может иметь очень широкие разрешения, для авторизации вызовов между серверами (доверенными серверными приложениями разработчика и серверами платформы Google Карт) рекомендуется использовать OAuth 2.0.
Для клиентских приложений, работающих на устройствах конечных пользователей, рекомендуются другие способы аутентификации, например ключи API.
Если вы хотите использовать OAuth 2.0 для авторизации трафика между серверами, найдите соответствующий раздел в документации по API.
Например, прочитайте раздел, посвященный OAuth, для Address Validation API.
Безопасные вызовы веб-сервисов на стороне клиента
Если клиентские SDK не доступны, ознакомьтесь с рекомендациями ниже.
Используйте прокси-сервер
Использование защищенного прокси-сервера обеспечивает надежный источник для взаимодействия с конечной точкой веб-сервиса платформы Google Карт из клиентского приложения, не раскрывая ключ API, секрет подписи или сервисный аккаунт Google Cloud неавторизованным пользователям.
Основные моменты:
Создавайте запросы к платформе Google Карт на прокси-сервере. Не позволяйте клиентам перенаправлять необязательные вызовы API через прокси.
Выполняйте постобработку ответов платформы Google Карт на прокси-сервере. Отфильтровывайте данные, которые не нужны клиенту.
Подробнее о том, как использовать прокси-серверы с клиентскими библиотеками Google Data API…
Безопасные прямые вызовы мобильных веб-сервисов
Если вы не можете настроить защищенный прокси-сервер для клиентского приложения, защитите его, выполнив следующие действия:
Используйте HTTP-заголовки:
Android Используйте HTTP-заголовки
X-Android-PackageиX-Android-Cert.iOS Используйте HTTP-заголовок
X-Ios-Bundle-Identifier.
Добавьте соответствующие ограничения для приложений в ключ Android или iOS.
Прежде чем отправлять вызовы напрямую из мобильного приложения в веб-сервис REST API платформы Google Карт, убедитесь, что запросы с неправильными идентификаторами приложений Android или iOS отклоняются.
Если ограничения для приложений Android и iOS не поддерживаются на тестируемой конечной точке, Google настоятельно рекомендует использовать защищенный прокси-сервер между мобильными клиентами и конечной точкой веб-сервиса платформы Google Карт.
Советы по работе с приложениями для Android
Прежде чем интегрировать приложение для Android с сервисами платформы Google Карт, убедитесь, что идентификатор приложения (также называемый названием пакета) отформатирован правильно. Подробную информацию можно найти в статье Настройка модуля приложения в документации Android.
Чтобы передать
X-Android-Packageнепосредственно из приложения, найдите его программно с помощьюContext.getPackageName().Чтобы передавать параметр
X-Android-Certнепосредственно из приложений, рассчитайте цифровой отпечаток SHA-1 сертификатов подписи приложений, доступных черезPackageInfo.signingInfo.Если вы авторизуете приложение для Android с помощью консоли Google Cloud, обратите внимание, что в интерфейсе цифровой отпечаток SHA-1 должен быть строкой, разделенной двоеточиями, например
00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33. Однако инструментgcloudи API ключей API ожидают шестнадцатеричную строку без разделителей.
Советы для приложений iOS
Прежде чем интегрировать приложение iOS с сервисами платформы Google Карт, убедитесь, что идентификатор пакета отформатирован правильно.
При авторизации приложения iOS в заголовке
X-Ios-Bundle-Identifierобычно нужно передавать идентификатор пакета основного пакета.
Дополнительную информацию можно найти в статьях Управление ключами API и Использование ключей API для доступа к API.
Разместите приложения на основе браузера на сервере
Фреймворки, такие как Apache Cordova, позволяют создавать мультиплатформенные гибридные приложения, работающие в компоненте WebView. Однако ограничения для сайтов могут работать некорректно, если ваше веб-приложение не загружается по протоколу HTTP или HTTPS с сайта, который вы контролируете и авторизовали.
Встроенные ресурсы, загруженные локально из гибридного приложения или доступные по URL локального файла, во многих случаях не позволяют использовать авторизацию на основе URL перехода, поскольку браузерный движок, на котором работает компонент webview, не отправляет заголовок Referer. Чтобы избежать этого, размещайте веб-приложения на стороне сервера, а не клиента.
Для мобильных приложений вместо веб-SDK можно использовать нативные SDK платформы Google Карт для Android и iOS.
Как защитить ключ API с помощью Проверки приложений
Некоторые SDK и API Карт можно интегрировать с Firebase App Check. Проверка приложений защищает вызовы платформы Google Карт из вашего приложения, блокируя трафик, поступающий из других источников. Для этого он проверяет наличие токена от поставщика аттестации. Интеграция приложений с App Check помогает защититься от вредоносных запросов, чтобы вам не приходилось платить за несанкционированные вызовы API.
Инструкции по интеграции Проверки приложений:
Что делать в случае несанкционированного использования ключа API
Если вы обнаружили несанкционированное использование ключа API, сделайте следующее:
Ограничьте ключи. Если вы используете один ключ API в нескольких приложениях, перейдите на несколько ключей, чтобы использовать отдельный ключ для каждого приложения. Подробная информация приведена в следующих разделах:
Если вы используете Places SDK или Maps JavaScript API, то можете защитить ключ API с помощью проверки приложений.
Заменять или ротировать ключи следует только в следующих случаях:
Вы обнаружили несанкционированное использование ключей, которые нельзя ограничить или которые уже ограничены, а Проверка приложений неприменима.
Вам необходимо как можно быстрее защитить ключ API, чтобы предотвратить несанкционированное использование, даже если это может повлиять на одобренный трафик из вашего приложения.
Прежде чем продолжить, прочитайте раздел Будьте внимательны при ротации ключей API.
Если проблема не устранена или вам требуется помощь, обратитесь в службу поддержки.
Рекомендуемые ограничения для приложений и API
Ниже приводятся рекомендуемые ограничения для приложений и API для всех API, SDK и сервисов платформы Google Карт.
Рекомендуемые ограничения API
Приведенные здесь рекомендации подходят для всех сервисов платформы Google Карт.
Ограничьте ключ API только теми API, для которых он используется. Действуют следующие исключения:
Если в приложении используется Places SDK для Android или Places SDK для iOS, авторизуйте Places API (New) или Places API в зависимости от используемых версий SDK. 1
Если в приложении используется Maps JavaScript API, всегда авторизуйте его для ключа.
Если вы используете любые из перечисленных ниже сервисов Maps JavaScript API, необходимо также авторизовать следующие API:
Сервис Ограничение API Сервис Directions (устаревший) Directions API (устаревший) Сервис Distance Matrix (устаревший) Distance Matrix API (устаревший) Сервис Elevation Elevation API Сервис Geocoding Geocoding API Класс Place, виджет автозаполнения мест (новый) и Place Autocomplete Data API Places API (новый)2 Библиотека мест, сервис Places и виджет автозаполнения мест Places API2
1 Подробную информацию можно найти в документации по Places SDK для Android и Places SDK для iOS.
2. Если вы не знаете, какую версию Places API нужно авторизовать, ознакомьтесь с документацией по Maps JavaScript API.
Ниже приведено несколько примеров.
Вы используете Maps SDK для Android и Places SDK для Android. Вам нужно указать в ограничениях Maps SDK для Android и Places API (New).
На вашем сайте используется сервис Elevation (Maps JavaScript API) и Maps Static API, поэтому вам нужно добавить ограничения для всех перечисленных API:
- Maps JavaScript API
- Elevation API
- Maps Static API
Рекомендуемые ограничения для приложений
Сайты
Для сайтов, использующих сервисы Maps JavaScript API, Maps Static API или Просмотр улиц Static API, а также для сайтов, которые вызывают сервисы платформы Google Карт напрямую через HTTPS REST API или gRPC, используйте ограничение для приложений Сайты.
1Для мобильных приложений рекомендуем использовать нативные Maps SDK для Android и Maps SDK для iOS.
2Для мобильных приложений рекомендуем использовать нативные Places SDK для Android и Places SDK для iOS.
3 Узнайте, как защитить Static Web API.
Сайты с Maps Embed API
За использование Maps Embed API плата не взимается, но мы рекомендуем ограничить все используемые ключи API, чтобы избежать злоупотреблений в других сервисах.
Совет. Создайте отдельный ключ API для Maps Embed API и ограничьте его только для этого API. Это позволяет надежно защитить ключ и предотвратить его несанкционированное использование в других сервисах Google. Чтобы полностью контролировать, где может использоваться ваш ключ Maps Embed API, Google рекомендует также применять ограничения для приложений Сайты.
Если вы не можете использовать для Maps Embed API отдельный ключ API, защитите существующий ключ с помощью ограничения для приложений Сайты.
Приложения и серверы, использующие веб-сервисы
Для серверов и клиентских приложений из доверенных корпоративных внутренних сетей, использующих веб-сервисы вместе с ключами API, используйте ограничение для приложений IP addresses.
Это подходит для приложений и серверов, использующих следующие API:
4Для мобильных приложений рекомендуем использовать Navigation SDK.
5. Для безопасного использования мобильных устройств используйте защищенный прокси-сервер.
6. Для клиентских приложений рекомендуется использовать встроенный сервис геолокации, предлагаемый платформой, например W3C Geolocation для веб-браузеров, LocationManager или Fused Location Provider API для Android или фреймворк Apple Core Location для iOS.
7Для мобильных приложений рекомендуем использовать нативные Places SDK для Android и Places SDK для iOS.
8 Для безопасного клиентского использования используйте защищенный прокси-сервер.
Приложения для Android
Для приложений Android следует задать ограничение для приложений Android apps. Это подходит для приложений, использующих следующие SDK:
Кроме того, для предотвращения случайного добавления ключей API в систему управления версиями можно использовать плагин Secrets Gradle, позволяющий внедрять секреты из локального файла, а не хранить их в манифесте Android.
Приложения для iOS
Для приложений iOS следует задать ограничение для приложений iOS apps. Это подходит для приложений и серверов, использующих следующие SDK:
Дополнительные сведения
- Управление ключами API
- Используйте ключи API для доступа к API
- Как оптимизировать использование платформы Google Карт с помощью квот (видео)
- Как создавать и ограничивать ключи API для платформы Google Карт (видео)
- Как задать ограничения для ключей API
- Как защитить ключи API при использовании Static Maps и API Просмотра улиц
- Рекомендации по работе с платформой Google Карт