Ответ 1
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-trusty-14.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
чтобы выплюнуть это прямо в stdout при применении Terraform.
Предостережения о безопасности
Я должен отметить, что передача закрытых ключей, как правило, плохая идея, и вам было бы гораздо лучше, если бы разработчики создавали свои собственные пары ключей и предоставляли вам открытый ключ, который вы (или они) можете использовать для генерации пары ключей AWS. (возможно, с использованием ресурса aws_key_pair
который используется в приведенном выше примере), который затем можно указать при создании экземпляров.
В общем, я бы использовал что-то подобное описанному выше способу генерации ключей SSH для очень временных сред разработки, которыми вы управляете, поэтому вам не нужно никому передавать личные ключи. Если вам нужно передать личные ключи людям, вам необходимо убедиться, что вы делаете это по защищенному каналу и убедитесь, что состояние Terraform (которое содержит закрытый ключ в виде простого текста) также защищено надлежащим образом.