Blog
Wie Sie eine VM mit aktiviertem SSH auf GCP erstellen

Manchmal brauchen Sie eine schnelle Linux-Umgebung, um etwas auszuprobieren.
Obwohl ein Tool wie Google Cloud Shell für diesen Zweck hervorragend geeignet ist,
macht es viel mehr Spaß, in den Terraform-Code einzutauchen und dabei etwas zu lernen!
In diesem Beitrag werde ich die erforderliche Terraform-Konfiguration für den SSH-Zugang zu einer VM-Instanz auf GCP behandeln.
GCP einrichten
Unsere Lösung wird mehrere GCP-APIs verwenden, die aktiviert werden müssen:
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "4.5.0"
}
}
}
provider "google" {
project = "<project_id>"
}
resource "google_project_service" "cloud_resource_manager" {
service = "cloudresourcemanager.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "compute" {
service = "compute.googleapis.com"
disable_on_destroy = false
}
Stellen Sie sicher, dass Sie
gcloud auth application-default loginausführen, damit wir den GCP-Zugang nicht manuell einrichten müssen.
Erzeugen Sie ein SSH-Schlüsselpaar
Da wir uns per SSH in unsere VM einloggen wollen, die wir später erstellen werden, müssen wir ein RSA-Schlüsselpaar generieren.
Wir können den Anbieterhashicorp/tls verwenden, um dies zu automatisieren:
terraform {
required_providers {
tls = {
source = "hashicorp/tls"
version = "3.1.0"
}
}
}
provider "tls" {
// no config needed
}
resource "tls_private_key" "ssh" {
algorithm = "RSA"
rsa_bits = 4096
}
resource "local_file" "ssh_private_key_pem" {
content = tls_private_key.ssh.private_key_pem
filename = ".ssh/google_compute_engine"
file_permission = "0600"
}
Wir schreiben den privaten Schlüssel in eine lokale Datei, damit wir ihn später tatsächlich verwenden können.
Hinweis: Der private Schlüssel ist Teil des Status, verwenden Sie diese Methode also nicht, wenn Sie einen gemeinsamen Remote-Status verwenden!
Erstellen Sie ein VPC-Netzwerk
Bei der Erstellung eines neuen Google Cloud-Projekts wird ein Standard-VPC-Netzwerk erstellt.
Dieses Netzwerk funktioniert gut, aber da es empfohlen wird, separate Netzwerke zur Isolierung zu erstellen, sollten wir das tun:
resource "google_compute_network" "vpc_network" {
name = "my-network"
}
Erstellen Sie eine Recheninstanz
Lassen Sie uns nun unsere VM und die zugehörigen Ressourcen erstellen.
resource "google_compute_address" "static_ip" {
name = "debian-vm"
}
resource "google_compute_firewall" "allow_ssh" {
name = "allow-ssh"
network = google_compute_network.vpc_network.name
target_tags = ["allow-ssh"] // this targets our tagged VM
source_ranges = ["0.0.0.0/0"]
allow {
protocol = "tcp"
ports = ["22"]
}
}
data "google_client_openid_userinfo" "me" {}
resource "google_compute_instance" "debian_vm" {
name = "debian"
machine_type = "f1-micro"
tags = ["allow-ssh"] // this receives the firewall rule
metadata = {
ssh-keys = "${split("@", data.google_client_openid_userinfo.me.email)[0]}:${tls_private_key.ssh.public_key_openssh}"
}
boot_disk {
initialize_params {
image = "debian-cloud/debian-9"
}
}
network_interface {
network = google_compute_network.vpc_network.name
access_config {
nat_ip = google_compute_address.static_ip.address
}
}
}
Verbinden Sie sich mit der VM über SSH
Nun, da alle unsere Ressourcen erstellt sind, wie können wir SSH verwenden, um uns mit der VM zu verbinden?
Lassen Sie uns eine Ausgabe definieren, um die Informationen zu erhalten, die wir dafür benötigen:
output "public_ip" {
value = google_compute_address.static_ip.address
}
Drucken Sie den Wert für die statische IP:
terraform output public_ip
Und jetzt können wir SSH verwenden, um uns mit der VM zu verbinden:
ssh -i .ssh/google_compute_engine <gcp-username>@<static-ip>
Viel Spaß mit Ihrer Debian-Umgebung!
Bonus: Verwenden Sie einen Fernauslöser
Wenn Sie einen Remote-Runner wie Terraform Cloud verwenden, können Sie den privaten Schlüssel nicht in eine lokale Datei ausgeben.
Wir können den privaten Schlüssel dennoch über eine zusätzliche Ausgabe erhalten, auch wenn er sensibel ist:
output "ssh_private_key" {
value = tls_private_key.ssh.private_key_pem
sensitive = true
}
Verwenden Sie nun den folgenden Befehl, um den privaten Schlüssel in eine lokale Datei zu übertragen:
terraform output -json | jq -r ".ssh_private_key.value" > .ssh/google_compute_engine
Nächste Schritte
In diesem Blog wird SSH verwendet, weil fast jeder damit vertraut ist.
Es gibt aber auch andere, sicherere Möglichkeiten, sich mit einer VM auf GCP zu verbinden.
Zum Beispiel das Tunneln mit IAP.
Sie können auch unseren Beitrag über die Einrichtung in Ansible lesen.
Um verweilende öffentliche Schlüssel zu reduzieren, empfiehlt Google außerdem, OS Login zu aktivieren.
Verfasst von

Chris ter Beke
Chris ter Beke has been using Google Cloud Platform for over 8 years. He has built multiple SaaS platforms using technologies like Terraform, Kubernetes, Python, and automated CI/CD pipelines.
Unsere Ideen
Weitere Blogs
Contact



