如何使用 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_fileaws_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?

使用 AWS Codebuild 时如何读取 SSM 参数?

如何在 SSM 文档中使用 StringMap 参数?

ssm框架前端与后端如何联系