gpt4 book ai didi

amazon-web-services - 如何在 Terraform 中创建 SSH key ?

转载 作者:行者123 更新时间:2023-12-03 08:53:52 25 4
gpt4 key购买 nike

我需要为不同的用户启动一堆 EC2 盒子。每个用户都应该被沙盒化,因此每个 EC2 框都需要自己的 SSH key 。

在 Terraform 中完成此任务的最佳方法是什么?

我发现的几乎所有说明都希望我手动创建 SSH key 并将其粘贴到 terraform 脚本中。

(坏)例子:

  • https://github.com/hashicorp/terraform/issues/1243 ,
  • http://2ninjas1blog.com/terraform-assigning-an-aws-key-pair-to-your-ec2-instance-resource/
  • Terraform fails to import key pair with Amazon EC2 )

  • 由于我需要以编程方式为许多用户生成唯一 key ,因此这是不切实际的。

    这似乎不是一个困难的用例,但我在任何地方都找不到文档。

    在紧要关头,我可以生成 Terraform 脚本并使用 Bash 即时注入(inject) SSH key 。但这似乎正是 Terraform 一开始就应该做的事情。

    最佳答案

    Terraform 可以使用 tls_private_key resource 生成 SSL/SSH 私钥.
    因此,如果您想即时生成 SSH key ,您可以执行以下操作:

    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"
    }
    }
    这将创建一个处于 Terraform 状态的 SSH key 对(它不会在文件中写入磁盘,而不是在不使用远程状态时对 Terraform 状态本身执行的操作),基于公钥创建一个 AWS key 对然后创建一个 Ubuntu 14.04 实例,其中 ubuntu用户可以使用生成的私钥访问。
    然后,您必须从状态文件中提取私钥并将其提供给用户。您可以使用 output 在应用 Terraform 时将其直接吐出到标准输出。
    安全警告
    我应该在这里指出,传递私钥通常是一个坏主意,最好让开发人员创建他们自己的 key 对并为您提供您(或他们)可以用来生成 AWS key 对的公钥(可能使用上面示例中使用的 aws_key_pair resource)然后可以在创建实例时指定。
    一般来说,我只会使用类似上述方式为您正在控制的非常临时的开发环境生成 SSH key ,因此您不需要将私钥传递给任何人。如果确实需要将私钥传递给人们,则需要确保在安全 channel 中执行此操作,并确保 Terraform 状态(包含纯文本私钥)也得到适当保护。

    关于amazon-web-services - 如何在 Terraform 中创建 SSH key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49743220/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com