将 csv 从云存储导入云时,服务帐户访问被拒绝(权限问题?)sql

Access denied for service account (permission issue?) when importing a csv from cloud storage to cloud sql

我正在尝试使用我在云存储

中的 csv 填充 mysql 数据库

我正在使用 API Explorer 来执行具有以下请求正文的请求:

{
  "importContext": {
    "csvImportOptions": {
      "columns": [
        "col1",
        "col2",
        "col3"
      ],
      "table": "table_name"
    },
    "database": "db_name",
    "fileType": "CSV",
    "kind": "sql#importContext",
    "uri": "gs://some_bucket/somecsv.csv"
  }
}

当我点击执行按钮时,我收到了 200 响应,正文如下

{
 "kind": "sql#operation",
 "selfLink": "https://www.googleapis.com/sql/v1beta4/projects/somelink",
 "targetProject": "some-project",
 "targetId": "some-tarjet",
 "targetLink": "https://www.googleapis.com/sql/v1beta4/projects/somelink",
 "name": "some-name",
 "operationType": "IMPORT",
 "status": "PENDING",
 "user": "myuser@mydomain.com",
 "insertTime": "somedate",
 "importContext": {
  ...
 }
}

但是如果我转到 google 控制台中的详细实例页面,我会看到此消息:

gs://link-to-csv: Access denied for account oosyrcl32gnzypxg4uhqw54uab@somename.iam.gserviceaccount.com (permission issue?)

我使用在 csv 所在的云存储中创建存储桶的同一帐户进行身份验证,这也是使用 python sdk 进行的。

您正在尝试从您的存储桶导入到您的云 SQL 实例,但是,该导入将由一个服务帐户进行,特别是一个,可以在“服务帐户”部分,同时查看您的 Cloud SQL 实例的详细信息。

可能是 CloudSQL 服务帐户没有适当的权限来访问包含要导入的数据的 Cloud Storage 存储桶。

为了在 SQL 实例和存储桶之间成功导入,应首先设置适当的权限。您应该给服务帐户 "oosyrcl32gnzypxg4uhqw54uab@speckle-umbrella-27.iam.gserviceaccount.com" Storage Object Viewer role.

  1. 转到:https://console.cloud.google.com/iam-admin/iam
  2. 单击“添加”以添加新成员。
  3. 将错误消息中显示的 gserviceaccount.com 电子邮件地址粘贴到新成员字段中。
  4. 添加 2 个角色:
    1. 云SQL查看器
    2. 存储对象管理员
  5. 点击保存。