在虚拟机中触发谷歌云SQL导出

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

tl;dr: 不能触发导出 gcloud sql export sql ... 在虚拟机上,尽管我认为我已经为它的服务账户设置了所有权限,但总是导致PERMISSION_DENIED。


整个问题其实听起来比较简单。我想在特定时间触发我的Google Cloud Compute VM中的Cloud SQL数据库的导出。

到目前为止,我所做的是

  1. 添加了... Cloud SQL Admin (只是为了测试)在IAM部分对虚拟机服务账户的权限。
  2. 创建并下载服务账户密钥,并使用 gcloud auth activate-service-account --key-file cert.json
  3. 运行以下命令。
gcloud sql export sql "${SQL_INSTANCE}" "gs://${BUCKET}/${FILENAME}" -d "${DATABASE}"

(这在我的个人账户上没有问题)


该命令导致以下错误。

ERROR.(gcloud.sql.export.sql)PERMISSION_DENIED:请求的认证范围不足。(gcloud.sql.export.sql) PERMISSION_DENIED: 请求的验证范围不足。

我还尝试了什么

我发现 本文来自谷歌 并使用了计算服务账户,而不是创建云功能服务账户。很遗憾,结果是一样的。

google-cloud-platform google-cloud-sql google-cloud-iam
1个回答
1
投票

你没有分配给服务帐户的角色,你认为你有。

您需要为服务帐户分配以下角色之一。

  • 角色所有者 (不建议)
  • 角色查看器 (不建议)
  • rolescloudsql.admin (不推荐,除非其他SQL操作需要)
  • rolescloudsql.editor (不推荐,除非其他SQL操作需要)
  • rolescloudsql.viewer (推荐)

转到Google Cloud Console -> Compute Engine.单击您的虚拟机实例。向下滚动并找到分配给您的虚拟机实例的服务帐户。复制服务帐户的电子邮件地址。

运行以下命令(在以下命令中用^替换Windows的\,并指定您的PROJECT ID(而不是PROJECT NAME)和服务帐户电子邮件地址)。

gcloud projects get-iam-policy <PROJECT_ID>  \
--flatten="bindings[].members" \
--format="table(bindings.role)" \
--filter="bindings.members:<COMPUTE_ENGINE_SERVICE_ACCOUNT>"

仔细检查你所需要的角色是否存在于输出中。

要列出你的项目以获得PROJECT ID。

gcloud projects list

注意:不要直接给服务账户分配权限。将权限分配给项目,将所需角色授予服务账户IAM成员。

gcloud projects add-iam-policy-binding <PROJECT_ID> \
  --member serviceAccount:<COMPUTE_ENGINE_SERVICE_ACCOUNT> \
  --role roles/cloudsql.viewer
© www.soinside.com 2019 - 2024. All rights reserved.