Создание сервисного аккаунта (Service account)
Простое, но исчерпывающее руководство по созданию сервисного аккаунта в Google Cloud.
Контроль доступа к Google Cloud API включает аутентификацию, авторизацию и аудит. Аутентификация определяет, кто вы, авторизация определяет, что вы можете делать, а аудит регистрирует ваши действия.
API-интерфейсы Google Cloud поддерживают два типа участников:
- учетные записи пользователей (User accounts) - управляются как учетные записи Google и представляют разработчика, администратора или любого другого человека, взаимодействующего с Google Cloud. Такие учетные записи предназначены для сценариев, когда вашему приложению требуется доступ к ресурсам от имени пользователя-реального человека;
- учетные записи служб (Service accounts) - управляются IAM (Identity and Access Management) и представляют пользователей, не являющихся людьми. Такие учетные записи предназначены для сценариев, в которых вашему приложению требуется доступ к ресурсам или выполнение действий происходит самостоятельно.
Учетная запись пользователя (User account)
Аутентификация от имени конечного пользователя происходит следующим образом: когда приложению требуется доступ к Google Cloud API от реального человека (пользователя), приложение инициирует протокол авторизации OAuth.
После того, как пользователь дает свое согласие, ваше приложение получает токен доступа, который позволяет вызывать Google Cloud API от имени пользователя.
API Google используют протокол OAuth 2.0 для аутентификации и авторизации.
OAuth - открытый протокол авторизации, который позволяет предоставить третьей стороне ограниченный доступ к защищенным ресурсам пользователя без необходимости передавать ей логин и пароль. Поэтому:
- у пользователя больше оснований доверять приложению, поскольку пользователь может быть уверен, что несанкционированный доступ к его личным данным невозможен. Не владея логином и паролем пользователя, приложение сможет выполнять только те действия с данными, которые разрешил пользователь, и никакие другие.
- при разработке приложения не нужно заботиться об обеспечении конфиденциальности логина и пароля пользователя. Логин и пароль не передаются приложению, а следовательно, они не могут попасть в руки злоумышленников.
С такой авторизацией вы сталкивались, когда разрешали доступ к своей учетной записи для дополнений Google Таблиц, например, Adveronix, Google Analytics, SynWith и другие:
В этот момент в браузере вам открывалось отдельное окно с запросом на разрешение тех или иных прав к вашему аккаунту Google для приложения. Чтобы продолжать дальше использовать сервис, приложению необходимо дать доступ с помощью кнопки Разрешить.
Или когда настраивали интеграции в любом стороннем сервисе, предоставляя доступы к своим рекламным кабинетами, счетчикам аналитики, CRM-данным и т.д. Сервисы коллтрекинга, сквозной аналитики, биддеры, онлайн-коннекторы – все они используют данные авторизации.
Для наглядной демонстрации использования OAuth 2.0 Google разработал OAuth 2.0 Playground - инструмент для разработчиков, упрощающий экспериментирование с протоколом OAuth 2.0 и API различных сервисов. Вы можете перейти по ссылке, выбрать нужный сервис Google, области видимости (scopes), затем получить токен доступа и попробовать сформировать запрос.
Аутентификация от имени конечного пользователя (user accounts) – один из способов авторизации, который распространен для большинства проектов, где необходим доступ к приложению без запрашивания логина и пароля пользователя.
Для его реализации на сайте вам:
- понадобится идентификатор клиента OAuth 2.0, который ваше приложение использует при запросе токена доступа OAuth 2.0. Подробнее читайте в официальной документации Google;
- перед использованием идентификатора клиента OAuth 2.0 необходимо настроить экран согласия OAuth.
Учетная запись службы (Service account)
Представьте, что вы разработчик, работающий удаленно. Каждый день вы начинаете с чашечки вкусного кофе и проверки e-mail. Вы вводите имя пользователя и пароль для своей учетной записи электронной почты, и если ваши учетные данные для входа верны, вам предоставляется доступ к вашему почтовому ящику. Таким образом, вы, по сути, сделали запрос к API вашей службы электронной почты и были авторизованы с учетными данными для входа, которые связаны с вашей учетной записью пользователя.
Этот процесс можно применить к множеству сценариев в современных веб-приложениях. Учетная запись пользователя (user account) представляет конкретного человека и используется для авторизации и аутентификации пользователя в разных службах.
Но что, если вы хотите аутентифицировать приложение для использования облачных сервисов, в частности сервисов Google Cloud? В конце концов, ваше приложение должно иметь возможность выполнять запросы API от вашего имени. В этом случае вам нужна учетная запись службы.
Учетная запись службы (service account) — это особый тип учетной записи Google, предназначенный для представления пользователя, не являющегося человеком, которому необходимо пройти аутентификацию и авторизоваться для доступа к данным в API Google.
Учетные записи служб аналогичны учетным записям пользователей тем, что их можно идентифицировать по уникальному адресу электронной почты и они используются для авторизованных вызовов API, но есть некоторые важные особенности, которые отличают их друг от друга:
- учетные записи пользователей авторизуют людей, учетные записи служб авторизуют приложения;
- учетные записи служб не имеют паролей. Таким образом, кто-то не может войти в систему, используя учетную запись службы через браузер;
- сервисные аккаунты не являются членами вашего домена Google Workspace (ранее G-Suite). Это означает, что ресурсы, совместно используемые с вашим доменом Google Workspace, не используются совместно с сервисными аккаунтами.
С помощью сервисного аккаунта вы можете работать с API Google Analytics 4 (Data API), выполняя запросы к своему ресурсу GA4. Google имеет клиентские библиотеки для работы с API Google Analytics для разных языков программирования, в том числе и для Python. В других статьях своего блога я подробно описывал о том, что такое Data API, как выполнять свой первой запрос с помощью Python, а также знакомил вас с практическими приемами выгрузки данных из стандартных отчетов Google Analytics 4. Обязательно прочитайте их:
- API Google Analytics 4 (Data API)
- Начало работы с Google Analytics Data API (GA4). Ваш первый запрос
- Google Analytics 4 и Python - практические приемы работы
- Исследование воронки Google Analytics 4 с помощью Python
- История квот для API данных в аккаунте Google Analytics 4
В некоторых из этих руководств рассказывается о быстром запуске работы с Data API, когда Google автоматически создает для нас сервисный аккаунт. Но как быть, если нам это нужно сделать самостоятельно? Давайте попробуем разобраться.
Создание сервисного аккаунта
После того, как вы создали проект в Google Cloud, перейдите в раздел IAM & Admin - Service Accounts:
Нажмите + Create Service Account:
Введите имя сервисного аккаунта (например: service-account):
Далее вы можете установить для сервисного аккаунта отдельные права доступа и роли. Однако это делать необязательно.
На следующем можно добавить e-mailы пользователей, которым будет разрешен доступ к этому сервисному аккаунту. И этот шаг является необязательным, поэтому его можно пропустить.
В завершение нажмите Done. Будет создан сервисный аккаунт. Вы увидите его в списке всех аккаунтов.
Напротив него нажмите на иконку с тремя точками и выберите Manage keys:
Затем создайте новый ключ: Add key – Create new key:
Укажите тип ключа JSON и нажмите Create:
После этого будет создан файл, который автоматически сохранится у вас локально на компьютере.
Файл на компьютере:
И его содержимое (можно открыть обычным блокнотом или программой типа Notepad++):
Теперь вы можете использовать этот ключ в связке с сервисным аккаунтом в своих проектах и задачах. Например, для работы с API Google Analytics 4. Вам останется только добавить сервисный аккаунт в свой GA4 через Ресурс - Управление доступом к ресурсу.