Skip to content

Commit 61fad34

Browse files
committed
[NRL-853] Added backup destination vault arn as secret. Moved backup vars/data/locals into dev account-side infra files
1 parent 3ba98a4 commit 61fad34

File tree

7 files changed

+26
-45
lines changed

7 files changed

+26
-45
lines changed

terraform/account-wide-infrastructure/dev/aws-backups.tf renamed to terraform/account-wide-infrastructure/dev/aws-backup.tf

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,7 @@
1-
provider "aws" {
2-
alias = "source"
3-
region = "eu-west-2"
4-
}
5-
6-
variable "destination_vault_arn" {
7-
description = "ARN of the backup vault in the destination account"
8-
type = string
9-
default = ""
10-
}
11-
12-
data "aws_arn" "destination_vault_arn" {
13-
arn = var.destination_vault_arn
14-
}
15-
16-
data "aws_secretsmanager_secret" "backup-account-secret" {
17-
name = "nhsd-nrlf--dev--test-backup-account-id"
18-
}
19-
data "aws_secretsmanager_secret_version" "destination_account_id" {
20-
secret_id = data.aws_secretsmanager_secret.backup-account-secret.id
21-
}
22-
23-
locals {
24-
# Adjust these as required
25-
project_name = "dev-backups-poc"
26-
environment_name = "dev"
27-
28-
source_account_id = data.aws_caller_identity.current.account_id
29-
# destination_account_id = data.aws_arn.destination_vault_arn.account
30-
destination_account_id = data.aws_secretsmanager_secret_version.destination_account_id.secret_string
31-
}
321

332
# First, we create an S3 bucket for compliance reports.
343
resource "aws_s3_bucket" "backup_reports" {
35-
bucket_prefix = "${local.project_name}-backup-reports"
4+
bucket_prefix = "${local.prefix}-backup-reports"
365
}
376

