繁体   English   中英

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

[英]Permissions For Google Cloud SQL Import Using Service Accounts

我已经按照MySQL 导出指南成功导出了 MySQL 数据库。

现在,我正在尝试按照MySQL 导入指南导入 MySQL 数据库。

我已经检查了我正在使用的service_account_email的权限,并且我已经允许Admin SQLAdmin 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 错误,如何使用service_account_email “登录”,这样我就不会收到401 Error

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

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

2) 复制服务帐户后,转到要转储的 Cloud Storage Bucket 并为该帐户设置所需的权限 (Storage->{bucket name}->permissions->add member)。

云 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;

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

在进行了一些研究之后,并根据权限错误,这些是我认为对您解决问题更有用的步骤:

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

您可能需要向相关服务帐户授予额外的 IAM 角色,例如“roles/storage.admin”,请在此处查看更多信息。

谷歌也有一些最糟糕的错误报告。 如果您收到此错误消息,也可能是您输入的 PATH 不正确。 就我而言,它是我的存储桶目录的路径。 算了吧,我无权访问不存在的存储桶。 技术上正确但几乎没有用。

根据谷歌文档

  • 描述您要导入到的实例:
    gcloud sql instances describe INSTANCE_NAME
  • 复制 serviceAccountEmailAddress 字段。
  • 使用 gsutil iam 将 storage.objectAdmin IAM 角色授予存储桶的服务账户。
    gsutil iam ch serviceAccount:SERVICE-ACCOUNT:objectAdmin gs://BUCKET-NAME
  • 然后导入数据库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM