我想使用 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 VM 上写入的权限/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 VM 的,您不能像 一样直接通过 SSH 连接到 VM 实例root
,也不能像 一样直接复制文件root
,原因相同:gcloud compute scp
使用scp
依赖ssh
于身份验证的。
此外,请查看文档传输文件至实例部分使用 gcloud 命令行工具传输文件。
答案2
请检查正在使用的服务帐号。有一个服务帐号是 GCE 的默认帐号,由 GCP 创建。另一个是您创建的帐号。
如果您正在使用自己创建的帐户,您是否已使用 JSON 密钥文件授权服务帐户登录?
答案3
使用以下命令激活您已在屏幕截图中授予角色的正确服务帐户:
gcloud auth activate-service-account $account --key-file=the_key_file.json