tl;dr: 不能触发导出 gcloud sql export sql ...
在虚拟机上,尽管我认为我已经为它的服务账户设置了所有权限,但总是导致PERMISSION_DENIED。
整个问题其实听起来比较简单。我想在特定时间触发我的Google Cloud Compute VM中的Cloud SQL数据库的导出。
Cloud SQL Admin
(只是为了测试)在IAM部分对虚拟机服务账户的权限。gcloud auth activate-service-account --key-file cert.json
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 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