3

I need to store a Private Key in AWS. Because when I create an ec2 instance from AWS I need to use this primary key to auth in provisioner "remote-exec". I don't want to save in repo AWS.

It's a good idea to save a private key in Secret Manager? And then consume it?

And in the case affirmative, How to save the primary key in Secret Manager and then retrieve in TF aws_secretsmanager_secret_version?

In my case, if I validate from a file(), it's working but if I validate from a string, is failed.

connection {
    host = self.private_ip
    type = "ssh"
    user = "ec2-user"
    #private_key = file("${path.module}/key")   <-- Is working
    private_key = jsondecode(data.aws_secretsmanager_secret_version.secret_terraform.secret_string)["ec2_key"]    <-- not working. Error: Failed to read ssh private key: no key found
}
John Rotenstein
  • 241,921
  • 22
  • 380
  • 470
Jordi Serra
  • 132
  • 4
  • 13

1 Answers1

3

I think the reason is due to how you store it. I verified using my own sandbox account the use of aws_secretsmanager_secret_version and it works. However, I stored it as a pain text, not json:

enter image description here

Then I successfuly used it as follows for an instance:


resource "aws_instance" "public" {
  ami           =  "ami-02354e95b39ca8dec" 
  instance_type = "t2.micro" 
  key_name      = "key-pair-name"
  security_groups = [aws_security_group.ec2_sg.name]
  
  provisioner "remote-exec" {
  
    connection {
      type     = "ssh"
      user     = "ec2-user"
      private_key = data.aws_secretsmanager_secret_version.example.secret_string
      host     = "${self.public_ip}"
    }
  
    inline = [
      "ls -la"
    ]
  }
  
  depends_on = [aws_key_pair.key]
  
}
Marcin
  • 215,873
  • 14
  • 235
  • 294
  • Did you defined the `data.aws_secretsmanager_secret_version.example` in terraform before use it? – Mauro Baraldi Aug 26 '20 at 19:58
  • 1
    @MauroBaraldi No. For this example, I did it in the console. – Marcin Aug 26 '20 at 21:19
  • question is it also possible to mix the private key with some? Like {"public": "some-public--string", "private": "private-key-here"} – Alex May 18 '21 at 02:54
  • @Alex yes. I would suggest making a question specific to your query. – Marcin May 18 '21 at 02:58
  • @Marcin I already created one https://stackoverflow.com/questions/67571435/aws-secrets-manager-update-multiple-value-with-private-key – Alex May 18 '21 at 02:59