@@ -8,10 +8,16 @@ locals {
88 // Master user password
99 master_password_in_ssm_param = var.db_master_password_ssm_param != null ? true : false
1010 master_password_ssm_param_ecnrypted = var.db_master_password_ssm_param_kms_key != null ? true : false
11+ # Replace null with empty string so that the following regexall will work.
12+ db_master_password_ssm_param = var.db_master_password_ssm_param == null ? "" : var.db_master_password_ssm_param
13+ master_password_in_secretsmanager = length(regexall("/aws/reference/secretsmanager/", local.db_master_password_ssm_param)) > 0
1114
1215 // Provisioned user password
1316 user_password_in_ssm_param = var.db_user_password_ssm_param != null ? true : false
1417 user_password_ssm_param_ecnrypted = var.db_user_password_ssm_param_kms_key != null ? true : false
18+ # Replace null with empty string so that the following regexall will work.
19+ db_user_password_ssm_param = var.db_user_password_ssm_param == null ? "" : var.db_user_password_ssm_param
20+ user_password_in_secretsmanager = length(regexall("/aws/reference/secretsmanager/", local.db_user_password_ssm_param)) > 0
1521}
1622
1723#############################################################
@@ -30,6 +36,12 @@ data "aws_ssm_parameter" "master_password" {
3036 name = var.db_master_password_ssm_param
3137}
3238
39+ data "aws_secretsmanager_secret" "master_password" {
40+ count = var.enabled && local.master_password_in_secretsmanager ? 1 : 0
41+
42+ name = trimprefix(var.db_master_password_ssm_param, "/aws/reference/secretsmanager/")
43+ }
44+
3345data "aws_kms_key" "master_password" {
3446 count = var.enabled && local.master_password_in_ssm_param && local.master_password_ssm_param_ecnrypted ? 1 : 0
3547
@@ -42,6 +54,12 @@ data "aws_ssm_parameter" "user_password" {
4254 name = var.db_user_password_ssm_param
4355}
4456
57+ data "aws_secretsmanager_secret" "user_password" {
58+ count = var.enabled && local.user_password_in_secretsmanager ? 1 : 0
59+
60+ name = trimprefix(var.db_user_password_ssm_param, "/aws/reference/secretsmanager/")
61+ }
62+
4563data "aws_kms_key" "user_password" {
4664 count = var.enabled && local.user_password_in_ssm_param && local.user_password_ssm_param_ecnrypted ? 1 : 0
4765
@@ -253,6 +271,18 @@ data "aws_iam_policy_document" "master_password_ssm_permissions" {
253271 }
254272}
255273
274+ data "aws_iam_policy_document" "master_password_secretsmanager_permissions" {
275+ count = var.enabled && local.master_password_in_secretsmanager ? 1 : 0
276+
277+ statement {
278+ effect = "Allow"
279+ actions = [
280+ "secretsmanager:GetSecretValue",
281+ ]
282+ resources = [join("", data.aws_secretsmanager_secret.master_password.*.arn)]
283+ }
284+ }
285+
256286data "aws_iam_policy_document" "master_password_kms_permissions" {
257287 count = var.enabled && local.master_password_in_ssm_param && local.master_password_ssm_param_ecnrypted ? 1 : 0
258288
@@ -277,6 +307,18 @@ data "aws_iam_policy_document" "user_password_ssm_permissions" {
277307 }
278308}
279309
310+ data "aws_iam_policy_document" "user_password_secretsmanager_permissions" {
311+ count = var.enabled && local.user_password_in_secretsmanager ? 1 : 0
312+
313+ statement {
314+ effect = "Allow"
315+ actions = [
316+ "secretsmanager:GetSecretValue",
317+ ]
318+ resources = [join("", data.aws_secretsmanager_secret.user_password.*.arn)]
319+ }
320+ }
321+
280322data "aws_iam_policy_document" "user_password_kms_permissions" {
281323 count = var.enabled && local.user_password_in_ssm_param && local.user_password_ssm_param_ecnrypted ? 1 : 0
282324
@@ -297,8 +339,10 @@ module "aggregated_policy" {
297339 join("", data.aws_iam_policy_document.lambda_kms_permissions.*.json),
298340 join("", data.aws_iam_policy_document.master_password_ssm_permissions.*.json),
299341 join("", data.aws_iam_policy_document.master_password_kms_permissions.*.json),
342+ join("", data.aws_iam_policy_document.master_password_secretsmanager_permissions.*.json),
300343 join("", data.aws_iam_policy_document.user_password_ssm_permissions.*.json),
301344 join("", data.aws_iam_policy_document.user_password_kms_permissions.*.json),
345+ join("", data.aws_iam_policy_document.user_password_secretsmanager_permissions.*.json),
302346 ])
303347}
304348
0 commit comments