ソースを参照

Updates tfsec/checkov Ignore comments for aws-iam-no-policy-wildcards

No actual changes to infra; just syntax updates and Ignore comments for aws-iam-no-policy-wildcards and Checkov equivalent

# Globally ignore the checks for tfsec
  ignored_tfsec = [
    "aws-iam-no-policy-wildcards", # We use wildcards in policies

ID             - aws-iam-no-policy-wildcards
Severity   - High
Impact     - Overly permissive policies may grant access to sensitive resources
Resolution - Specify the exact permissions required, and to which resources they should apply instead of using wildcards.

tfsec       - https://aquasecurity.github.io/tfsec/v1.27.1/checks/aws/iam/no-policy-wildcards/
checkov    - https://docs.bridgecrew.io/docs/ensure-iam-policies-do-not-allow-write-access-without-constraint
tf registry - https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document
AWS         - https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html

To be tagged as v5.2.8
Jeremy Cooper [AFS MBP] 3 年 前
コミット
82b8d76a53

+ 1 - 0
base/CA_Infrastructure/root_CA/iam_splunk_sh.tf

@@ -22,6 +22,7 @@ resource "aws_iam_role" "run_audit_report_role" {
 
 # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
 data "aws_iam_policy_document" "run_audit_report_policy_doc" {
+	# checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   statement {
     sid       = ""
     effect    = "Allow"

+ 1 - 0
base/CA_Infrastructure/subordinate_CAs/iam_splunk_sh.tf

@@ -23,6 +23,7 @@ resource "aws_iam_role" "run_audit_report_role" {
 
 # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
 data "aws_iam_policy_document" "run_audit_report_policy_doc" {
+	# checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   statement {
     sid       = ""
     effect    = "Allow"

+ 1 - 1
base/account_standards/flowlogs.tf

@@ -28,6 +28,7 @@ resource "aws_iam_role" "flowlogs" {
 EOF
 }
 
+# tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
 resource "aws_iam_role_policy" "flowlogs" {
   name = "flowlogs"
   role = aws_iam_role.flowlogs.id
@@ -45,7 +46,6 @@ resource "aws_iam_role_policy" "flowlogs" {
         "logs:DescribeLogStreams"
       ],
       "Effect": "Allow",
-      # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
       "Resource": "*"
     }
   ]

+ 10 - 7
base/account_standards/iam.tf

@@ -34,11 +34,11 @@ resource "aws_iam_role" "default_instance_role" {
 
 data "aws_iam_policy_document" "default_instance_policy_doc" {
   statement {
-    effect = "Allow"
+    effect  = "Allow"
     actions = [
       "ec2:DescribeTags"
     ]
-
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
     resources = [
       "*"
     ]
@@ -67,7 +67,8 @@ data "aws_iam_policy_document" "default_instance_policy_s3_binaries_doc" {
   statement {
     sid       = "GetFromTheBucket"
     effect    = "Allow"
-    resources = ["arn:${var.aws_partition}:s3:::${var.binaries_bucket}/*"] # tfsec:ignore:aws-iam-no-policy-wildcards This is read-only access
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
+    resources = ["arn:${var.aws_partition}:s3:::${var.binaries_bucket}/*"]
 
     actions = [
       "s3:GetObject",
@@ -125,7 +126,7 @@ data "aws_iam_policy_document" "cloudwatch_events" {
     actions = [
       "events:PutRule"
     ]
-    # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
     resources = ["*"]
   }
 }
@@ -262,14 +263,16 @@ resource "aws_iam_role" "splunk_addon_for_aws" {
   assume_role_policy = data.aws_iam_policy_document.splunk_addon_for_aws_assume_role.json
 }
 
-# tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
 data "aws_iam_policy_document" "policy" {
+  # checkov:skip=CKV_AWS_107: IAM policies does not allow credentials exposure for ECR
+  # checkov:skip=CKV_AWS_108: no data exfiltration allowed; resource constraints implemented
+  # checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
+  # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
   statement {
     sid       = ""
     effect    = "Allow"
-    
     resources = ["*"]
-    actions = [
+    actions   = [
       "sqs:GetQueueAttributes",
       "sqs:ListQueues",
       "sqs:ReceiveMessage",

+ 1 - 1
base/account_standards_c2/iam.moose-hf.tf

@@ -42,6 +42,7 @@ output "access_keys" {
 
 ######################
 # The policy is attached to both the user and the instance profile
+# tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
 resource "aws_iam_policy" "moose-hf" {
   name        = "moose-hf"
   path        = "/instance/"
@@ -59,7 +60,6 @@ resource "aws_iam_policy" "moose-hf" {
           "logs:DescribeLogStreams",
           "logs:GetLogEvents"
       ],
-      # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
       "Resource": "*"
     }
   ]

+ 5 - 2
base/customer_portal_lambda/iam.tf

@@ -1,6 +1,8 @@
+# tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
 data "aws_iam_policy_document" "policy_portal_data_sync_lambda" {
+	# checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   statement {
-    effect = "Allow"
+    effect  = "Allow"
     actions = [
       "ec2:CreateNetworkInterface",
       "logs:CreateLogStream",
@@ -15,8 +17,9 @@ data "aws_iam_policy_document" "policy_portal_data_sync_lambda" {
     resources = ["*"]
   }
 
+  # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
   statement {
-    effect = "Allow"
+    effect  = "Allow"
     actions = [
       "sqs:*",
     ]

+ 2 - 0
base/customer_portal_lambda/sqs.tf

@@ -51,6 +51,8 @@ resource "aws_kms_key" "sqs_key" {
 }
 
 data "aws_iam_policy_document" "sqs_kms_policy" {
+	# checkov:skip=CKV_AWS_109: see tfsec aws-iam-no-policy-wildcard ignore comment
+	# checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   statement {
     sid    = "AllowServices"
     effect = "Allow"

+ 2 - 2
base/generic_s3_bucket_with_role/iam.tf

@@ -65,8 +65,8 @@ resource "aws_iam_policy" "policy" {
 
 data "aws_iam_policy_document" "policy_doc" {
   statement {
-    sid    = "GeneralBucketAccess"
-    effect = "Allow"
+    sid     = "GeneralBucketAccess"
+    effect  = "Allow"
     actions = [
       "s3:ListAllMyBuckets",
     ]

+ 1 - 0
base/github/instance_profile.tf

@@ -19,6 +19,7 @@ resource "aws_iam_policy" "github_instance_policy" {
 }
 
 data "aws_iam_policy_document" "github_instance_policy_doc" {
+  # checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   # Allow using S3 for GH Actions
   statement {
     sid    = "GeneralBucketAccess"

+ 1 - 1
base/rhsso/nlb.tf

@@ -18,7 +18,7 @@ module "public_dns_record" {
 resource "aws_lb" "external" {
   name               = "rhsso-external-nlb"
   load_balancer_type = "network"
-  internal           = false # tfsec:ignore:aws-elb-alb-not-public:exp:2022-08-01
+  internal           = false # tfsec:ignore:aws-elb-alb-not-public
   subnets            = var.public_subnets
 
   access_logs {

+ 4 - 3
base/salt_master_inventory_role/inventory_role.tf

@@ -87,14 +87,15 @@ resource "aws_iam_policy" "salt_master_inventory_policy" {
 
 data "aws_iam_policy_document" "salt_master_inventory_policy_doc" {
   statement {
-    sid    = "DescribeAllAssets"
-    effect = "Allow"
+    sid     = "DescribeAllAssets"
+    effect  = "Allow"
     actions = [
       "ec2:DescribeInstances",
       "ec2:DescribeRegions",
       "rds:DescribeDBInstances",
       "rds:ListTagsForResource"
     ]
-    resources = ["*"] # tfsec:ignore:aws-iam-no-policy-wildcards This is read-only access
+    # tfsec:ignore:aws-iam-no-policy-wildcards This is read-only access
+    resources = ["*"]
   }
 }

+ 1 - 0
base/splunk_servers/indexer_cluster/instance_profile_indexers.tf

@@ -14,6 +14,7 @@ resource "aws_iam_policy" "instance_policy_idx" {
 }
 
 data "aws_iam_policy_document" "instance_policy_doc_idx" {
+  # checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   # Allow copying to S3 for frozen
   # Allow use of S3 for SmartStore
   statement {

+ 30 - 26
base/standard_iam/codebuild.tf

@@ -3,12 +3,12 @@
 #-----------------------------------------------------------------------
 data "aws_iam_policy_document" "codebuild_role_assume_role_policy" {
   statement {
-    effect = "Allow"
+    effect  = "Allow"
     actions = [
       "sts:AssumeRole"
     ]
     principals {
-      type = "Service"
+      type        = "Service"
       identifiers = [
         "codebuild.amazonaws.com",
         "events.amazonaws.com"
@@ -65,43 +65,42 @@ resource "aws_iam_policy" "codebuild_basic_policy" {
 }
 
 data "aws_iam_policy_document" "codebuild_base_policy" {
+	# checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   statement {
-    sid    = "WriteCodebuildLogsToCloudwatchLogs"
-    effect = "Allow"
+    sid       = "WriteCodebuildLogsToCloudwatchLogs"
+    effect    = "Allow"
     resources = [
       "arn:${local.aws_partition}:logs:${local.aws_region}:${local.aws_account}:log-group:/aws/codebuild/*"
     ]
-    actions = [
+    actions   = [
       "logs:CreateLogGroup",
       "logs:CreateLogStream",
       "logs:PutLogEvents"
     ]
   }
 
-# tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
+  # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
   statement {
-    sid    = "StoreArtifactsInBucket"
-    effect = "Allow"
-
+    sid       = "StoreArtifactsInBucket"
+    effect    = "Allow"
     resources = [
       "arn:${local.aws_partition}:s3:::xdr-codebuild-artifacts/*"
     ]
-    actions = [
+    actions   = [
       "s3:PutObject",
       "s3:GetObject*",
       "s3:ListBucket"
     ]
   }
 
- # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
+  # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
   statement {
-    sid    = "UpdateECRRepos"
-    effect = "Allow"
-   
+    sid       = "UpdateECRRepos"
+    effect    = "Allow"
     resources = [
       "*"
     ]
-    actions = [
+    actions   = [
       "ecr:GetAuthorizationToken",
       "ecr:BatchCheckLayerAvailability",
       "ecr:CompleteLayerUpload",
@@ -112,14 +111,14 @@ data "aws_iam_policy_document" "codebuild_base_policy" {
     ]
   }
 
-# tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
+  # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
   statement {
-    sid    = "LetEventBridgeTriggerABuild"
-    effect = "Allow"
+    sid       = "LetEventBridgeTriggerABuild"
+    effect    = "Allow"
     resources = [
       "*"
     ]
-    actions = [
+    actions   = [
       "codebuild:StartBuild",
       "codebuild:StopBuild",
       "codebuild:BatchGet*",
@@ -147,8 +146,12 @@ resource "aws_iam_policy" "codebuild_build_ec2_amis_policy" {
   policy      = data.aws_iam_policy_document.codebuild_build_ec2_amis.json
 }
 
-# tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
 data "aws_iam_policy_document" "codebuild_build_ec2_amis" {
+  # checkov:skip=CKV_AWS_107: IAM policies does not allow credentials exposure for ECR
+  # checkov:skip=CKV_AWS_109: see tfsec aws-iam-no-policy-wildcard ignore comment
+  # checkov:skip=CKV_AWS_110: IAM policies does not allow privilege escalation
+  # checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
+  # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
 	statement {
 		sid       = "BuildEC2AMIFromPackerDocs"
 		effect    = "Allow"
@@ -184,10 +187,10 @@ data "aws_iam_policy_document" "codebuild_build_ec2_amis" {
 		]
 	}
 
-  # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
 	statement {
 		sid       = "BuildEC2WithInstanceRole"
 		effect    = "Allow"
+    # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
 		resources = [ "*" ]
 		actions   = [
 			"iam:PassRole"
@@ -206,12 +209,12 @@ data "aws_iam_policy_document" "codebuild_build_ec2_amis" {
 		]
 	}
 
-# tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
+  # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
   statement {
 		sid       = "KMSAccessNeededForEBS"
 		effect    = "Allow"
 		resources = [ "*" ]
-    	actions   = [
+    	actions = [
 			"kms:RevokeGrant",
 			"kms:ListGrants",
 			"kms:Decrypt",
@@ -221,11 +224,12 @@ data "aws_iam_policy_document" "codebuild_build_ec2_amis" {
 		]
 	}
 
+    # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
     statement {
 		sid       = "SSMCodeBuildPause"
 		effect    = "Allow"
 		resources = [ "*" ]
-    	actions   = [
+    	actions = [
         "ssmmessages:CreateControlChannel",
         "ssmmessages:CreateDataChannel",
         "ssmmessages:OpenControlChannel",
@@ -233,12 +237,12 @@ data "aws_iam_policy_document" "codebuild_build_ec2_amis" {
 		]
 	}
 
-# tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
+  # tfsec:ignore:aws-iam-no-policy-wildcards Allows use by the entire account
   statement {
     sid       = "CreateGrantForEBS"
     effect    = "Allow"
     resources = ["*"]
-    actions = [
+    actions   = [
       "kms:CreateGrant",
     ]
     condition {

+ 19 - 13
submodules/iam/bootstrap_mdradmin_policies/policy-mdradmin_tfstate_setup.tf

@@ -6,9 +6,11 @@ resource "aws_iam_policy" "mdradmin_tfstate_setup" {
 }
 
 data "aws_iam_policy_document" "mdradmin_tfstate_setup" {
+	# checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
+  # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
   statement {
-    sid = "DynamoDBTablesAndLocking"
-    actions = [ # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
+    sid     = "DynamoDBTablesAndLocking"
+    actions = [
       "dynamodb:*"
     ]
     resources = [
@@ -23,8 +25,9 @@ data "aws_iam_policy_document" "mdradmin_tfstate_setup" {
     }
   }
 
+  # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
   statement {
-    sid = "DynamoDBTablesAndLocking2"
+    sid     = "DynamoDBTablesAndLocking2"
     actions = [
       "dynamodb:ListTables"
     ]
@@ -34,15 +37,16 @@ data "aws_iam_policy_document" "mdradmin_tfstate_setup" {
     condition {
       test     = "BoolIfExists"
       variable = "aws:MultiFactorAuthPresent"
-      values = [
+      values   = [
         true
       ]
     }
   }
 
+  # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
   statement {
-    sid = "KMSKeyCreate"
-    actions = [ # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
+    sid     = "KMSKeyCreate"
+    actions = [
       "kms:CreateAlias",
       "kms:CreateKey",
       "kms:List*",
@@ -52,7 +56,6 @@ data "aws_iam_policy_document" "mdradmin_tfstate_setup" {
 
     # I wish I could scope this down to just specific keys
     # But I don't think it's possible
-    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
     resources = [
       "*"
     ]
@@ -64,9 +67,11 @@ data "aws_iam_policy_document" "mdradmin_tfstate_setup" {
       ]
     }
   }
+
+  # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
   statement {
-    sid = "S3ManageStateBucket"
-    actions = [ # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
+    sid     = "S3ManageStateBucket"
+    actions = [
       "s3:CreateBucket",
       "s3:DeleteBucket",
       "s3:ListBucket",
@@ -84,21 +89,22 @@ data "aws_iam_policy_document" "mdradmin_tfstate_setup" {
       ]
     }
   }
-  statement { # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
-    sid = "S3ObjectOperations"
+
+  # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
+  statement {
+    sid     = "S3ObjectOperations"
     actions = [
       "s3:PutObject*",
       "s3:GetObject*",
       "s3:DeleteObject*"
     ]
-    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
     resources = [
       "arn:${local.aws_partition}:s3:::${var.bucket_name}/*"
     ]
     condition {
       test     = "BoolIfExists"
       variable = "aws:MultiFactorAuthPresent"
-      values = [
+      values   = [
         true
       ]
     }

+ 7 - 8
submodules/iam/common_services_roles/role-mdr_developer.tf

@@ -23,15 +23,15 @@ resource "aws_iam_role_policy_attachment" "mdr_developer_ViewOnlyAccess" {
 }
 
 data "aws_iam_policy_document" "mdr_developer" {
+  # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
   statement {
-    sid    = "S3Access"
-    effect = "Allow"
-    actions = [ # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
+    sid     = "S3Access"
+    effect  = "Allow"
+    actions = [
       "s3:*"
     ]
 
     # These resources might not exist yet
-    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
     resources = [
       "arn:${local.aws_partition}:s3:::afsxdr-binaries",
       "arn:${local.aws_partition}:s3:::afsxdr-binaries/*",
@@ -41,12 +41,11 @@ data "aws_iam_policy_document" "mdr_developer" {
   }
 
   statement {
-    sid    = "AssumeThisRoleInOtherAccounts"
-    effect = "Allow"
-    actions = [
+    sid       = "AssumeThisRoleInOtherAccounts"
+    effect    = "Allow"
+    actions   = [
       "sts:AssumeRole"
     ]
-    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
     resources = [
       "arn:${local.aws_partition}:iam::*:role/user/mdr_developer",
     ]

+ 13 - 8
submodules/iam/okta_saml_roles/policy-mdr_engineer.tf

@@ -2,8 +2,13 @@
 # A variant on PowerUserAccess that isn't so damn generous with sts:assumeRole
 #------------------------------------------------------------------------------------------
 data "aws_iam_policy_document" "mdr_engineer" {
+  # checkov:skip=CKV_AWS_107: IAM policies does not allow credentials exposure for ECR
+  # checkov:skip=CKV_AWS_108: no data exfiltration allowed; resource constraints implemented
+  # checkov:skip=CKV_AWS_109: see tfsec aws-iam-no-policy-wildcard ignore comment
+  # checkov:skip=CKV_AWS_110: IAM policies does not allow privilege escalation
+  # checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   statement {
-    effect = "Allow"
+    effect      = "Allow"
     not_actions = [
       "sts:*",
       "iam:*",
@@ -14,7 +19,7 @@ data "aws_iam_policy_document" "mdr_engineer" {
     ]
   }
   statement {
-    effect = "Allow"
+    effect  = "Allow"
     actions = [
       "iam:CreateServiceLinkedRole",
       "iam:DeleteServiceLinkedRole",
@@ -30,17 +35,17 @@ data "aws_iam_policy_document" "mdr_engineer" {
       "iam:ListAttachedRolePolicies",
       "organizations:DescribeOrganization",
     ]
-
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
     resources = [
       "*",
     ]
   }
   statement {
-    effect = "Allow"
+    effect  = "Allow"
     actions = [
       "iam:PassRole",
     ]
-    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
     resources = [
       "arn:${local.aws_partition}:iam::${local.aws_account}:role/instance/*",
       "arn:${local.aws_partition}:iam::${local.aws_account}:role/lambda/*",
@@ -50,12 +55,12 @@ data "aws_iam_policy_document" "mdr_engineer" {
   }
 
   statement {
-    sid    = "AssumeThisRoleInOtherAccounts"
-    effect = "Allow"
+    sid     = "AssumeThisRoleInOtherAccounts"
+    effect  = "Allow"
     actions = [
       "sts:AssumeRole"
     ]
-    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
     resources = [
       "arn:${local.aws_partition}:iam::*:role/user/mdr_engineer",
       "arn:${local.aws_partition}:iam::*:role/mdr_engineer",

+ 7 - 5
submodules/iam/okta_saml_roles/policy-mdr_iam_admin.tf

@@ -1,9 +1,11 @@
 data "aws_iam_policy_document" "iam_admin_kms" {
-
+  # checkov:skip=CKV_AWS_109: see tfsec aws-iam-no-policy-wildcard ignore comment
+  # checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
+  # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
   statement {
-    sid    = "AllowKMSthings"
-    effect = "Allow"
-    actions = [ # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
+    sid     = "AllowKMSthings"
+    effect  = "Allow"
+    actions = [
       "kms:Create*",
       "kms:Describe*",
       "kms:Enable*",
@@ -19,7 +21,7 @@ data "aws_iam_policy_document" "iam_admin_kms" {
       "kms:ScheduleKeyDeletion",
       "kms:CancelKeyDeletion"
     ]
-    resources = ["*"] # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
+    resources = ["*"]
   }
 
 }

+ 5 - 0
submodules/iam/okta_saml_roles/policy-mdr_terraformer.tf

@@ -2,6 +2,11 @@
 # A variant on PowerUserAccess that isn't so damn generous with sts:assumeRole
 #------------------------------------------------------------------------------------------
 data "aws_iam_policy_document" "mdr_terraformer" {
+  # checkov:skip=CKV_AWS_107: IAM policies does not allow credentials exposure for ECR
+  # checkov:skip=CKV_AWS_108: no data exfiltration allowed; resource constraints implemented
+  # checkov:skip=CKV_AWS_109: see tfsec aws-iam-no-policy-wildcard ignore comment
+  # checkov:skip=CKV_AWS_110: IAM policies does not allow privilege escalation
+  # checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   statement {
     sid    = "AllowEverythingButAssumeRoleAndPassRole"
     effect = "Allow"

+ 13 - 10
submodules/iam/standard_iam_policies/policy-mdr_engineer.tf

@@ -2,8 +2,13 @@
 # A variant on PowerUserAccess that isn't so damn generous with sts:assumeRole
 #------------------------------------------------------------------------------------------
 data "aws_iam_policy_document" "mdr_engineer" {
+  # checkov:skip=CKV_AWS_107: IAM policies does not allow credentials exposure for ECR
+  # checkov:skip=CKV_AWS_108: no data exfiltration allowed; resource constraints implemented
+  # checkov:skip=CKV_AWS_109: see tfsec aws-iam-no-policy-wildcard ignore comment
+  # checkov:skip=CKV_AWS_110: IAM policies does not allow privilege escalation
+  # checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   statement {
-    effect = "Allow"
+    effect      = "Allow"
     not_actions = [
       "sts:*",
       "iam:*",
@@ -14,7 +19,7 @@ data "aws_iam_policy_document" "mdr_engineer" {
     ]
   }
   statement {
-    effect = "Allow"
+    effect  = "Allow"
     actions = [
       "iam:CreateServiceLinkedRole",
       "iam:DeleteServiceLinkedRole",
@@ -30,19 +35,18 @@ data "aws_iam_policy_document" "mdr_engineer" {
       "iam:ListAttachedRolePolicies",
       "organizations:DescribeOrganization",
     ]
-
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
     resources = [
       "*",
     ]
   }
 
-  # tfsec:ignore:aws-iam-no-policy-wildcards
   statement {
-    effect = "Allow"
+    effect  = "Allow"
     actions = [
       "iam:PassRole",
     ]
-
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
     resources = [
       "arn:${local.aws_partition}:iam::${local.aws_account}:role/instance/*",
       "arn:${local.aws_partition}:iam::${local.aws_account}:role/lambda/*",
@@ -52,13 +56,12 @@ data "aws_iam_policy_document" "mdr_engineer" {
   }
 
   statement {
-    sid    = "AssumeThisRoleInOtherAccounts"
-    effect = "Allow"
+    sid     = "AssumeThisRoleInOtherAccounts"
+    effect  = "Allow"
     actions = [
       "sts:AssumeRole"
     ]
-
-    # tfsec:ignore:aws-iam-no-policy-wildcards
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
     resources = [
       "arn:${local.aws_partition}:iam::*:role/user/mdr_engineer",
       "arn:${local.aws_partition}:iam::*:role/mdr_engineer",

+ 2 - 2
submodules/iam/standard_iam_policies/policy-mdr_feedmgmt.tf

@@ -3,8 +3,8 @@
 #------------------------------------------------------------------------------------------
 data "aws_iam_policy_document" "mdr_feedmgmt_s3access" {
   statement {
-    sid    = "S3BucketAccess"
-    effect = "Allow"
+    sid     = "S3BucketAccess"
+    effect  = "Allow"
     actions = [
       "s3:GetObject",
       "s3:GetObjectVersion",

+ 4 - 3
submodules/iam/standard_iam_policies/policy-mdr_iam_admin.tf

@@ -1,9 +1,11 @@
 data "aws_iam_policy_document" "iam_admin_kms" {
-
+  # checkov:skip=CKV_AWS_109: see tfsec aws-iam-no-policy-wildcard ignore comment
+  # checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
+  # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
   statement {
     sid    = "AllowKMSthings"
     effect = "Allow"
-    actions = [ # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
+    actions = [
       "kms:Create*",
       "kms:Describe*",
       "kms:Enable*",
@@ -19,7 +21,6 @@ data "aws_iam_policy_document" "iam_admin_kms" {
       "kms:ScheduleKeyDeletion",
       "kms:CancelKeyDeletion"
     ]
-    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
     resources = ["*"]
   }
 

+ 5 - 0
submodules/iam/standard_iam_policies/policy-mdr_terraformer.tf

@@ -2,6 +2,11 @@
 # A variant on PowerUserAccess that isn't so damn generous with sts:assumeRole
 #------------------------------------------------------------------------------------------
 data "aws_iam_policy_document" "mdr_terraformer" {
+  # checkov:skip=CKV_AWS_107: IAM policies does not allow credentials exposure for ECR
+  # checkov:skip=CKV_AWS_108: no data exfiltration allowed; resource constraints implemented
+  # checkov:skip=CKV_AWS_109: see tfsec aws-iam-no-policy-wildcard ignore comment
+  # checkov:skip=CKV_AWS_110: IAM policies does not allow privilege escalation
+  # checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   statement {
     sid    = "AllowEverythingButAssumeRoleAndPassRole"
     effect = "Allow"

+ 18 - 10
thirdparty/terraform-aws-kinesis-firehose-splunk/main.tf

@@ -51,6 +51,10 @@ resource "aws_kinesis_firehose_delivery_stream" "kinesis_firehose" {
 #Certificate CRLs need to be publicly accessible
 # tfsec:ignore:aws-s3-enable-versioning tfsec:ignore:aws-s3-no-public-buckets tfsec:ignore:aws-s3-enable-bucket-logging tfsec:ignore:aws-s3-block-public-acls
 resource "aws_s3_bucket" "kinesis_firehose_s3_bucket" { # tfsec:ignore:aws-s3-block-public-policy tfsec:ignore:aws-s3-ignore-public-acls tfsec:ignore:aws-s3-specify-public-access-block
+  # checkov:skip=CKV_AWS_18: see tfsec ignore - logging not enabled
+	# checkov:skip=CKV_AWS_21: see tfsec ignore - S3 object versioning is disabled
+  # checkov:skip=CKV_AWS_144: S3 bucket has no cross-region replication enabled
+	
   bucket = var.s3_bucket_name
 
   tags = var.tags
@@ -165,6 +169,7 @@ POLICY
 }
 
 data "aws_iam_policy_document" "lambda_policy_doc" {
+	# checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   statement {
     actions = [
       "logs:GetLogEvents",
@@ -191,7 +196,7 @@ data "aws_iam_policy_document" "lambda_policy_doc" {
     actions = [
       "logs:PutLogEvents",
     ]
-
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
     resources = [
       "*",
     ]
@@ -203,7 +208,7 @@ data "aws_iam_policy_document" "lambda_policy_doc" {
     actions = [
       "logs:CreateLogGroup",
     ]
-
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
     resources = [
       "*",
     ]
@@ -215,7 +220,7 @@ data "aws_iam_policy_document" "lambda_policy_doc" {
     actions = [
       "logs:CreateLogStream",
     ]
-
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
     resources = [
       "*",
     ]
@@ -229,8 +234,8 @@ data "aws_iam_policy_document" "lambda_policy_doc" {
       "kms:GenerateDataKey",
       "kms:Decrypt"
     ]
-
-    resources = [ # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
+    resources = [
       "*",
     ]
 
@@ -300,6 +305,7 @@ POLICY
 }
 
 data "aws_iam_policy_document" "kinesis_firehose_policy_document" {
+	# checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   statement {
     actions = [
       "s3:AbortMultipartUpload",
@@ -309,7 +315,7 @@ data "aws_iam_policy_document" "kinesis_firehose_policy_document" {
       "s3:ListBucketMultipartUploads",
       "s3:PutObject",
     ]
-
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
     resources = [
       aws_s3_bucket.kinesis_firehose_s3_bucket.arn,
       "${aws_s3_bucket.kinesis_firehose_s3_bucket.arn}/*",
@@ -348,8 +354,8 @@ data "aws_iam_policy_document" "kinesis_firehose_policy_document" {
       "kms:GenerateDataKey",
       "kms:Decrypt"
     ]
-
-    resources = [ # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
+    resources = [
       "*",
     ]
 
@@ -390,7 +396,9 @@ ROLE
 
 }
 
+# tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
 data "aws_iam_policy_document" "cloudwatch_to_fh_access_policy" {
+	# checkov:skip=CKV_AWS_111: see tfsec aws-iam-no-policy-wildcard ignore comment
   statement {
     actions = [
       "firehose:*",
@@ -421,8 +429,8 @@ data "aws_iam_policy_document" "cloudwatch_to_fh_access_policy" {
       "kms:GenerateDataKey",
       "kms:Decrypt"
     ]
-
-    resources = [ # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. Lockdown after baselining IAM permissions
+    # tfsec:ignore:aws-iam-no-policy-wildcards - baseline this setting first. We use wildcards in policies
+    resources = [
       "*",
     ]