🥒 CCC.VPC Test: cfi-20260526t102301z-vpc-bad

Test Parameters

ServiceTypevpc
ProviderServiceTypeec2:vpc
CatalogTypesCCC.VPC
TagFilter@MAIN, @CCC.VPC, ~@NEGATIVE, ~@OPT_IN
UIDvpc-0f3af4b6986f1e0ab
ResourceNamecfi-20260526t102301z-vpc-bad
Instance
{
  "ID": "main-aws",
  "Properties": {
    "Provider": "aws",
    "Region": "us-east-1",
    "AzureResourceGroup": "",
    "AzureSubscriptionID": "",
    "GcpProjectId": ""
  },
  "Services": [
    {
      "Type": "object-storage",
      "Properties": {
        "object-storage-retention-period-days": 2
      }
    },
    {
      "Type": "logging",
      "Properties": {
        "aws-cloud-trail-log-group-name": "cfi-test-log-group"
      }
    },
    {
      "Type": "vpc",
      "Properties": {
        "bad-vpc-id": "vpc-0f3af4b6986f1e0ab",
        "cn03-allowed-requester-vpc-ids": null,
        "cn03-allowed-requester-vpc-ids-csv": "vpc-0a591620e00092dc2,vpc-0dae16d47368ba7ae",
        "cn03-disallowed-requester-vpc-ids": null,
        "cn03-disallowed-requester-vpc-ids-csv": "vpc-0a7d07499ce3992e8,vpc-0eadc3a916f373b88",
        "cn03-non-allowlisted-requester-vpc-id": "vpc-0666381e8a3976bde",
        "cn03-receiver-vpc-id": "vpc-0d5625cb163976d86",
        "cn04-flow-log-group-name": "/aws/vpc/flow-logs/cfi-20260526t102301z-vpc"
      }
    }
  ],
  "Rules": {
    "permitted-account-ids": "",
    "permitted-regions": [
      "us-east-1"
    ]
  }
}
AwsCloudTrailLogGroupNamecfi-test-log-group
BadVpcIdvpc-0f3af4b6986f1e0ab
Cn03AllowedRequesterVpcIdsCsvvpc-0a591620e00092dc2,vpc-0dae16d47368ba7ae
Cn03DisallowedRequesterVpcIdsCsvvpc-0a7d07499ce3992e8,vpc-0eadc3a916f373b88
Cn03NonAllowlistedRequesterVpcIdvpc-0666381e8a3976bde
Cn03ReceiverVpcIdvpc-0d5625cb163976d86
Cn04FlowLogGroupName/aws/vpc/flow-logs/cfi-20260526t102301z-vpc
ObjectStorageRetentionPeriodDays2
PermittedRegions
[
  "us-east-1"
]
Provideraws
Regionus-east-1

Summary

Generated: 2026-05-26 10:32:45

Total Run Time: 16s

Features: 4

Scenarios: 7 (✅ 2 | ❌ 5)

Steps: 80 (✅ 65 | ❌ 5 | ⏭️ 10 | ❓ 0)

