Skip to content

Commit 60d567d

Browse files
authored
Merge pull request #455 from NHSDigital/feature/eja-eli-510-add-CSOC-api-log-forwarding
Feature/eja eli 510 add csoc api log forwarding
2 parents d9295a2 + 4f4f2b1 commit 60d567d

File tree

3 files changed

+38
-14
lines changed

3 files changed

+38
-14
lines changed

infrastructure/stacks/api-layer/csoc_log_forwarding.tf

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ data "aws_iam_policy_document" "cwl_subscription_assume_role" {
1414

1515
principals {
1616
type = "Service"
17-
identifiers = ["logs.${var.default_aws_region}.amazonaws.com"]
17+
identifiers = ["logs.amazonaws.com"]
18+
}
19+
20+
condition {
21+
test = "StringEquals"
22+
variable = "aws:SourceAccount"
23+
values = [data.aws_caller_identity.current.account_id]
1824
}
1925
}
2026
}
@@ -33,39 +39,39 @@ resource "aws_iam_role" "cwl_subscription_role" {
3339
)
3440
}
3541

36-
# IAM policy to allow PutSubscriptionFilter on the existing API Gateway log group and CSOC destination
37-
data "aws_iam_policy_document" "put_subscription_filter" {
42+
# IAM policy to allow CloudWatch Logs to write to the CSOC destination
43+
# This is the permission policy for the role that CloudWatch Logs assumes
44+
data "aws_iam_policy_document" "cwl_to_csoc_destination" {
3845
statement {
39-
sid = "AllowPutAPIGSubFilter"
46+
sid = "AllowPutLogEventsToDestination"
4047
effect = "Allow"
4148
actions = [
42-
"logs:PutSubscriptionFilter"
49+
"logs:PutLogEvents"
4350
]
4451
resources = [
45-
"${module.eligibility_signposting_api_gateway.cloudwatch_destination_arn}:*",
4652
"arn:aws:logs:${var.default_aws_region}:693466633220:destination:api_gateway_log_destination"
4753
]
4854
}
4955
}
5056

51-
resource "aws_iam_policy" "put_subscription_filter" {
52-
name = "${var.environment}-${local.workspace}-PutSubscriptionFilterPolicy"
53-
description = "Policy to allow creating subscription filters for CSOC log forwarding"
54-
policy = data.aws_iam_policy_document.put_subscription_filter.json
57+
resource "aws_iam_policy" "cwl_to_csoc_destination" {
58+
name = "${var.environment}-${local.workspace}-CWLogsToCSOCDestinationPolicy"
59+
description = "Policy to allow CloudWatch Logs to write to CSOC destination"
60+
policy = data.aws_iam_policy_document.cwl_to_csoc_destination.json
5561

5662
tags = merge(
5763
local.tags,
5864
{
59-
Name = "${var.environment}-${local.workspace}-PutSubscriptionFilterPolicy"
65+
Name = "${var.environment}-${local.workspace}-CWLogsToCSOCDestinationPolicy"
6066
Purpose = "CSOC log forwarding"
6167
}
6268
)
6369
}
6470

6571
# Attach the policy to the subscription role
66-
resource "aws_iam_role_policy_attachment" "put_subscription_filter" {
72+
resource "aws_iam_role_policy_attachment" "cwl_to_csoc_destination" {
6773
role = aws_iam_role.cwl_subscription_role.name
68-
policy_arn = aws_iam_policy.put_subscription_filter.arn
74+
policy_arn = aws_iam_policy.cwl_to_csoc_destination.arn
6975
}
7076

7177
# Create the subscription filter to forward logs to CSOC
@@ -81,6 +87,6 @@ resource "aws_cloudwatch_log_subscription_filter" "csoc_forwarding" {
8187
depends_on = [
8288
module.eligibility_signposting_api_gateway,
8389
aws_iam_role.cwl_subscription_role,
84-
aws_iam_role_policy_attachment.put_subscription_filter
90+
aws_iam_role_policy_attachment.cwl_to_csoc_destination
8591
]
8692
}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,17 @@ resource "aws_iam_policy" "api_infrastructure" {
266266
"arn:aws:logs:${var.default_aws_region}:${data.aws_caller_identity.current.account_id}:log-group:/aws/kinesisfirehose/*"
267267
]
268268
},
269+
{
270+
Effect = "Allow",
271+
Action = [
272+
# CloudWatch Logs subscription to CSOC cross-account destination
273+
"logs:PutSubscriptionFilter"
274+
],
275+
Resource = [
276+
# CSOC cross-account destination for API Gateway logs
277+
"arn:aws:logs:${var.default_aws_region}:693466633220:destination:api_gateway_log_destination"
278+
]
279+
},
269280
{
270281
Effect = "Allow",
271282
Action = [
@@ -464,12 +475,15 @@ resource "aws_iam_policy" "iam_management" {
464475
"iam:CreateRole",
465476
"iam:DeleteRole",
466477
"iam:UpdateRole",
478+
"iam:UpdateAssumeRolePolicy",
467479
"iam:PutRolePolicy",
468480
"iam:PutRolePermissionsBoundary",
469481
"iam:AttachRolePolicy",
470482
"iam:DetachRolePolicy",
471483
"iam:CreatePolicy",
472484
"iam:CreatePolicyVersion",
485+
"iam:DeletePolicy",
486+
"iam:DeletePolicyVersion",
473487
"iam:TagRole",
474488
"iam:PassRole",
475489
"iam:TagPolicy",
@@ -490,6 +504,7 @@ resource "aws_iam_policy" "iam_management" {
490504
"arn:aws:iam::*:policy/*api-gateway-logging-policy",
491505
"arn:aws:iam::*:policy/*PermissionsBoundary",
492506
"arn:aws:iam::*:policy/*PutSubscriptionFilterPolicy",
507+
"arn:aws:iam::*:policy/*CWLogsToCSOCDestinationPolicy",
493508
# VPC flow logs role
494509
"arn:aws:iam::*:role/vpc-flow-logs-role",
495510
# API role

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,15 @@ data "aws_iam_policy_document" "permissions_boundary" {
101101
"iam:CreateRole",
102102
"iam:DeleteRole",
103103
"iam:UpdateRole",
104+
"iam:UpdateAssumeRolePolicy",
104105
"iam:PutRolePolicy",
105106
"iam:PutRolePermissionsBoundary",
106107
"iam:AttachRolePolicy",
107108
"iam:DetachRolePolicy",
108109
"iam:CreatePolicy",
109110
"iam:CreatePolicyVersion",
111+
"iam:DeletePolicy",
112+
"iam:DeletePolicyVersion",
110113
"iam:TagRole",
111114
"iam:UntagPolicy",
112115
"iam:PassRole",

0 commit comments

Comments
 (0)