Skip to content

Commit dd5d3b3

Browse files
Eli 662: DQ metrics bucket (#577)
* eli 662 - DQ Bucket and policy names cleanup * eli 621 - revert policy name change
1 parent 8e8ce7b commit dd5d3b3

3 files changed

Lines changed: 70 additions & 3 deletions

File tree

infrastructure/stacks/api-layer/iam_policies.tf

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ data "aws_iam_policy_document" "s3_audit_bucket_policy" {
273273
}
274274
}
275275

276-
# Attach s3 write policy to external write role
276+
# Attach s3 write policy to lambda write role - rename below to lambda_s3_audit_write_policy
277277
resource "aws_iam_role_policy" "external_s3_write_policy" {
278278
name = "S3WriteAccess"
279279
role = aws_iam_role.eligibility_lambda_role.id
@@ -351,6 +351,7 @@ resource "aws_kms_key_policy" "s3_rules_kms_key" {
351351
policy = data.aws_iam_policy_document.s3_rules_kms_key_policy.json
352352
}
353353

354+
# KMS key policy for consumer mapping file
354355
data "aws_iam_policy_document" "s3_consumer_mapping_kms_key_policy" {
355356
#checkov:skip=CKV_AWS_111: Root user needs full KMS key management
356357
#checkov:skip=CKV_AWS_356: Root user needs full KMS key management
@@ -755,3 +756,60 @@ resource "aws_iam_role_policy_attachment" "attach_rotation_sfn" {
755756
role = aws_iam_role.rotation_sfn_role.name
756757
policy_arn = aws_iam_policy.rotation_sfn_policy.arn
757758
}
759+
760+
#DQ policies
761+
# Policy doc for S3 DQ bucket
762+
data "aws_iam_policy_document" "s3_dq_bucket_policy" {
763+
statement {
764+
sid = "AllowSSLRequestsOnly"
765+
actions = [
766+
"s3:ListBucket",
767+
"s3:GetBucketLocation",
768+
"s3:GetObject",
769+
"s3:PutObject",
770+
"s3:DeleteObject", // Critical for Spark staging/committing
771+
"s3:AbortMultipartUpload" // Important for large dataframes if job fails
772+
]
773+
resources = [
774+
module.s3_dq_metrics_bucket.storage_bucket_arn,
775+
"${module.s3_dq_metrics_bucket.storage_bucket_arn}/*",
776+
]
777+
condition {
778+
test = "Bool"
779+
values = ["true"]
780+
variable = "aws:SecureTransport"
781+
}
782+
}
783+
}
784+
785+
# Attach DQ s3 write policy to external write role
786+
resource "aws_iam_role_policy" "external_dq_s3_write_policy" {
787+
count = length(aws_iam_role.write_access_role)
788+
name = "S3DQWriteAccess"
789+
role = aws_iam_role.write_access_role[count.index].id
790+
policy = data.aws_iam_policy_document.s3_dq_bucket_policy.json
791+
}
792+
793+
# KMS access policy for S3 DQ bucket to external write role
794+
data "aws_iam_policy_document" "s3_dq_kms_access_policy" {
795+
statement {
796+
actions = [
797+
"kms:Encrypt",
798+
"kms:Decrypt",
799+
"kms:ReEncrypt*",
800+
"kms:GenerateDataKey*",
801+
"kms:DescribeKey"
802+
]
803+
resources = [
804+
module.s3_dq_metrics_bucket.storage_bucket_kms_key_arn
805+
]
806+
}
807+
}
808+
809+
# Attach KMS policy to external write role
810+
resource "aws_iam_role_policy" "external_s3_kms_access_policy" {
811+
count = length(aws_iam_role.write_access_role)
812+
name = "KMSAccessForS3DQ"
813+
role = aws_iam_role.write_access_role[count.index].id
814+
policy = data.aws_iam_policy_document.s3_dq_kms_access_policy.json
815+
}

infrastructure/stacks/api-layer/s3_buckets.tf

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ module "s3_lambda_artifact_bucket" {
4444
workspace = terraform.workspace
4545
}
4646

47-
output "lambda_artifact_bucket" {
48-
value = module.s3_lambda_artifact_bucket.storage_bucket_name
47+
module "s3_dq_metrics_bucket" {
48+
source = "../../modules/s3"
49+
bucket_name = "dq-metrics"
50+
environment = var.environment
51+
project_name = var.project_name
52+
stack_name = local.stack_name
53+
workspace = terraform.workspace
4954
}

infrastructure/stacks/iams-developer-roles/github_actions_policies.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,10 @@ resource "aws_iam_policy" "s3_management" {
231231
"arn:aws:s3:::*eligibility-signposting-api-${var.environment}-eli-artifacts/*",
232232
"arn:aws:s3:::*eligibility-signposting-api-${var.environment}-eli-artifacts-access-logs",
233233
"arn:aws:s3:::*eligibility-signposting-api-${var.environment}-eli-artifacts-access-logs/*",
234+
"arn:aws:s3:::*eligibility-signposting-api-${var.environment}-dq-metrics",
235+
"arn:aws:s3:::*eligibility-signposting-api-${var.environment}-dq-metrics/*",
236+
"arn:aws:s3:::*eligibility-signposting-api-${var.environment}-dq-metrics-access-logs",
237+
"arn:aws:s3:::*eligibility-signposting-api-${var.environment}-dq-metrics-access-logs/*",
234238
]
235239
}
236240
]

0 commit comments

Comments
 (0)