【发布时间】:2025-11-29 11:30:01
【问题描述】:
我正在尝试配置构建 maven springboot 项目然后部署到云运行的云构建触发器。当我没有指定要连接的云 sql 实例时,我遇到了一个问题,但是当我添加 "--set-cloudsql-instances", "${_DATABASE_CONNECTION_NAME}" 作为参数之一时,它会在云构建中引发错误,如下所示:
Step #1: ERROR: (gcloud.beta.run.deploy) PERMISSION_DENIED: The caller does not have permission
Finished Step #1
ERROR
ERROR: build step 1 "gcr.io/cloud-builders/gcloud" failed: exit status 1
以下是我的cloudbuild.yml
steps:
- name: 'gcr.io/kaniko-project/executor:latest'
args:
- --destination=gcr.io/$PROJECT_ID/${_IMAGE_NAME}
- --cache=true
- name: 'gcr.io/cloud-builders/gcloud'
args: [
"beta", "run",
"deploy", "${_SERVICE_NAME}-${_PROFILE}",
"--image", "gcr.io/${PROJECT_ID}/${_IMAGE_NAME}",
"--region", "${_REGION}",
"--platform", "managed",
"--set-cloudsql-instances", "${_DATABASE_CONNECTION_NAME}",
"--allow-unauthenticated",
"--set-env-vars", "SPRING_PROFILES_ACTIVE=${_SPRING_PROFILE},DATABASE_CONNECTION_NAME=${_DATABASE_CONNECTION_NAME},DATABASE_NAME=${_DATABASE_NAME},DATABASE_USERNAME=${_DATABASE_USERNAME},DATABASE_PASSWORD=${_DATABASE_PASSWORD},MINIO_ACCESS_KEY=${_MINIO_ACCESS_KEY},MINIO_SECRET_KEY=${_MINIO_SECRET_KEY},MINIO_HOSTNAME=${_MINIO_HOSTNAME},MINIO_PORT=${_MINIO_PORT}"
]
images:
- gcr.io/${PROJECT_ID}/${_IMAGE_NAME}
我已经为服务帐户设置了角色/权限如下:
-
{PROJECT_ID}-compute@developer.gserviceaccount.com:编辑,Cloud Sql 客户端 -
<Cloud run service agent>:Cloud Run 服务代理,Cloud SQL 客户端 -
<Cloud Build SA>:Cloud Build SA,Cloud Run 管理员
My Cloud Run 服务也使用默认服务帐户作为其 SA
【问题讨论】:
-
手动运行命令是否有效?
-
@guillaumeblaquiere 我不确定本地,但使用云运行控制台页面进行部署,它可以工作
-
@guillaumeblaquiere 更新:我也可以在本地部署它,也可以从云运行控制台手动部署
-
@JohnHanley 1) 我应该授予什么云 sql 权限? (我试过 Cloud SQL Admin 还是不行) 2) 只是为了确保默认的云运行 SA 只有
Cloud Run Service Agent角色对吗? -
1) 您需要
cloudsql.instances.connect和cloudsql.instances.get角色roles/cloudsql.client(Cloud SQL 客户端)的权限。 2) 我不记得默认情况下将 Cloud Run 服务代理角色设置为什么。 3) 您没有说明您正在使用 Cloud SQL 做什么,因此您可能需要更多权限。从roles/cloudsql.editor开始,然后在一切正常后向下调整。查看文档以了解 Cloud SQL 权限:cloud.google.com/sql/docs/mysql/project-access-control
标签: google-cloud-platform google-cloud-sql google-cloud-build google-cloud-run