@@ -235,6 +235,10 @@ resource "aws_iam_policy" "s3_management" {
235235 " arn:aws:s3:::*eligibility-signposting-api-${ var . environment } -dq-metrics/*" ,
236236 " arn:aws:s3:::*eligibility-signposting-api-${ var . environment } -dq-metrics-access-logs" ,
237237 " arn:aws:s3:::*eligibility-signposting-api-${ var . environment } -dq-metrics-access-logs/*" ,
238+ " arn:aws:s3:::*eligibility-signposting-api-${ var . environment } -eli-cloudwatch-logs" ,
239+ " arn:aws:s3:::*eligibility-signposting-api-${ var . environment } -eli-cloudwatch-logs/*" ,
240+ " arn:aws:s3:::*eligibility-signposting-api-${ var . environment } -eli-cloudwatch-logs-access-logs" ,
241+ " arn:aws:s3:::*eligibility-signposting-api-${ var . environment } -eli-cloudwatch-logs-access-logs/*" ,
238242 ]
239243 }
240244 ]
@@ -259,6 +263,12 @@ resource "aws_iam_policy" "api_infrastructure" {
259263 Effect = " Allow" ,
260264 Action = [
261265 " logs:Describe*" ,
266+ " cloudtrail:DescribeTrails" ,
267+ " cloudtrail:GetEventSelectors" ,
268+ " cloudtrail:GetTrail" ,
269+ " cloudtrail:GetTrailStatus" ,
270+ " cloudtrail:ListTags" ,
271+ " cloudtrail:ListTrails" ,
262272 " ssm:DescribeParameters" ,
263273 " ec2:Describe*" ,
264274 " ec2:DescribeVpcs" ,
@@ -315,7 +325,10 @@ resource "aws_iam_policy" "api_infrastructure" {
315325 " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:/aws/wafv2/*" ,
316326 " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:aws-wafv2-logs-*" ,
317327 " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:aws-waf-logs-*" ,
318- " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:/aws/stepfunctions/*"
328+ " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:/aws/stepfunctions/*" ,
329+ # CloudTrail log group
330+ " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:*elid-aws-cloudtrail-logs" ,
331+ " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:*elid-aws-cloudtrail-logs:*"
319332 ]
320333 },
321334 {
@@ -348,7 +361,9 @@ resource "aws_iam_policy" "api_infrastructure" {
348361 " arn:aws:iam::${ data . aws_caller_identity . current . account_id } :role/*firehose*role*" ,
349362 " arn:aws:iam::${ data . aws_caller_identity . current . account_id } :role/splunk-firehose-assume-role*" ,
350363 # CSOC CloudWatch Logs subscription role
351- " arn:aws:iam::${ data . aws_caller_identity . current . account_id } :role/*-CWLogsSubscriptionRole"
364+ " arn:aws:iam::${ data . aws_caller_identity . current . account_id } :role/*-CWLogsSubscriptionRole" ,
365+ # CloudTrail to CloudWatch Logs role
366+ " arn:aws:iam::${ data . aws_caller_identity . current . account_id } :role/cloudtrail-cloudwatch-role"
352367 ],
353368 Condition = {
354369 StringEquals = {
@@ -358,7 +373,8 @@ resource "aws_iam_policy" "api_infrastructure" {
358373 " vpc-flow-logs.amazonaws.com" ,
359374 " events.amazonaws.com" ,
360375 " firehose.amazonaws.com" ,
361- " logs.amazonaws.com"
376+ " logs.amazonaws.com" ,
377+ " cloudtrail.amazonaws.com"
362378 ]
363379 }
364380 }
@@ -374,6 +390,16 @@ resource "aws_iam_policy" "api_infrastructure" {
374390 " logs:PutMetricFilter" ,
375391 " logs:TagResource" ,
376392
393+ # CloudTrail
394+ " cloudtrail:AddTags" ,
395+ " cloudtrail:CreateTrail" ,
396+ " cloudtrail:DeleteTrail" ,
397+ " cloudtrail:PutEventSelectors" ,
398+ " cloudtrail:RemoveTags" ,
399+ " cloudtrail:StartLogging" ,
400+ " cloudtrail:StopLogging" ,
401+ " cloudtrail:UpdateTrail" ,
402+
377403 # EC2 permissions
378404 " ec2:CreateTags" ,
379405 " ec2:DeleteTags" ,
@@ -460,6 +486,8 @@ resource "aws_iam_policy" "api_infrastructure" {
460486 " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:/aws/apigateway/*" ,
461487 " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:/aws/kinesisfirehose/eligibility-signposting-api-${ var . environment } -audit/*" ,
462488 " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:NHSDAudit_trail_log_group*" ,
489+ " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:*elid-aws-cloudtrail-logs" ,
490+ " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:*elid-aws-cloudtrail-logs:*" ,
463491 " arn:aws:ssm:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :parameter/${ var . environment } /*" ,
464492 " arn:aws:ssm:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :parameter/splunk/*" ,
465493 " arn:aws:ssm:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :parameter/ptl/*" ,
@@ -469,7 +497,8 @@ resource "aws_iam_policy" "api_infrastructure" {
469497 " arn:aws:wafv2:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :regional/webacl/*" ,
470498 " arn:aws:wafv2:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :regional/managedruleset/*" ,
471499 " arn:aws:states:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :stateMachine:*" ,
472- " arn:aws:events:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :rule/*"
500+ " arn:aws:events:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :rule/*" ,
501+ " arn:aws:cloudtrail:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :trail/${ var . project_name } -${ var . environment } -*"
473502 ]
474503 },
475504 ]
@@ -605,7 +634,9 @@ resource "aws_iam_policy" "iam_management" {
605634 # Eventbridge invoke step functions role
606635 " arn:aws:iam::*:role/eventbridge_invoke_sfn_role" ,
607636 " arn:aws:iam::*:role/secret_rotation_lambda_role" ,
608- " arn:aws:iam::*:role/secret_rotation_workflow_role"
637+ " arn:aws:iam::*:role/secret_rotation_workflow_role" ,
638+ # CloudTrail to CloudWatch Logs role
639+ " arn:aws:iam::*:role/cloudtrail-cloudwatch-role"
609640 ]
610641 }
611642 ]
0 commit comments