使用服务帐户导入Google Cloud SQL的权限

时间:2018-06-13 01:56:25

标签: google-cloud-platform google-cloud-storage google-cloud-sql user-permissions service-accounts

我已成功导出MySQL Export Guide之后的MySQL数据库。

现在,我试图在MySQL Import Guide之后导入MySQL数据库。

我已经检查了service_account_email我使用的权限,并且我允许 Admin SQL Admin Storage 权限。

我能够在本地使用此命令成功激活我的服务帐户:

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"
  }
}

我尝试过的其他事情

我也尝试使用我的SQL实例的service_account_email来自:

gcloud sql instances describe <instance_name>

但是,似乎有同样的错误。

问题

基于我给出的REST API JSON错误,我如何&#34;登录&#34;使用service_account_email因此我无法获得401 Error

4 个答案:

答案 0 :(得分:7)

问题与数据库实例服务帐户在创建的存储桶上写入权限有关。解决此问题的步骤

1)转到您的Cloud SQL实例并复制实例的服务帐户(Cloud SQL-> {instance name}-> OVERVIEW-> Service account)

2)复制服务帐户后,转到要转储的位置的Cloud Storage Bucket,然后对该帐户设置所需的权限(存储-> {bucket name}-> permissions-> add成员)。

答案 1 :(得分:3)

云SQL实例在不属于您的项目的Google服务帐户下运行。您将需要授予该用户对您要导入的Cloud Storage中的文件的权限。这是一个方便的dandy 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;

第一行获取服务帐户的电子邮件地址。 下一行为该服务帐户提供了对存储桶的读取权限。 最后一行赋予服务帐户对该文件的读取权限。

答案 2 :(得分:0)

执行一些研究并基于权限错误后,我发现这些步骤对您解决问题更有用:

为了更轻松地测试ACL和权限,您可以:

您可能需要授予其他IAM角色,例如&#39; roles / storage.admin&#39;如有问题的服务帐户,请参阅更多信息here

答案 3 :(得分:0)

Google也有一些最严重的错误报告。如果收到此错误消息,也可能是您输入的PATH错误。就我而言,这是我的存储桶目录的路径。快点,我没有权限访问不存在的存储桶。技术上正确,但几乎没有用。