【问题标题】:Google Cloud SQL import - HTTPError 403: Insufficient PermissionGoogle Cloud SQL 导入 - HTTPError 403:权限不足
【发布时间】:2025-12-14 20:00:01
【问题描述】:

我想使用 gcloud 导入工具将 mysql 转储文件导入 mysql 数据库实例,但出现错误:

ubuntu@machine:~/sql$ gcloud sql instances import sql-56-test-8ef0cb104575 gs://dbf/bt_ca_dev_tmp-2017-01-19.sql.gz
ERROR: (gcloud.sql.instances.import) HTTPError 403: Insufficient Permission

我缺少哪些确切的权限?我可以使用注册的服务帐户创建 sql 实例,但我无法导入数据?

【问题讨论】:

  • 听起来您需要提供某种登录。 HTTP/403 被拒绝访问。
  • 我遇到了这个错误,当我指定 --project 时它消失了

标签: google-cloud-sql


【解决方案1】:

这是您尝试使用的 Google Storage 存储分区中 Cloud SQL 服务帐号的权限问题。要解决此问题,您需要将 Storage Legacy Bucket ReaderStorage Legacy Object OwnerStorage Object Viewer 角色授予您从中获取的服务帐户电子邮件

gcloud sql instances describe <YOUR_DB_NAME> | grep serviceAccountEmailAddress

为此,请转到 Google Cloud Console 中的 Cloud Storage/您的存储桶,然后在 Permission 下将 serviceAccountEmailAddress 写入 ADD。最后,添加您需要的角色。

【讨论】:

    【解决方案2】:

    根据documentation,这应该可以解决问题。奇怪的是它需要写权限。这应该可以解决问题:

    gsutil iam ch serviceAccount:"${SERVICE_ACCOUNT}":roles/storage.legacyBucketWriter gs://${BUCKET_NAME}
    gsutil iam ch serviceAccount:"${SERVICE_ACCOUNT}":roles/storage.objectViewer gs://${BUCKET_NAME}
    

    【讨论】:

      【解决方案3】:

      您的权限有问题

      如果没有,请创建一个存储桶,运行

      `gsutil mb -p [PROJECT_NAME] -l [LOCATION_NAME] gs://[BUCKET_NAME]`
      

      描述您要从中导出的 sql 实例并复制 sa

      `gcloud sql instances describe [INSTANCE_NAME]`
      

      将服务帐号作为写入者添加到存储桶 ACL

      `gsutil acl ch -u [SERVICE_ACCOUNT_ADDRESS]:W gs://[BUCKET_NAME]`
      

      将服务帐号作为阅读器添加到导入文件中

      `gsutil acl ch -u [SERVICE_ACCOUNT_ADDRESS]:R gs://[BUCKET_NAME]/[IMPORT_FILE_NAME]`
      

      导入文件: gcloud sql import csv [INSTANCE_NAME] gs://[BUCKET_NAME]/[FILE_NAME] \ --database=[DATABASE_NAME] --table=[TABLE_NAME]

      【讨论】:

      • 我不得不递归地向我的存储桶中的数据库服务帐户授予读取权限。有没有办法像写权限一样在存储桶级别提供这个?
      • 为什么你需要给桶写权限呢?
      • @Pablo 我不知道为什么,但需要为您要导入的存储桶上的云 sql 实例服务帐户添加 legacyBucketWriter 权限:cloud.google.com/sql/docs/postgres/import-export/importing
      最近更新 更多