Google Cloud SQL 导入 - 错误:HTTPError 403:客户端无权发出此请求

问题描述 投票:0回答:6

我尝试使用以下命令导入存储在云存储中的数据库:

gcloud sql instances import instance-name gs://connect-to-the-cloud-sql.appspot.com/my-cloud-sql-instance-backup

但是,我得到错误:

ERROR: (gcloud.sql.instances.import) HTTPError 403: The client is not authorized to make this request.

我已经登录使用:

gcloud auth login
google-cloud-platform google-cloud-storage google-cloud-sql
6个回答
10
投票

确保实例名称是正确的。我有同样的错误,一旦我更正了实例名称,它就消失了。


6
投票

我有这个问题,我的实例名称是正确的。原来我在错误的 GCP 项目中。确保切换到正确的 [target] 项目或使用项目参数:

gcloud sql instances export my-cloud-sql-instance gs://connect-to-the-cloud-sql.appspot.com/my-cloud-sql-instance-backup --project=<your target project>

4
投票

就我而言,这是因为云 sql 实例服务帐户对我尝试从中导入的存储桶没有正确的权限。

来自文档

  1. 描述您要导入的实例:

    gcloud sql instances describe [INSTANCE_NAME]
    
  2. 复制

    serviceAccountEmailAddress
    字段。

  3. 使用

    gsutil iam
    legacyBucketWriter
    objectViewer
    Cloud IAM 角色授予存储桶的服务帐户。

  4. 导入数据库:

    gcloud sql import sql [INSTANCE_NAME] gs://[BUCKET_NAME]/[IMPORT_FILE_NAME] \
                            --database=[DATABASE_NAME]
    

1
投票

这听起来可能太明显了,但您的服务帐户确实可能缺少导入数据的访问权限。检查它是否在 IAM 和管理页面上安装了正确的

cloudsql.instances.import
策略。


0
投票

新的一步一步:

gcloud sql instances describe name-instance | grep serviceAccountEmailAddress

# output: serviceAccount:[email protected]

gsutil iam ch serviceAccount:[email protected]:roles/storage.legacyBucketWriter gs://bucket-destino
gsutil iam ch serviceAccount:[email protected]:roles/storage.objectViewer gs://bucket-destino

# -----------en vm linux--gcp------------------------------------------------------------------------------------
gcloud init (id-project-bucket-destino hacer default en vm proyecto de bucket donde se guardara info)
gcloud config set project id-project-bucket-destino

gcloud sql export sql --project=id-project-instance name-instance gs://bucket-destino/sqldump.sql \
--database=name-database \
--offload

# ----------cron job in linux------------------------------------------------------------------------------------
#!/bin/sh

#make directory in Cloud storage

datedirect=$(date '+%d-%m-%Y')

echo $datedirect

touch file5

gsutil cp -r ./file5 gs://bucket-destino/$datedirect/

gcloud config set project id-project-bucket-destino

gcloud sql export sql --project=id-project-instance name-instance gs://bucket-destino/sqldump.sql \
--database=name-database \
--offload

0
投票

在 Cloud Console 中转到 IAM & Admin > IAM,找到您正在使用的服务帐户,并编辑其角色以添加 Cloud SQL Client 和 Cloud SQL Admin。如果找不到服务帐户,请使用授予访问权限创建它,并具有上述角色。

@inostia 在另一个答案中提到使用

gcloud sql instances describe [INSTANCE_NAME]
serviceAccountEmailAddress
获取服务帐户。这可能对你有用,但如果你在冒充,e.g.

gcloud auth application-default login --impersonate-service-account [email protected]

然后你想使用模拟服务帐户。

© www.soinside.com 2019 - 2024. All rights reserved.