GCP:在计算虚拟机内执行 cloud_sql_proxy 的权限被拒绝

GCP:在计算虚拟机内执行 cloud_sql_proxy 的权限被拒绝

我已经创建了我的第一个计算实例容器优化操作系统以及以下范围:

Cloud SQL       Enabled
Compute Engine      Read Write
Service Control     Enabled
Service Management      Read Only
Stackdriver Logging API     Write Only
Stackdriver Monitoring API      Write Only
Stackdriver Trace       Write Only
Storage     Read Only

我需要安装 Cloud SQL Proxy 并遵循以下文档:https://cloud.google.com/sql/docs/postgres/connect-compute-engine#gce-connect-proxy

我可以毫无问题地使用 SSH,但无法执行命令:

leszek@backend-app ~ $ wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
2018-04-10 19:52:00 (211 MB/s) - 'cloud_sql_proxy' saved [7505002/7505002]
leszek@backend-app ~ $ chmod +x cloud_sql_proxy
leszek@backend-app ~ $ ./cloud_sql_proxy -instances=my-instance=tcp:0.0.0.0:54
32
    -bash: ./cloud_sql_proxy: Permission denied
lgr@backend-app ~ $ sudo ./cloud_sql_proxy -instances=my-instance=tcp:0.0.0.0:5432
sudo: unable to execute ./cloud_sql_proxy: Permission denied

我遗漏了什么明显的东西以至于我甚至无法启动 sql_proxy 命令?

答案1

在容器操作系统上部署 CloudSQL 代理的最佳选择是使用官方 CloudSQL 容器和链接网络。

docker run -d -v /cloudsql:/cloudsql \
  -v <PATH_TO_KEY_FILE>:/config \
  -p 127.0.0.1:5432:5432 \
  gcr.io/cloudsql-docker/gce-proxy:1.11 /cloud_sql_proxy \
  -instances=<INSTANCE_CONNECTION_NAME>=tcp:0.0.0.0:5432 -credential_file=/config

看:https://cloud.google.com/sql/docs/postgres/connect-docker

答案2

Container-Optimized OS 使用“noexec”标志挂载大部分文件系统。可以通过运行以下命令来查看:

mount | grep noexec

“noexec”选项不允许直接执行已挂载文件系统上的任何二进制文件。这是因为 COS 上默认的安全锁定实现。

但是,Container-Optimized OS 文件系统中有一些可写位置(例如 /var/lib/docker 和 /var/lib/cloud)。这些位置被挂载为“可执行文件”(即,它们在没有 noexec 挂载标志的情况下挂载)。

按照文章中链接的指南,最好使用 Debian 或 Red Hat 实例。但是,如果您想在 Google Container-Optimized OS 实例上执行二进制文件 (cloud_sql_proxy),您可以尝试将文件复制到可写位置(例如 /var/lib/docker):

sudo cp cloud_sql_proxy /var/lib/docker

尝试在那里执行该文件:

sudo ./cloud_sql_proxy

这应该可以帮助你摆脱permissions denied错误。

此时,假设实例已应用正确的范围,您将收到如下输出:

2018/04/23 08:48:21 must specify -projects, -fuse, or -instances

如果实例没有设置正确的范围,您将收到一条建议消息service account is not configured with sufficient permissions

如果是这种情况,您可以通过停止和编辑实例并将范围设置Cloud SQL为启用来解决此错误。

相关内容