Terraform может генерировать закрытые ключи SSL / SSH с помощью tls_private_key
ресурса.
Итак, если вы хотите сгенерировать ключи SSH на лету, вы можете сделать что-то вроде этого:
variable "key_name" {}
resource "tls_private_key" "example" {
algorithm = "RSA"
rsa_bits = 4096
}
resource "aws_key_pair" "generated_key" {
key_name = var.key_name
public_key = tls_private_key.example.public_key_openssh
}
data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
owners = ["099720109477"] # Canonical
}
resource "aws_instance" "web" {
ami = data.aws_ami.ubuntu.id
instance_type = "t2.micro"
key_name = aws_key_pair.generated_key.key_name
tags {
Name = "HelloWorld"
}
}
Это создаст пару ключей SSH, которая живет в состоянии Terraform (она не записывается на диск в файлах, кроме того, что может быть сделано для самого состояния Terraform, когда не используется удаленное состояние), создает пару ключей AWS на основе открытого ключа а затем создает экземпляр Ubuntu 14.04, в котором пользователь ubuntu
доступен по сгенерированному закрытому ключу.
Затем вам нужно будет извлечь закрытый ключ из файла состояния и предоставить его пользователям. Вы можете использовать output
, чтобы выплюнуть это прямо на стандартный вывод, когда Terraform применяемый.
Предостережения по безопасности
Я должен указать здесь, что передача закрытых ключей, как правило, является плохой идеей, и вам было бы намного лучше, если бы разработчики создали свои собственные пары ключей и предоставили вам открытый ключ, который вы (или они) можете использовать для генерации пары ключей AWS. (возможно, с использованием aws_key_pair
ресурса, использованного в приведенном выше примере) которые затем можно указать при создании экземпляров.
В общем, я бы использовал только что-то вроде вышеуказанного способа генерации ключей SSH для очень временных сред разработки, которые вы контролируете, поэтому вам не нужно никому передавать закрытые ключи. Если вам действительно нужно передать закрытые ключи людям, вам необходимо убедиться, что вы делаете это в безопасном канале и что состояние Terraform (которое содержит закрытый ключ в виде обычного текста) также защищено надлежащим образом.
person
ydaetskcoR
schedule
12.04.2018