Аутентификация автономного gsutil в контейнерах в Cloud ML Engine на Kubernetes с идентификацией рабочей нагрузки
Я запускаю образы контейнеров в Google Cloud AI Training (Cloud ML Engine)
Внутри этих контейнеров мне нужно использовать gsutil. В некоторых контейнерах есть файл gsutil. В этом случае я могу использовать его сразу, без каких-либо шагов аутентификации.
В некоторых контейнерах нет gsutil, поэтому я должен его установить. Проблема в том, что установленный gsutil не работает.
Когда я использую официальную cloud-sdk
образ, gsutil
работает без каких-либо шагов авторизации.
Когда я использую python:3.7
образ и установка gsutil
из PyPI не работает:
python -m pip install gsutil --quiet
gsutil cp a gs://b/c
ServiceException: 401 Анонимный вызывающий абонент не имеет доступа к storage.objects.get к...
Как я могу сделать так, чтобы автономный gsutil получал необходимые учетные данные?
Большинство руководств фокусируются на ручном вызове gcloud auth
, копируя URL-адрес и копируя токен обратно. Я ищу не это решение (которое следует автоматизировать). Я знаю, что автоматизированное решение возможно, поскольку на некоторых изображенияхgsutil
работает из коробки.
2 ответа
Это связано с тем, что этот pip install gsutil сам по себе не настраивает учетные данные, поэтому, как говорится в ошибке, это анонимный пользователь. Вы захотите настроить учетные данные для доступа к защищенным данным.
Поместите следующую строку в свой файл докера, и она должна работать:
RUN echo '[GoogleCompute]\nservice_account = default'> /etc/boto.cfg
Это настройка gsutil для использования учетной записи службы по умолчанию.
Идентификация рабочей нагрузки - лучший способ сделать то же самое.
Вы создаете связь между учетной записью службы Kubernetes и учетной записью облачной службы Google.
https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity