@@ -240,7 +240,16 @@ resource "aws_iam_policy" "api_infrastructure" {
240240 " acm:ListCertificates" ,
241241 # WAF v2 list operations
242242 " wafv2:ListWebACLs" ,
243- " wafv2:ListTagsForResource"
243+ " wafv2:ListTagsForResource" ,
244+ # CloudWatch Logs resource policies (require wildcard)
245+ " logs:PutResourcePolicy" ,
246+ " logs:DeleteResourcePolicy" ,
247+ " logs:DescribeResourcePolicies" ,
248+ # CloudWatch Logs delivery for WAF
249+ " logs:CreateLogDelivery" ,
250+ " logs:DeleteLogDelivery" ,
251+ # IAM service-linked role for WAF logging
252+ " iam:CreateServiceLinkedRole"
244253
245254 ],
246255 Resource = " *"
@@ -251,6 +260,7 @@ resource "aws_iam_policy" "api_infrastructure" {
251260 Action = [
252261 # CloudWatch Logs creation and management
253262 " logs:CreateLogGroup" ,
263+ " logs:DeleteLogGroup" ,
254264 " logs:CreateLogStream" ,
255265 " logs:PutLogEvents" ,
256266 # CloudWatch Logs subscription filters for CSOC forwarding
@@ -266,7 +276,11 @@ resource "aws_iam_policy" "api_infrastructure" {
266276 # API Gateway logs
267277 " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:/aws/apigateway/*" ,
268278 # Kinesis Firehose logs
269- " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:/aws/kinesisfirehose/*"
279+ " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:/aws/kinesisfirehose/*" ,
280+ # WAF v2 logs (both naming conventions)
281+ " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:/aws/wafv2/*" ,
282+ " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:aws-wafv2-logs-*" ,
283+ " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:aws-waf-logs-*"
270284 ]
271285 },
272286 {
@@ -376,6 +390,7 @@ resource "aws_iam_policy" "api_infrastructure" {
376390 " wafv2:CreateWebACL" ,
377391 " wafv2:DeleteWebACL" ,
378392 " wafv2:GetWebACL" ,
393+ " wafv2:GetWebACLForResource" ,
379394 " wafv2:UpdateWebACL" ,
380395 " wafv2:TagResource" ,
381396 " wafv2:UntagResource" ,
@@ -405,6 +420,7 @@ resource "aws_iam_policy" "api_infrastructure" {
405420 " arn:aws:acm:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :certificate/*" ,
406421 " arn:aws:events:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :rule/cloudwatch-alarm-state-change-to-splunk*" ,
407422 " arn:aws:wafv2:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :regional/webacl/*" ,
423+ " arn:aws:wafv2:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :regional/managedruleset/*" ,
408424 ]
409425 },
410426 ]
@@ -615,6 +631,7 @@ resource "aws_iam_policy" "cloudwatch_management" {
615631 Action = [
616632 " logs:ListTagsForResource" ,
617633 " logs:DescribeLogGroups" ,
634+ " logs:DeleteLogGroup" ,
618635 " logs:PutRetentionPolicy" ,
619636 " logs:TagResource" ,
620637 " logs:UntagResource" ,
@@ -643,6 +660,8 @@ resource "aws_iam_policy" "cloudwatch_management" {
643660 Resource = [
644661 " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:/aws/kinesisfirehose/*" ,
645662 " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:/aws/wafv2/*" ,
663+ " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:aws-wafv2-logs-*" ,
664+ " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:aws-waf-logs-*" ,
646665 " arn:aws:cloudwatch:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :alarm:*" ,
647666 " arn:aws:sns:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :cloudwatch-security-alarms*" ,
648667 " arn:aws:logs:${ var . default_aws_region } :${ data . aws_caller_identity . current . account_id } :log-group:/aws/apigateway/default-eligibility-signposting-api*" ,
0 commit comments