首页 > 解决方案 > Terraform/GCP:未将 ssh 密钥添加到元数据中

问题描述

我正在尝试使用 terraform 在项目级别将 ssh-keys 添加到我的 Google Cloud 项目中:

resource "google_compute_project_metadata_item" "oslogin" {
  project = "${google_project_services.myproject.project}"
  key     = "enable-oslogin"
  value   = "false"
}

resource "google_compute_project_metadata_item" "block-project-ssh-keys" {
  project = "${google_project_services.myproject.project}"
  key     = "block-project-ssh-keys"
  value   = "false"
}

resource "google_compute_project_metadata_item" "ssh-keys" {
  key   = "ssh-keys"
  value = "user:ssh-rsa myverylongpublickeythatireplacewithtexthereforobviousreasons user@computer.local"

  depends_on = [
    "google_project_services.myproject",
  ]
}

我尝试了 2 个元数据标志 oslogin 和 block-project-ssh-keys 的所有类型的组合,它们总是可以毫无问题地设置。但是 ssh 密钥永远不会出现在 GCP 的 Web GUI 中,更不用说 authorized_keys 文件了。我什至尝试添加depends_on,以确保在添加密钥之前项目存在,但这也无济于事。

然而,Terraform 说:

google_compute_project_metadata_item.ssh-keys: Creation complete after 8s (ID: ssh-keys)

在 Web GUI 上手动添加完全相同的密钥可以正常工作。在这一点上,我相信我已经尝试了一切,阅读所有第一页谷歌结果到“terraform gcp add ssh key”和类似的查询......我无能为力。

标签: sshgoogle-cloud-platformterraform

解决方案


问题是 ssh 密钥被添加到不同的项目中。我从 Google 的GCP/Terraform 教程开始。这将首先使用gcloud工具创建一个通用项目。然后继续使用该通用项目创建帐户。这是必要的,因为您需要用户针对他们的 API 运行 terraform。然后他们创建一个项目,每次您申请时使用 terraform 为这些用户提供便利。使用 gcloud 创建的通用项目在初始创建后没有被触及。如果您从google_compute_project_metadata_item.ssh-keys资源中省略“项目”参数,它会使用通用项目并在那里添加 ssh 密钥 - 至少在我的情况下是这样。

解决方案:将项目参数显式添加到元数据资源项,以确保将其添加到正确的项目中


推荐阅读