Разрешения на импорт Google Cloud SQL с использованием учетных записей служб - PullRequest
0 голосов
/ 13 июня 2018

Я экспортировал базу данных MySQL, следуя MySQL Export Guide , успешно.

Теперь я пытаюсь импортировать базу данных MySQL в соответствии с Руководством по импорту MySQL .

Я проверил разрешения для используемого service_account_email,и я разрешил права доступа Admin SQL и Хранилище администратора .

Я смог успешно активировать свою учетную запись службы, используя эту команду локально:

gcloud auth activate-service-account <service_account_email> --key-file=<service_account_json_file>  

После того, как я выполнил команду:

gcloud sql import sql <instance> <gstorage_file> --database=<db_name> --async

Я получил эту информацию:

{
  "error": {
    "errors": Array[1][
      {
        "domain": "global",
        "reason": "required",
        "message": "Login Required",
        "locationType": "header",
        "location": "Authorization"
      }
    ],
    "code": 401,
    "message": "Login Required"
  }
}

Другие вещи, которые я пробовал

Я также попытался использовать service_account_email моего экземпляра SQL, полученного из:

gcloud sql instances describe <instance_name>

Но, похоже, ошибка та же.

Вопрос

На основании полученной мной ошибки JSON API REST, как мне «войти», используяservice_account_email, чтобы я не получил 401 Error?

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

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

1) Перейдите в свой экземпляр Cloud SQL и скопируйте учетную запись службы экземпляра (Cloud SQL -> {имя экземпляра} -> ОБЗОР-> учетная запись службы)

2)После копирования учетной записи службы перейдите в корзину хранения облачных ресурсов, куда вы хотите создать дамп, и установите для нее необходимые разрешения (Хранилище -> {имя корзины} -> разрешения-> добавить участника).

0 голосов
/ 14 января 2019

Облачный экземпляр SQL работает под учетной записью службы Google, которая не является частью вашего проекта.Вам нужно будет предоставить этому пользователю права доступа к файлу в облачном хранилище, которое вы хотите импортировать.Вот удобный фрагмент кода денди bash, который сделает это.

SA_NAME=$(gcloud sql instances describe YOUR_DB_INSTANCE_NAME --project=YOUR_PROJECT_ID --format="value(serviceAccountEmailAddress)")
gsutil acl ch -u ${SA_NAME}:R gs://YOUR_BUCKET_NAME;
gsutil acl ch -u ${SA_NAME}:R gs://${YOUR_BUCKET_NAME}/whateverDirectory/fileToImport.sql;

Первая строка получает адрес электронной почты учетной записи службы.Следующая строка дает этой учетной записи разрешения на чтение для корзины.В последней строке указываются права доступа к файлу учетной записи службы.

0 голосов
/ 14 июня 2018

После проведения некоторых исследований и на основе ошибки разрешения я считаю, что для вас более полезны следующие шаги для устранения проблемы:

Чтобы упростить тестирование ACL-списков и разрешений, вы можете:

. Возможно, вам потребуется предоставить дополнительную роль IAM, например 'role / storage.admin', дляучетная запись службы, см. дополнительную информацию здесь .

...