如何使用 SecureString SSM 参数存储创建 EC2 实例?
Posted
技术标签:
【中文标题】如何使用 SecureString SSM 参数存储创建 EC2 实例?【英文标题】:How to use SecureString SSM parameter store to create EC2 instance? 【发布时间】:2021-06-09 06:07:54 【问题描述】:我曾经使用带有 Terraform 代码的 ppk 文件创建 EC2。
resource "aws_instance" "my_ec2"
...
key_name = var.my_ppk_file_name
...
但是现在基础设施团队建议我们停止使用 SSH 密钥,而是在 AWS SSM 上创建了 SecureString 参数;他们要求我们使用此参数来创建 EC2。
我跑的时候
aws ssm get-parameters --names my_keypair_name --with-decrypt
,这给出了一个安全的字符串
我是否可以使用此输出创建一个 ppk 文件,我可以使用它来使用 Terraform 创建 EC2?
如果不是,那么如何在 Terraform 代码中使用 SSM 参数 SecureString 来创建新的 EC2 实例?
请指教。
【问题讨论】:
所以私钥在 SSM 中? 是的。这是基础设施团队告诉我的。 所以你能澄清一下你之前在做什么,因为key_file
是aws_instance
的错误参数。
我使用的是 key_name
而不是 key_file
- 抱歉 - 我的错。
那么如何在我的 Terraform 代码中的 SSM 上使用这个 SecureString 参数来创建一个新的 EC2 实例。这是我的问题。
【参考方案1】:
您可以使用数据源aws_ssm_parameter 获取您的密钥,然后他们使用aws_key_pair 创建密钥对。例如,可能仍需要进行一些调整:
# get the key from ssm
# key will be in PLAIN TEXT in your state file!
data "aws_ssm_parameter" "privagtekey"
name = "my_keypair_name"
# create new key pair
resource "aws_key_pair" "key"
public_key = aws_ssm_parameter.privagtekey.value
# use the new key in your instance
resource "aws_instance" "my_ec2"
...
key_name = aws_key_pair.key.id
...
但正如我所指出的,私钥最终会以纯文本您的状态文件出现。所以这取决于你的状态文件是如何管理的。如果它的远程状态(例如,S3)具有严格的访问控制,那么它就可以了。
【讨论】:
非常感谢。是否可以从此 SecureString SSM 参数创建物理 ppk 文件? @Biju 是的,使用local_file。 @Biju local_file 怎么样?以上是关于如何使用 SecureString SSM 参数存储创建 EC2 实例?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SecureString 创建 SHA1 或 SHA512 哈希?
如何将 SecureString 从一个进程传递到另一个进程?
如何将 SecureString 转换为 System.String?