Google cloud platform 在两个Google云实例之间复制文件

Google cloud platform 在两个Google云实例之间复制文件,google-cloud-platform,Google Cloud Platform,我在Google Cloud中有两个项目,我需要将文件从一个项目中的实例复制到另一个项目中的实例。我尝试使用“gcloud compute copy files”命令,但出现以下错误: gcloud compute copy-files test.tgz --project stack-complete-343 instance-IP:/home/ubuntu --zone us-central1-a ERROR: (gcloud.compute.copy-files) Could not

我在Google Cloud中有两个项目,我需要将文件从一个项目中的实例复制到另一个项目中的实例。我尝试使用“gcloud compute copy files”命令,但出现以下错误:

gcloud compute copy-files test.tgz --project stack-complete-343 instance-IP:/home/ubuntu --zone us-central1-a 

ERROR: (gcloud.compute.copy-files) Could not fetch instance: - Insufficient Permission

我能够用一个全新的VM实例复制您的问题,得到相同的错误。以下是我为纠正此问题而采取的几个步骤:

确保您已通过身份验证,并且拥有使用相同帐户的两个项目的权限

$
gcloud配置列表
(如果您看到服务帐户@developer.gserviceaccount.com,您需要切换到在两个项目上都启用的帐户。您可以从devlooper控制台>权限中进行检查)

$
gcloud auth login
(将链接复制到新窗口,登录,复制代码并将其粘贴回提示符中)


$
gcloud compute copy files test.tgz--project stack-complete-343实例IP:/home/ubuntu--zone us-central1-a
(我也会使用实例名而不是IP)

最后一个命令还应该生成ssh密钥。您应该看到类似的内容,但不要担心输入密码短语:

警告:[/usr/bin/ssh keygen]将被执行以生成密钥

生成公共/私有rsa密钥对


输入密码短语(如果没有密码短语,则为空):

转到远程实例(即您将不会在其上运行的实例)的“权限”选项卡。然后转到服务帐户并创建一个新帐户,给它一个名称并选中该框以获取该帐户的密钥文件,并将
JSON
保留为选中状态。使用
gcloud compute copy files
和您的个人帐户将该密钥文件从您的个人计算机上载到本地实例(即您正在登录并运行
gcloud compute copy files
命令的计算机)。然后通过SSH从本地实例运行此操作
gcloud auth activate service account account--key file key-file
用生成的类似电子邮件的地址替换
account
,并用您先前从个人计算机上载的密钥文件路径替换
key-file
。然后您应该能够访问设置帐户的实例。必须在每个要在其中复制文件的实例上重复这些步骤。如果这些说明不清楚,请告诉我,我会尽力提供帮助。

不建议在计算引擎实例上验证您的帐户,因为这会将您的凭据暴露给任何有权访问计算机的人

相反,您可以让您的服务帐户使用计算引擎API。首先,停止实例。停止后,您可以从控制台编辑云API访问范围。将计算引擎范围从禁用修改为只读


您现在应该可以使用
复制文件
命令了。这允许您的服务帐户访问计算引擎API。

最简单的方法是使用“scp”命令和.pem文件。下面是一个例子

sudo scp -r -i your/path_to/.pem your_username@ip_address_of_instance:path/to/copy/file

如果两者都在同一个项目中,这是最简单的方法

gcloud compute copy-files yourFileName --project yourProjectName instance-name:~/folderInInstance --zone europe-west1-b

显然,您应该根据您的实例编辑分区

获取权限的方法之一是启用
云API访问范围
。您可以将它们设置为
允许完全访问所有云API


控制台中
单击
实例
并使用上面的
编辑
按钮。滚动至底部并更改
云API访问范围
。另请参见此部分。

您刚才说的“将计算引擎范围从禁用修改为只读”。…也就是说,对于源vm,那么目标vm呢?我相信它也需要修改其权限,您同意吗?我打算在一家bitI公司试用一下。我不这么认为,假设它有相同的服务帐户,应该可以。这是怎么回事?我试着只给源代码提供对所有云api的完全访问权限,但这不起作用…没有机会在目标上更改这一点,但仔细想想…云api需要在目标上具有写访问权限,对吗?如果没有,它如何在目标机器上“写入”呢?您遇到了什么错误?您对该项目有什么权限?这假定您在源计算机和目标计算机上拥有相同的服务帐户。这个想法是服务帐户已经在目标机器上拥有权限。您所要做的就是让它访问计算引擎API。您可能还需要为自己授予服务帐户参与者权限。
gcloud compute copy files
已被弃用,并被
cloud compute scp