387
resource "aws_s3_bucket_public_access_block" "backup_reports" {
@@ -115,7 +84,7 @@ resource "aws_kms_key" "backup_notifications" {
11584
Effect = "Allow"
11685
Sid = "Enable IAM User Permissions"
11786
Principal = {
118-
AWS = "arn:aws:iam::${local.source_account_id}:root"
87+
AWS = "arn:aws:iam::${var.assume_account}:root"
11988
}
12089
Action = "kms:*"
12190
Resource = "*"
@@ -137,21 +106,21 @@ resource "aws_kms_key" "backup_notifications" {
137106
module "source" {
138107
source = "../modules/backup-source"
139108

140-
backup_copy_vault_account_id = local.destination_account_id
141-
backup_copy_vault_arn = data.aws_arn.destination_vault_arn.arn
142-
environment_name = local.environment_name
109+
backup_copy_vault_account_id = jsondecode(data.aws_secretsmanager_secret_version.backup_destination_parameters.secret_string)["account-id"]
110+
backup_copy_vault_arn = jsondecode(data.aws_secretsmanager_secret_version.backup_destination_parameters.secret_string)["vault-arn"]
111+
environment_name = local.environment
143112
bootstrap_kms_key_arn = aws_kms_key.backup_notifications.arn
144-
project_name = local.project_name
113+
project_name = "${local.prefix}-"
145114
reports_bucket = aws_s3_bucket.backup_reports.bucket
146-
#terraform_role_arn = data.aws_caller_identity.current.arn
147-
terraform_role_arn = "arn:aws:iam::${var.assume_account}:role/${var.assume_role}"
115+
terraform_role_arn = "arn:aws:iam::${var.assume_account}:role/${var.assume_role}"
148116

149117
notification_target_email_addresses = local.notification_emails
150118

151119
backup_plan_config = {
152120
"compliance_resource_types" : [
153121
"S3"
154122
],
123+
"enable" = true,
155124
"rules" : [
156125
{
157126
"copy_action" : {

terraform/account-wide-infrastructure/dev/data.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ data "aws_secretsmanager_secret_version" "identities_account_id" {
22
secret_id = aws_secretsmanager_secret.identities_account_id.name
33
}
44

5+
data "aws_secretsmanager_secret_version" "backup_destination_parameters" {
6+
secret_id = aws_secretsmanager_secret.backup_destination_parameters.name
7+
}
8+
59
data "aws_secretsmanager_secret" "emails" {
610
name = "${local.prefix}-emails"
711
}

terraform/account-wide-infrastructure/dev/secrets.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ resource "aws_secretsmanager_secret" "identities_account_id" {
22
name = "${local.prefix}--nhs-identities-account-id"
33
}
44

5+
resource "aws_secretsmanager_secret" "backup_destination_parameters" {
6+
name = "${local.prefix}--backup-destination-parameters"
7+
description = "Parameters used to configure the backup destination"
8+
}
9+
510
resource "aws_secretsmanager_secret" "notification_email_addresses" {
611
name = "${local.prefix}-dev-notification-email-addresses"
712
}

terraform/account-wide-infrastructure/modules/backup-source/backup_plan.tf

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
resource "aws_backup_plan" "default" {
2-
name = "${local.resource_name_prefix}-plan"
2+
count = var.backup_plan_config.enable ? 1 : 0
3+
name = "${local.resource_name_prefix}-plan"
34

45
dynamic "rule" {
56
for_each = var.backup_plan_config.rules
@@ -16,7 +17,7 @@ resource "aws_backup_plan" "default" {
1617
cold_storage_after = rule.value.lifecycle.cold_storage_after != null ? rule.value.lifecycle.cold_storage_after : null
1718
}
1819
dynamic "copy_action" {
19-
for_each = var.backup_copy_vault_arn != "" && var.backup_copy_vault_account_id != "" && rule.value.copy_action != null ? rule.value.copy_action : {}
20+
for_each = rule.value.copy_action != null ? rule.value.copy_action : {}
2021
content {
2122
lifecycle {
2223
delete_after = copy_action.value
@@ -47,7 +48,7 @@ resource "aws_backup_plan" "dynamodb" {
4748
cold_storage_after = rule.value.lifecycle.cold_storage_after != null ? rule.value.lifecycle.cold_storage_after : null
4849
}
4950
dynamic "copy_action" {
50-
for_each = var.backup_copy_vault_arn != "" && var.backup_copy_vault_account_id != "" && rule.value.copy_action != null ? rule.value.copy_action : {}
51+
for_each = rule.value.copy_action != null ? rule.value.copy_action : {}
5152
content {
5253
lifecycle {
5354
delete_after = copy_action.value
@@ -60,9 +61,10 @@ resource "aws_backup_plan" "dynamodb" {
6061
}
6162

6263
resource "aws_backup_selection" "default" {
64+
count = var.backup_plan_config.enable ? 1 : 0
6365
iam_role_arn = aws_iam_role.backup.arn
6466
name = "${local.resource_name_prefix}-selection"
65-
plan_id = aws_backup_plan.default.id
67+
plan_id = aws_backup_plan.default[0].id
6668

6769
selection_tag {
6870
key = var.backup_plan_config.selection_tag

terraform/account-wide-infrastructure/modules/backup-source/backup_report_plan.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ resource "aws_backup_report_plan" "resource_compliance" {
5454
}
5555

5656
resource "aws_backup_report_plan" "copy_jobs" {
57-
count = var.backup_copy_vault_arn != "" && var.backup_copy_vault_account_id != "" ? 1 : 0
57+
count = var.backup_plan_config.enable || var.backup_plan_config_dynamodb.enable ? 1 : 0
5858
name = "copy_jobs"
5959
description = "Report for showing whether copies ran successfully in the last 24 hours"
6060

terraform/account-wide-infrastructure/modules/backup-source/backup_vault_policy.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ data "aws_iam_policy_document" "vault_policy" {
3030
resources = ["*"]
3131
}
3232
dynamic "statement" {
33-
for_each = var.backup_copy_vault_arn != "" && var.backup_copy_vault_account_id != "" ? [1] : []
33+
for_each = var.backup_plan_config.enable || var.backup_plan_config_dynamodb.enable ? [1] : []
3434
content {
3535
sid = "Allow account to copy into backup vault"
3636
effect = "Allow"

terraform/account-wide-infrastructure/modules/backup-source/variables.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ variable "backup_copy_vault_account_id" {
7474
variable "backup_plan_config" {
7575
description = "Configuration for backup plans"
7676
type = object({
77+
enable = bool
7778
selection_tag = string
7879
compliance_resource_types = list(string)
7980
rules = list(object({

0 commit comments

Comments
 (0)