Вопрос или проблема
Как я могу установить автоматические учетные данные приложения для использования краткосрочных учетных данных для учетной записи службы GCP?
Обоснование
Я хочу аутентифицировать внешнюю службу непрерывной доставки в качестве учетной записи службы GCP. Документация GCP рекомендует использовать краткосрочные учетные данные для повышения безопасности:
Самый безопасный способ аутентифицироваться как учетная запись службы — это получить краткосрочные учетные данные для учетной записи службы в виде токена доступа OAuth 2.0.
Цель состоит в том, чтобы использовать краткосрочный токен для установки автоматических учетных данных приложения через переменную окружения GOOGLE_APPLICATION_CREDENTIALS
. Однако я не знаю, как преобразовать токен доступа в JSON-файл, который будет работать в качестве автоматических учетных данных приложения.
Я хочу использовать автоматические учетные данные приложения, поскольку бинарный файл вызывает множество клиентов GCP (хранение, GKE, менеджер секретов). Нет простого способа вручную установить учетные данные для каждого клиента.
Что я пробовал
- Сгенерировать краткосрочный токен.
gcloud auth print-access-token --impersonate-service-account=$SA@$PROJ.iam.gserviceaccount.com
-
Передать токен в службу непрерывной доставки с помощью переменной окружения
$MY_TOKEN
. -
Записать токен во временный JSON-файл
/tmp/sa-creds.json
в формате{"token": "$MY_TOKEN"}
. -
Установить
GOOGLE_APPLICATION_CREDENTIALS
на/tmp/sa-creds.json
, чтобы клиентские библиотеки автоматически использовали учетные данные.
Это не удается (в некоторой степени ожидаемо), поскольку формат не соответствует формату автоматических учетных данных приложения.
Связанные вопросы
- https://stackoverflow.com/a/56497979/30900 Описывает, что автоматические учетные данные приложения не являются учетными данными, а способом их расположения. С этой информацией маловероятно, что существует способ использовать токен в качестве автоматических учетных данных приложения.
Ответ или решение
Для использования краткосрочных учетных данных сервиса в качестве учетных данных по умолчанию приложения в Google Cloud Platform (GCP) существуют определенные процедуры, которые необходимо соблюдать для обеспечения безопасности и эффективного доступа к ресурсам GCP.
Понимание учетных данных по умолчанию приложения
Согласно документации GCP, учетные данные по умолчанию приложения (ADC) представляют собой механизм, который позволяет разработчикам и системам аутентифицироваться без необходимости вручную управлять учетными данными для каждого клиента GCP. Это особенно полезно для приложений, которые активно используют различные службы GCP, такие как Google Cloud Storage, Google Kubernetes Engine и Secret Manager.
Способы аутентификации с помощью краткосрочных учетных данных
Как указано в документации по краткосрочным учетным данным сервиса, наиболее безопасный способ аутентификации как сервисного аккаунта — это получение краткосрочных учетных данных в виде токена доступа OAuth 2.0. Этот токен обеспечивает временный, но безопасный доступ к ресурсам GCP.
Шаги по настройке краткосрочных учетных данных в качестве учетных данных по умолчанию приложения
-
Генерация краткосрочного токена доступа: Используйте следующую команду для получения токена, подменяя
$SA
на имя вашего сервисного аккаунта и$PROJ
на проект GCP:gcloud auth print-access-token --impersonate-service-account=$SA@$PROJ.iam.gserviceaccount.com
-
Передача токена в ваше приложение: Полученный токен доступа можно передать в ваше приложение или внешнюю службу непрерывной доставки с помощью переменной окружения, например,
$MY_TOKEN
. -
Настройка учетных данных: Однако, прежде чем продолжить, важно отметить, что токен доступа не может быть напрямую использован как учетные данные по умолчанию приложения. Вместо этого, вы должны добавить токен в контекст запроса, что обеспечит аутентификацию при вызове API.
Использование токена доступа в запросах к API
Вместо того чтобы пытаться создать JSON файл с токеном, вы можете использовать библиотеку клиентских библиотек GCP, которая позволяет передавать токен напрямую при выполнении запросов. Пример на Python может выглядеть следующим образом:
from google.auth import impersonated_credentials
from google.auth.transport import requests
from google.oauth2 import service_account
# Получение токена
my_token = os.getenv('MY_TOKEN')
# Используем токен для создания учетных данных
credentials = impersonated_credentials.Credentials(my_token)
# Теперь вы можете использовать credentials для взаимодействия с клиентами GCP
Заключение
В заключение, использование краткосрочных учетных данных для аутентификации в GCP требует правильного понимания механизма учетных данных по умолчанию приложения. Вместо того чтобы пытаться создать JSON файл с токеном доступа, рекомендуется использовать токен напрямую с соответствующими библиотеками Google Cloud, что позволит избежать ненужных ошибок и повысить безопасность вашего приложения. Это не только упростит управление учетными данными, но и обеспечит надежную аутентификацию при взаимодействии с сервисами GCP.