使用 Google scp 命令服务帐户时权限被拒绝

使用 Google scp 命令服务帐户时权限被拒绝

我想使用 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

解决您的问题您可以选择以下两种解决方法之一:

  1. 更改权限:

    • 直接授予您的用户名写权限/var/www/dev/dev/test,例如:

      sudo chown -R $USER /var/www/dev/dev/test

    • 使用复制文件gcloud compute scp直接 到/var/www/dev/dev/test

  2. 分两步复制文件:

    • 使用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

相关内容