
Я хочу использовать CircleCI для развертывания моего кода в экземпляре Compute Engine. Я создал пользователя учетной записи службы и использую команду gcloud scp ниже:
gcloud --quiet compute scp --recurse dev/test/ [DEST_INSTANCE]:/var/www/dev/dev/test --zone=northamerica-northeast1-a --project [PROJECT_NAME]
для загрузки файлов в подпапку var, и развертывание завершается ошибкой ниже:
scp: /var/www/dev/dev/test: Permission denied
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
Exited with code 1
Теперь я хочу предоставить доступ к учетной записи службы, но я не вижу ее в списке пользователей, которым можно предоставить доступ, когда я использую cat /etc/passwd
. Как мне предоставить разрешение учетной записи службы? Роли, которые я назначил этой учетной записи:
решение1
Похоже, у вашего имени пользователя нет прав на запись в виртуальную машину GCE /var/www/dev/dev/test
.
Чтобы решить вашу проблемуВы можете выбрать один из двух вариантов решения:
Изменить разрешения:
предоставьте вашему имени пользователя
/var/www/dev/dev/test
прямой доступ на запись, например:sudo chown -R $USER /var/www/dev/dev/test
копировать файлы с
gcloud compute scp
прямо к/var/www/dev/dev/test
.
Копирование файлов в два этапа:
использовать
gcloud compute scp
для передачи файлов/каталогов, куда ваш пользователь может записывать данные, например,/tmp
или/home/$USER
;Подключитесь к экземпляру виртуальной машины по SSH через
gcloud compute ssh
или через Консоль и скопируйте файлы из временного расположения, используяsudo
для получения соответствующих разрешений.
Примечаниечто поскольку этот вопрос касается виртуальных машин GCE, вы не можете напрямую подключиться по SSH к экземпляру виртуальной машины как root
, а также не можете напрямую копировать файлы как root
, по той же причине: gcloud compute scp
использует scp
, который использует ssh
для аутентификации.
Кроме того, пожалуйста, ознакомьтесь с документацией.Передача файлов в экземплярыразделПередача файлов с помощью инструмента командной строки gcloud.
решение2
Проверьте используемую учетную запись службы. Есть одна учетная запись службы, которая является учетной записью по умолчанию для GCE и создана GCP. Другая — та, которую вы создали.
Если вы используете созданную вами учетную запись, авторизовали ли вы вход в учетную запись службы с помощью файла ключа JSON?
решение3
Активируйте нужную учетную запись службы, для которой вы предоставили роли на снимке экрана, с помощью команды:
gcloud auth активировать-сервис-аккаунт $account --key-file=the_key_file.json