Назад | Перейти на главную страницу

GCP: отказано в разрешении на выполнение cloud_sql_proxy в вычислительной виртуальной машине

Я создал свой первый экземпляр Compute с оптимизированная для контейнеров ОС и в следующих областях:

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?

ОС, оптимизированная для контейнеров, монтирует большую часть файловой системы с флагом noexec. Это можно увидеть, запустив следующее:

mount | grep noexec

Параметр noexec не позволяет напрямую выполнять какие-либо двоичные файлы в смонтированной файловой системе. Это связано с реализацией блокировки безопасности по умолчанию на COS.

Однако в файловой системе ОС, оптимизированной для контейнеров, есть некоторые места с возможностью записи (например, / var / lib / docker и / var / lib / cloud). Эти места монтируются как «исполняемые файлы» (т.е. они монтируются без флага монтирования noexec).

Следуя руководству, приведенному в сообщении, вам лучше использовать экземпляры Debian или Red Hat. Однако, если вы хотите выполнить двоичный файл (cloud_sql_proxy) в экземпляре ОС, оптимизированной для контейнеров Google, вы можете попробовать скопировать файл в место, доступное для записи (например, / 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 область действия включена.

Лучшим вариантом для развертывания прокси 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