如何通过 SSH 访问云计算实例 Google 作为服务?

如何通过 SSH 访问云计算实例 Google 作为服务?

我正在尝试通过 bitbucket-pipeline 中的 SSH 访问 Compute 实例,但出于某种原因,我尝试做的任何事都不起作用,所以我显然错过了一些东西。我在我的 Google Cloud 项目中创建了一个服务帐户。我向此服务授予了以下 IAM 权限:

  • 计算操作系统管理员登录
  • 计算操作系统登录

在我的管道中我有以下代码:

apk add --no-cache openssh-client python2-dev
wget -O ~/gc-sdk.tar.gz https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-261.0.0-linux-x86_64.tar.gz
tar xvzf ~/gc-sdk.tar.gz -C ~/
export PATH="$PATH:/root/google-cloud-sdk/bin"
~/google-cloud-sdk/install.sh -q
GCLOUD_KEY_FILE=/root/key.json
echo "${GCR_JSON_KEY}" > ${GCLOUD_KEY_FILE}
gcloud auth activate-service-account --key-file ${GCLOUD_KEY_FILE}

它已经过测试,可以正常工作。我被授权作为一项服务,我可以通过从 Google Cloud 中的 Container Registry 中提取 docker 镜像来测试它(为此服务设置了适当的权限)。

在我的 Compute Engine 的元数据中我有:

enable-oslogin  TRUE

最后,在我的 bitbucket-pipeline 中我配置了一个 SSH 密钥,该密钥也添加到了我的 Compute Engine 的元数据中(我认为如果启用了 oslogin,这就不需要了?)。

但是如果我尝试运行,gcloud compute ssh --project myproject myinstance我会得到:

Permission denied (publickey).
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255]

这里缺少什么步骤才能让我能够通过 SSH 将 Compute Engine 实例作为服务连接到?

添加: 我发现,当我为整个项目赋予我的服务编辑角色时,它确实有效。虽然这太过宽松了,但至少现在我知道问题出在权限上。那么,要使它起作用,最不宽松的 IAM 设置是什么?我尝试了 Compute Engine 类别中的几个,但我无法弄清楚。

答案1

文档指定用户帐户和服务帐户上必要的操作系统登录角色。

相关内容