Feature: CCC.VPC.CN01.AR01 - Subscription must not contain default network resources
Scenario: Main check: no default VPC exists @vpc @tlp-amber @tlp-red @CCC.VPC.CN01 @CCC.VPC.CN01.AR01 @Policy @MAIN @CCC.VPC @DEFAULT
Given a cloud api for "{Instance}" in "api"35µs
And I call "{api}" with "GetServiceAPI" using argument "vpc"192µs
And I refer to "{result}" as "vpcService"23µs
When I call "{vpcService}" with "CountDefaultVpcs"166ms
Then "{result}" is "0"26µs
Feature: CCC.VPC.CN02.AR01 - No external IP by default in public subnets
Scenario: Main check (config): public subnets do not auto-assign external IPs @vpc @tlp-red @CCC.VPC.CN02 @CCC.VPC.CN02.AR01 @Policy @MAIN @CCC.VPC @DEFAULT
Given a cloud api for "{Instance}" in "api"28µs
And I call "{api}" with "GetServiceAPI" using argument "vpc"114µs
And I refer to "{result}" as "vpcService"26µs
Given I refer to "{UID}" as "TargetVpcId"25µs
When I call "{vpcService}" with "EvaluatePublicSubnetDefaultIPControl" using argument "{TargetVpcId}"289ms
Then "{result.ViolatingSubnetCount}" is "0"51µs
expected {result.ViolatingSubnetCount} to equal '0', got '2'
And "{result.Reason}" contains "disable default public IP"32µs
Scenario: Behavioural check (active): resource launched in public subnet is not assigned an external IP @vpc @tlp-red @CCC.VPC.CN02 @CCC.VPC.CN02.AR01 @Behavioural @MAIN @CCC.VPC
Given a cloud api for "{Instance}" in "api"110µs
And I call "{api}" with "GetServiceAPI" using argument "vpc"254µs
And I refer to "{result}" as "vpcService"16µs
Given I refer to "{UID}" as "TargetVpcId"14µs
When I call "{vpcService}" with "SelectPublicSubnetForTest" using argument "{TargetVpcId}"162ms
And I refer to "{result.SubnetId}" as "TestSubnetId"37µs
And I call "{vpcService}" with "CreateTestResourceInSubnet" using argument "{TestSubnetId}"2s
And I refer to "{result.ResourceId}" as "TestResourceId"41µs
And I call "{vpcService}" with "GetResourceExternalIpAssignment" using argument "{TestResourceId}"195ms
And I refer to "{result.HasExternalIp}" as "HasExternalIp"52µs
Then "{HasExternalIp}" is false32µs
When I call "{vpcService}" with "DeleteTestResource" using argument "{TestResourceId}"429ms
Then "{result.Deleted}" is true47µs
Feature: CCC.VPC.CN03.AR01 - Restrict VPC peering requests from non-allowlisted requesters
Scenario: Enforcement proof (dry-run): all disallowed requesters are denied against in-scope receiver VPC @vpc @tlp-amber @tlp-red @CCC.VPC.CN03 @CCC.VPC.CN03.AR01 @Destructive @MAIN @DEFAULT @CCC.VPC
Given a cloud api for "{Instance}" in "api"42µs
And I call "{api}" with "GetServiceAPI" using argument "vpc"161µs
And I refer to "{result}" as "vpcService"18µs
And I refer to "{UID}" as "ReceiverVpcId"17µs
And I refer to "{Cn03NonAllowlistedRequesterVpcId}" as "NonAllowlistedRequesterVpcId"22µs
And I load environment variable "CN03_PEER_TRIAL_MATRIX_FILE" as "PeerTrialMatrixFile"27µs
And "{ReceiverVpcId}" is not nil19µs
When I call "{vpcService}" with "ValidateDisallowListEnforcement" using argument "{ReceiverVpcId}"211ms
And I attach "{result.Summary}" to the test output as "Disallow-list Enforcement Summary"74µs
And I attach "{result.Results}" to the test output as "Disallow-list Enforcement"97µs
Then "{result.ListDefined}" is true36µs
And "{result.TestedCount}" should be greater than "0"38µs
And "{result.AllCorrect}" is true28µs
expected {result.AllCorrect} to be truthy, got false (type: bool)
And "{result.ViolationCount}" is "0"31µs
📎 Attachments:
Disallow-list Enforcement Summary
View Content (50 bytes)
2 of 2 disallow-list VPC(s) had guardrail mismatch
Disallow-list Enforcement
View JSON (1649 bytes)
[{"AllowListDefined":true,"ConflictMessage":"non-allowlisted requester permitted by guardrail policy","ConflictType":"DENYLIST_CONFLICT","DryRunAllowed":true,"ErrorCode":"DryRunOperation","ExitCode":0,"GuardrailExpectation":"deny","GuardrailMismatch":true,"Origin":"terraform-fixture","PeerOwnerId":"","PeerVpcId":"vpc-0f3af4b6986f1e0ab","Reason":"DryRunOperation indicates request would be allowed; CN03 guardrail mismatch: allow-list expects deny for requester vpc-0a7d07499ce3992e8","ReceiverVpcId":"vpc-0f3af4b6986f1e0ab","RequesterInAllowList":false,"RequesterVpcId":"vpc-0a7d07499ce3992e8","Stderr":"operation error EC2: CreateVpcPeeringConnection, https response error StatusCode: 412, RequestID: 6a564564-5498-437f-b9df-67da83055e88, api error DryRunOperation: Request would have succeeded, but DryRun flag is set."},{"AllowListDefined":true,"ConflictMessage":"non-allowlisted requester permitted by guardrail policy","ConflictType":"DENYLIST_CONFLICT","DryRunAllowed":true,"ErrorCode":"DryRunOperation","ExitCode":0,"GuardrailExpectation":"deny","GuardrailMismatch":true,"Origin":"terraform-fixture","PeerOwnerId":"","PeerVpcId":"vpc-0f3af4b6986f1e0ab","Reason":"DryRunOperation indicates request would be allowed; CN03 guardrail mismatch: allow-list expects deny for requester vpc-0eadc3a916f373b88","ReceiverVpcId":"vpc-0f3af4b6986f1e0ab","RequesterInAllowList":false,"RequesterVpcId":"vpc-0eadc3a916f373b88","Stderr":"operation error EC2: CreateVpcPeeringConnection, https response error StatusCode: 412, RequestID: 58f55d2c-d9f8-459b-a25e-51fa07b2e33d, api error DryRunOperation: Request would have succeeded, but DryRun flag is set."}]
Scenario: Enforcement proof (dry-run): non-allowlisted requester is denied even when not explicitly listed as disallowed @vpc @tlp-amber @tlp-red @CCC.VPC.CN03 @CCC.VPC.CN03.AR01 @Destructive @MAIN @CCC.VPC
Given a cloud api for "{Instance}" in "api"44µs
And I call "{api}" with "GetServiceAPI" using argument "vpc"108µs
And I refer to "{result}" as "vpcService"27µs
And I refer to "{UID}" as "ReceiverVpcId"16µs
And I refer to "{Cn03NonAllowlistedRequesterVpcId}" as "NonAllowlistedRequesterVpcId"17µs
And I load environment variable "CN03_PEER_TRIAL_MATRIX_FILE" as "PeerTrialMatrixFile"34µs
And "{ReceiverVpcId}" is not nil15µs
Given "{NonAllowlistedRequesterVpcId}" is not nil17µs
When I call "{vpcService}" with "EvaluatePeerAgainstAllowList" using argument "{NonAllowlistedRequesterVpcId}"125µs
Then "{result.AllowedListDefined}" is true26µs
And "{result.Allowed}" is false27µs
When I call "{vpcService}" with "AttemptVpcPeeringDryRun" using arguments "{NonAllowlistedRequesterVpcId}" and "{ReceiverVpcId}"120ms
Then "{result.DryRunAllowed}" is false44µs
expected {result.DryRunAllowed} to be falsy, got true (type: bool)
And "{result.AllowListDefined}" is true24µs
And "{result.RequesterInAllowList}" is false28µs
And "{result.GuardrailExpectation}" is "deny"30µs
And "{result.GuardrailMismatch}" is false24µs
And "{result.ExitCode}" should be greater than "0"28µs
And "{result.Reason}" contains "guardrail aligned"28µs
And "{result.ConflictType}" is ""24µs
Feature: CCC.VPC.CN04.AR01 - Flow logs must capture all VPC traffic
Scenario: Main check (config): flow logs are active and capture all traffic @vpc @tlp-amber @tlp-red @CCC.VPC.CN04 @CCC.VPC.CN04.AR01 @Policy @MAIN @DEFAULT @CCC.VPC
Given a cloud api for "{Instance}" in "api"62µs
And I call "{api}" with "GetServiceAPI" using argument "vpc"118µs
And I refer to "{result}" as "vpcService"23µs
Given I refer to "{UID}" as "TargetVpcId"21µs
When I call "{vpcService}" with "EvaluateVpcFlowLogsControl" using argument "{TargetVpcId}"71ms
Then "{result.FlowLogCount}" should be greater than "0"41µs
expected {result.FlowLogCount} (0) to be greater than 0
And "{result.NonCompliantCount}" is "0"21µs
Scenario: Behavioral check (active): traffic produces flow log records @vpc @tlp-amber @tlp-red @CCC.VPC.CN04 @CCC.VPC.CN04.AR01 @Behavioural @MAIN @CCC.VPC
Given a cloud api for "{Instance}" in "api"41µs
And I call "{api}" with "GetServiceAPI" using argument "vpc"100µs
And I refer to "{result}" as "vpcService"17µs
Given I refer to "{UID}" as "TargetVpcId"15µs
When I call "{vpcService}" with "PrepareFlowLogDeliveryObservation" using argument "{TargetVpcId}"71ms
And I call "{vpcService}" with "GenerateTestTraffic" using argument "{TargetVpcId}"12s
And I refer to "{result.ResourceId}" as "TestResourceId"47µs
And I refer to "{result.CleanupDeleted}" as "TrafficCleanupDeleted"26µs
And I call "{vpcService}" with "ObserveRecentFlowLogDelivery" using argument "{TargetVpcId}"38ms
And I refer to "{result.RecordsObserved}" as "RecordsObserved"39µs
And I call "{vpcService}" with "DeleteTestResource" using argument "{TestResourceId}"381ms
Then "{result.Deleted}" is true49µs
And "{TrafficCleanupDeleted}" is true26µs
And "{RecordsObserved}" is true32µs
expected {RecordsObserved} to be truthy, got false (type: bool)