Skip to content

Commit e8592a6

Browse files
firehose cloudwatch logs
1 parent 01dee91 commit e8592a6

7 files changed

Lines changed: 51 additions & 2 deletions

File tree

infrastructure/modules/kinesis_firehose/kinesis_firehose_delivery_stream.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ resource "aws_kinesis_firehose_delivery_stream" "eligibility_audit_firehose_deli
99
buffering_size = 1
1010
buffering_interval = 60
1111
compression_format = "UNCOMPRESSED"
12+
13+
cloudwatch_logging_options {
14+
enabled = true
15+
log_group_name = var.kinesis_cloud_watch_log_group_name
16+
log_stream_name = "to-s3"
17+
}
1218
}
1319

1420
tags = var.tags

infrastructure/modules/kinesis_firehose/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,9 @@ variable "s3_audit_bucket_arn" {
1313
type = string
1414
}
1515

16+
variable "kinesis_cloud_watch_log_group_name" {
17+
description = "kinesis cloud watch log group name"
18+
type = string
19+
}
20+
21+

infrastructure/stacks/api-layer/cloudwatch.tf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,13 @@ resource "aws_cloudwatch_log_group" "lambda_logs" {
99
Stack = local.stack_name
1010
}
1111
}
12+
13+
resource "aws_cloudwatch_log_group" "firehose_audit" {
14+
name = "/aws/kinesisfirehose/${var.project_name}-${var.environment}-audit"
15+
retention_in_days = 365
16+
17+
tags = {
18+
Name = "kinesis-firehose-logs"
19+
Stack = local.stack_name
20+
}
21+
}

infrastructure/stacks/api-layer/iam_policies.tf

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,29 @@ resource "aws_iam_role_policy" "kinesis_firehose_s3_write_policy" {
6363
policy = data.aws_iam_policy_document.s3_audit_bucket_policy.json
6464
}
6565

66+
# Policy doc for firehose logging
67+
resource "aws_iam_role_policy" "kinesis_firehose_logs_policy" {
68+
name = "CloudWatchLogsAccess"
69+
role = aws_iam_role.eligibility_audit_firehose_role.id
70+
71+
policy = jsonencode({
72+
Version = "2012-10-17",
73+
Statement = [
74+
{
75+
Effect = "Allow",
76+
Action = [
77+
"logs:CreateLogStream",
78+
"logs:PutLogEvents",
79+
"logs:DescribeLogGroups",
80+
"logs:DescribeLogStreams"
81+
],
82+
Resource = "*"
83+
}
84+
]
85+
})
86+
}
87+
88+
6689
# Attach AWSLambdaVPCAccessExecutionRole to Lambda
6790
resource "aws_iam_role_policy_attachment" "AWSLambdaVPCAccessExecutionRole" {
6891
role = aws_iam_role.eligibility_lambda_role.id

infrastructure/stacks/api-layer/kinesis_firehose.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ module "eligibility_audit_firehose_delivery_stream" {
77
stack_name = local.stack_name
88
workspace = local.workspace
99
tags = local.tags
10+
kinesis_cloud_watch_log_group_name = aws_cloudwatch_log_group.firehose_audit.name
1011
}

src/eligibility_signposting_api/config/config.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
AwsRegion = NewType("AwsRegion", str)
1616
AwsAccessKey = NewType("AwsAccessKey", str)
1717
AwsSecretAccessKey = NewType("AwsSecretAccessKey", str)
18+
AwsKinesisFirehoseStreamName = NewType("AwsKinesisFirehoseStreamName", str)
1819

1920

2021
@cache
@@ -23,7 +24,7 @@ def config() -> dict[str, Any]:
2324
rules_bucket_name = BucketName(os.getenv("RULES_BUCKET_NAME", "test-rules-bucket"))
2425
audit_bucket_name = BucketName(os.getenv("AUDIT_BUCKET_NAME", "test-audit-bucket"))
2526
aws_default_region = AwsRegion(os.getenv("AWS_DEFAULT_REGION", "eu-west-1"))
26-
kinesis_audit_stream_to_s3 = AwsRegion(os.getenv("KINESIS_AUDIT_STREAM_TO_S3", "test_kinesis_audit_stream_to_s3"))
27+
kinesis_audit_stream_to_s3 = AwsKinesisFirehoseStreamName(os.getenv("KINESIS_AUDIT_STREAM_TO_S3", "test_kinesis_audit_stream_to_s3"))
2728
log_level = LOG_LEVEL
2829

2930
if os.getenv("ENV"):

src/eligibility_signposting_api/services/audit_service.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66
from wireup import Inject, service
77
from yarl import URL
88

9+
from eligibility_signposting_api.config.config import AwsKinesisFirehoseStreamName
10+
911
logger = logging.getLogger(__name__)
1012

1113

1214
@service
1315
class AuditService:
1416

15-
def __init__(self, firehose: Annotated[BaseClient, Inject(qualifier="firehose")], audit_delivery_stream: Annotated[URL, Inject(param="kinesis_audit_stream_to_s3")] ) -> None:
17+
def __init__(self, firehose: Annotated[BaseClient, Inject(qualifier="firehose")], audit_delivery_stream: Annotated[AwsKinesisFirehoseStreamName, Inject(param="kinesis_audit_stream_to_s3")] ) -> None:
1618
super().__init__()
1719
self.firehose = firehose
1820
self.audit_delivery_stream = audit_delivery_stream

0 commit comments

Comments
 (0)