Запуск экспорта Google Cloud SQL в виртуальную машину - PullRequest
0 голосов
/ 06 мая 2020

tl; dr: Невозможно запустить экспорт с gcloud sql export sql ... на виртуальной машине, что всегда приводит к PERMISSION_DENIED, даже если я думаю, что я установил все разрешения для его учетной записи службы.


Вся проблема на самом деле кажется относительно простой. Я хочу инициировать экспорт моей базы данных Cloud SQL в мою виртуальную машину Google Cloud Compute в определенное время.

Что я сделал до сих пор:

  1. Добавлен Cloud SQL Admin ( просто для тестирования) разрешение на учетную запись службы виртуальных машин в разделе IAM.
  2. Создал и загрузил ключ учетной записи службы и использовал gcloud auth activate-service-account --key-file cert.json
  3. Выполните следующую команду:
gcloud sql export sql "${SQL_INSTANCE}" "gs://${BUCKET}/${FILENAME}" -d "${DATABASE}"

(это работает без проблем с моей личной учетной записью)


Команда привела к следующей ошибке:

ОШИБКА: (gcloud. sql .export. sql) PERMISSION_DENIED: запрос имеет недостаточные области аутентификации.

Что еще я пробовал

Я нашел эту статью из Google и использовал учетную запись службы вычислений вместо создания учетной записи службы облачных функций. Результат, к сожалению, тот же.

1 Ответ

1 голос
/ 06 мая 2020

У вас нет ролей, назначенных учетной записи службы, которая, по вашему мнению, у вас есть.

Вам нужна одна из следующих ролей, назначенных учетной записи службы:

  • роли / владелец ( Не рекомендуется )
  • ролей / зрителя ( Не рекомендуется )
  • ролей / облако sql .admin (Не рекомендуется, если не требуется для другие SQL операции)
  • ролей / облако sql .editor (не рекомендуется, если не требуется для других SQL операций)
  • ролей / облако sql .viewer (рекомендуется)

Go в Google Cloud Console -> Compute Engine. Щелкните свой экземпляр виртуальной машины. Прокрутите вниз и найдите учетную запись службы, назначенную вашему экземпляру виртуальной машины. Скопируйте адрес электронной почты учетной записи службы.

Выполните следующую команду (замените \ на ^ вместо Windows в следующей команде и укажите свой ИДЕНТИФИКАТОР ПРОЕКТА (не НАЗВАНИЕ ПРОЕКТА) и адрес электронной почты учетной записи службы):

gcloud projects get-iam-policy <PROJECT_ID>  \
--flatten="bindings[].members" \
--format="table(bindings.role)" \
--filter="bindings.members:<COMPUTE_ENGINE_SERVICE_ACCOUNT>"

Дважды проверьте, присутствуют ли в выходных данных требуемые роли.

Чтобы перечислить ваши проекты и получить ИДЕНТИФИКАТОР ПРОЕКТА:

gcloud projects list

Примечание: не назначать разрешения непосредственно учетной записи службы. Назначьте разрешения для проекта, предоставив требуемую роль члену IAM учетной записи службы.

gcloud projects add-iam-policy-binding <PROJECT_ID> \
  --member serviceAccount:<COMPUTE_ENGINE_SERVICE_ACCOUNT> \
  --role roles/cloudsql.viewer
...