Skip to content

Commit 11867bf

Browse files
authored
[AWS] Extract tls_private_key resource from hashicorp/tls provider into an insecure module (#220)
* Extract `tls_private_key` resource from `hashicorp/tls` provider into an insecure module * Address comment
1 parent 18d64bf commit 11867bf

File tree

6 files changed

+60
-20
lines changed

6 files changed

+60
-20
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# [WARNING]
2+
# This module will store unencrypted private keys in the Terraform state file.
3+
# DO NOT use this for production logs.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
terraform {
2+
required_providers {
3+
tls = {
4+
source = "hashicorp/tls"
5+
version = "4.0.6"
6+
}
7+
}
8+
}
9+
10+
# ECDSA key with P256 elliptic curve. Do NOT use this in production environment.
11+
#
12+
# Security Notice
13+
# The private key generated by this resource will be stored unencrypted in your
14+
# Terraform state file. Use of this resource for production deployments is not
15+
# recommended.
16+
#
17+
# See https://registry.terraform.io/providers/hashicorp/tls/latest/docs/resources/private_key.
18+
resource "tls_private_key" "ecdsa_p256" {
19+
algorithm = "ECDSA"
20+
ecdsa_curve = "P256"
21+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
output "tls_private_key_ecdsa_p256_public_key_pem" {
2+
value = tls_private_key.ecdsa_p256.public_key_pem
3+
sensitive = true
4+
}
5+
6+
output "tls_private_key_ecdsa_p256_private_key_pem" {
7+
value = tls_private_key.ecdsa_p256.private_key_pem
8+
sensitive = true
9+
}

deployment/modules/aws/secretsmanager/main.tf

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,6 @@ provider "aws" {
1313
}
1414

1515
# Secrets Manager
16-
17-
# ECDSA key with P256 elliptic curve. Do NOT use this in production environment.
18-
#
19-
# Security Notice
20-
# The private key generated by this resource will be stored unencrypted in your
21-
# Terraform state file. Use of this resource for production deployments is not
22-
# recommended.
23-
#
24-
# See https://registry.terraform.io/providers/hashicorp/tls/latest/docs/resources/private_key.
25-
resource "tls_private_key" "sctfe_ecdsa_p256" {
26-
algorithm = "ECDSA"
27-
ecdsa_curve = "P256"
28-
}
29-
3016
resource "aws_secretsmanager_secret" "sctfe_ecdsa_p256_public_key" {
3117
name = "${var.base_name}-ecdsa-p256-public-key"
3218

@@ -36,8 +22,8 @@ resource "aws_secretsmanager_secret" "sctfe_ecdsa_p256_public_key" {
3622
}
3723

3824
resource "aws_secretsmanager_secret_version" "sctfe_ecdsa_p256_public_key" {
39-
secret_id = aws_secretsmanager_secret.sctfe_ecdsa_p256_public_key.id
40-
secret_string = tls_private_key.sctfe_ecdsa_p256.public_key_pem
25+
secret_id = aws_secretsmanager_secret.sctfe_ecdsa_p256_public_key.id
26+
secret_string = var.tls_private_key_ecdsa_p256_public_key_pem
4127
}
4228

4329
resource "aws_secretsmanager_secret" "sctfe_ecdsa_p256_private_key" {
@@ -49,6 +35,6 @@ resource "aws_secretsmanager_secret" "sctfe_ecdsa_p256_private_key" {
4935
}
5036

5137
resource "aws_secretsmanager_secret_version" "sctfe_ecdsa_p256_private_key" {
52-
secret_id = aws_secretsmanager_secret.sctfe_ecdsa_p256_private_key.id
53-
secret_string = tls_private_key.sctfe_ecdsa_p256.private_key_pem
38+
secret_id = aws_secretsmanager_secret.sctfe_ecdsa_p256_private_key.id
39+
secret_string = var.tls_private_key_ecdsa_p256_private_key_pem
5440
}

deployment/modules/aws/secretsmanager/variables.tf

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,15 @@ variable "region" {
77
description = "Region in which to create resources"
88
type = string
99
}
10+
11+
variable "tls_private_key_ecdsa_p256_public_key_pem" {
12+
description = "Public ECDSA key with P256 elliptic curve in PEM format."
13+
type = string
14+
sensitive = true
15+
}
16+
17+
variable "tls_private_key_ecdsa_p256_private_key_pem" {
18+
description = "Private ECDSA key with P256 elliptic curve in PEM format."
19+
type = string
20+
sensitive = true
21+
}

deployment/modules/aws/tesseract/test/main.tf

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@ module "storage" {
1414
module "secretsmanager" {
1515
source = "../../secretsmanager"
1616

17-
base_name = var.base_name
18-
region = var.region
17+
base_name = var.base_name
18+
region = var.region
19+
tls_private_key_ecdsa_p256_public_key_pem = module.insecuretlskey.tls_private_key_ecdsa_p256_public_key_pem
20+
tls_private_key_ecdsa_p256_private_key_pem = module.insecuretlskey.tls_private_key_ecdsa_p256_private_key_pem
21+
}
22+
23+
# [WARNING]
24+
# This module will store unencrypted private keys in the Terraform state file.
25+
# DO NOT use this for production logs.
26+
module "insecuretlskey" {
27+
source = "../../insecuretlskey"
1928
}

0 commit comments

Comments
 (0)