Skip to content

Commit 8c7ad4d

Browse files
authored
fix: introduce enabled flag for secret_version and rotation (#2)
1 parent ff831af commit 8c7ad4d

File tree

4 files changed

+29
-15
lines changed

4 files changed

+29
-15
lines changed

README.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ module "secrets" {
2828
version = "0.1.0"
2929
3030
secret_version = {
31+
enabled = true
3132
secret_string = jsonencode(
3233
{
3334
ssh_public_key = base64encode(module.ssh_key_pair.public_key)
@@ -52,7 +53,7 @@ module "secrets" {
5253

5354
| Name | Version |
5455
|------|---------|
55-
| <a name="provider_aws"></a> [aws](#provider\_aws) | 3.60.0 |
56+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 3.0 |
5657

5758
## Modules
5859

@@ -93,8 +94,8 @@ module "secrets" {
9394
| <a name="input_policy"></a> [policy](#input\_policy) | Valid JSON document representing a resource policy. | `string` | `null` | no |
9495
| <a name="input_recovery_window_in_days"></a> [recovery\_window\_in\_days](#input\_recovery\_window\_in\_days) | Valid JSON document representing a resource policy. | `number` | `30` | no |
9596
| <a name="input_regex_replace_chars"></a> [regex\_replace\_chars](#input\_regex\_replace\_chars) | Terraform regular expression (regex) string.<br>Characters matching the regex will be removed from the ID elements.<br>If not set, `"/[^a-zA-Z0-9-]/"` is used to remove all characters other than hyphens, letters and digits. | `string` | `null` | no |
96-
| <a name="input_rotation"></a> [rotation](#input\_rotation) | enabled:<br> Whether to create secret rotation rule. <br> Default value: `false`<br>lambda\_arn:<br> Specifies the ARN of the Lambda function that can rotate the secret.<br>automatically\_after\_days:<br> Specifies the number of days between automatic scheduled rotations of the secret. | <pre>object({<br> lambda_arn = string<br> automatically_after_days = number<br> })</pre> | <pre>{<br> "automatically_after_days": 0,<br> "lambda_arn": ""<br>}</pre> | no |
97-
| <a name="input_secret_version"></a> [secret\_version](#input\_secret\_version) | secret\_string:<br> Specifies text data that you want to encrypt and store in this version of the secret. <br> This is required if `secret_binary` is not set.<br>secret\_binary:<br> Specifies binary data that you want to encrypt and store in this version of the secret. <br> This is required if `secret_string` is not set. <br> Needs to be encoded to base64. | <pre>object({<br> secret_string = optional(string)<br> secret_binary = optional(string)<br> })</pre> | `{}` | no |
97+
| <a name="input_rotation"></a> [rotation](#input\_rotation) | enabled:<br> Whether to create secret rotation rule. <br> Default value: `false`<br>lambda\_arn:<br> Specifies the ARN of the Lambda function that can rotate the secret.<br>automatically\_after\_days:<br> Specifies the number of days between automatic scheduled rotations of the secret. | <pre>object({<br> enabled = optional(bool)<br> lambda_arn = string<br> automatically_after_days = number<br> })</pre> | <pre>{<br> "automatically_after_days": 0,<br> "lambda_arn": ""<br>}</pre> | no |
98+
| <a name="input_secret_version"></a> [secret\_version](#input\_secret\_version) | enabled:<br> Whether to create secret version. <br> Default value: `false`<br>secret\_string:<br> Specifies text data that you want to encrypt and store in this version of the secret. <br> This is required if `secret_binary` is not set.<br>secret\_binary:<br> Specifies binary data that you want to encrypt and store in this version of the secret. <br> This is required if `secret_string` is not set. <br> Needs to be encoded to base64. | <pre>object({<br> enabled = optional(bool)<br> secret_string = optional(string)<br> secret_binary = optional(string)<br> })</pre> | `{}` | no |
9899
| <a name="input_stage"></a> [stage](#input\_stage) | ID element. Usually used to indicate role, e.g. 'prod', 'staging', 'source', 'build', 'test', 'deploy', 'release' | `string` | `null` | no |
99100
| <a name="input_tags"></a> [tags](#input\_tags) | Additional tags (e.g. `{'BusinessUnit': 'XYZ'}`).<br>Neither the tag keys nor the tag values will be modified by this module. | `map(string)` | `{}` | no |
100101
| <a name="input_tenant"></a> [tenant](#input\_tenant) | ID element \_(Rarely used, not included by default)\_. A customer identifier, indicating who this instance of a resource is for | `string` | `null` | no |

examples/basic/main.tf

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ module "secrets" {
2222
version = "0.1.0"
2323

2424
secret_version = {
25+
enabled = true
2526
secret_string = jsonencode(
2627
{
2728
ssh_public_key = base64encode(module.ssh_key_pair.public_key)

main.tf

+19-12
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
locals {
2-
enabled = module.this.enabled
3-
secret_id = one(aws_secretsmanager_secret.default[*].id)
4-
secret_arn = one(aws_secretsmanager_secret.default[*].arn)
5-
version_id = one(aws_secretsmanager_secret_version.default[*].version_id)
6-
secret_version = defaults(var.secret_version, local.secret_version_default)
7-
secret_version_enabled = local.enabled && (length(local.secret_version["secret_string"]) > 0 || length(local.secret_version["secret_binary"]) > 0)
8-
secret_string = local.enabled && length(local.secret_version["secret_string"]) > 0 ? local.secret_version["secret_string"] : null
9-
secret_binary = local.enabled && length(local.secret_version["secret_binary"]) > 0 ? local.secret_version["secret_binary"] : null
10-
kms_key = defaults(var.kms_key, local.kms_key_default)
11-
kms_key_enabled = local.enabled && local.kms_key["enabled"]
12-
kms_key_id = local.kms_key["enabled"] ? module.kms_key.key_id : var.kms_key_id
2+
enabled = module.this.enabled
3+
secret_id = one(aws_secretsmanager_secret.default[*].id)
4+
secret_arn = one(aws_secretsmanager_secret.default[*].arn)
5+
version_id = one(aws_secretsmanager_secret_version.default[*].version_id)
6+
secret_version = defaults(var.secret_version, local.secret_version_default)
7+
secret_version_enabled = local.enabled && local.secret_version["enabled"]
8+
secret_string = local.secret_version_enabled && length(local.secret_version["secret_string"]) > 0 ? local.secret_version["secret_string"] : null
9+
secret_binary = local.secret_version_enabled && length(local.secret_version["secret_binary"]) > 0 ? local.secret_version["secret_binary"] : null
10+
secret_rotation = defaults(var.rotation, local.secret_rotation_default)
11+
secret_rotation_enabled = local.enabled && local.secret_rotation["enabled"]
12+
kms_key = defaults(var.kms_key, local.kms_key_default)
13+
kms_key_enabled = local.enabled && local.kms_key["enabled"]
14+
kms_key_id = local.kms_key["enabled"] ? module.kms_key.key_id : var.kms_key_id
1315

1416
kms_key_default = {
1517
deletion_window_in_days = 30
@@ -20,6 +22,11 @@ locals {
2022
secret_version_default = {
2123
secret_string = ""
2224
secret_binary = ""
25+
enabled = false
26+
}
27+
28+
secret_rotation_default = {
29+
enabled = false
2330
}
2431
}
2532

@@ -56,7 +63,7 @@ resource "aws_secretsmanager_secret_version" "default" {
5663
}
5764

5865
resource "aws_secretsmanager_secret_rotation" "default" {
59-
count = local.enabled && length(var.rotation["lambda_arn"]) > 0 ? 1 : 0
66+
count = local.secret_rotation_enabled ? 1 : 0
6067

6168
secret_id = local.secret_id
6269
rotation_lambda_arn = var.rotation["lambda_arn"]

variables.tf

+5
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,16 @@ variable "kms_key" {
5656

5757
variable "secret_version" {
5858
type = object({
59+
enabled = optional(bool)
5960
secret_string = optional(string)
6061
secret_binary = optional(string)
6162
})
6263
sensitive = true
6364
default = {}
6465
description = <<-DOC
66+
enabled:
67+
Whether to create secret version.
68+
Default value: `false`
6569
secret_string:
6670
Specifies text data that you want to encrypt and store in this version of the secret.
6771
This is required if `secret_binary` is not set.
@@ -74,6 +78,7 @@ variable "secret_version" {
7478

7579
variable "rotation" {
7680
type = object({
81+
enabled = optional(bool)
7782
lambda_arn = string
7883
automatically_after_days = number
7984
})

0 commit comments

Comments
 (0)