Bow Tie Kreative SECURITY Grammar

JSON Schemas

LAKA Authorized Security Test Plan

test-plan 14 required 16 properties

Required properties

  • version
  • test_plan_id
  • authorization_id
  • client_id
  • target
  • environment
  • mode
  • objective
  • test_cases
  • limits
  • stop_conditions
  • evidence
  • cleanup
  • status

The schema in full

schemas/test-plan.schema.json · draft 2020-12
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://bowtiekreative.example/schemas/laka-security/test-plan.schema.json",
  "title": "LAKA Authorized Security Test Plan",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "version",
    "test_plan_id",
    "authorization_id",
    "client_id",
    "target",
    "environment",
    "mode",
    "objective",
    "test_cases",
    "limits",
    "stop_conditions",
    "evidence",
    "cleanup",
    "status"
  ],
  "properties": {
    "version": {
      "type": "string"
    },
    "test_plan_id": {
      "type": "string"
    },
    "authorization_id": {
      "type": "string"
    },
    "client_id": {
      "type": "string"
    },
    "target": {
      "type": "string"
    },
    "environment": {
      "type": "string"
    },
    "mode": {
      "enum": [
        "inventory",
        "passive",
        "audit",
        "active",
        "recovery"
      ]
    },
    "objective": {
      "type": "string"
    },
    "scope": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "allowed_hosts": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "allowed_paths": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "allowed_accounts": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "allowed_data": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "excluded_dependencies": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "test_cases": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "test_id",
          "family",
          "control_objective",
          "interaction",
          "expected_result",
          "evidence_required",
          "default_enabled"
        ],
        "properties": {
          "test_id": {
            "type": "string"
          },
          "family": {
            "type": "string"
          },
          "references": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "control_objective": {
            "type": "string"
          },
          "interaction": {
            "type": "string"
          },
          "preconditions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "permitted_methods": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "prohibited_effects": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "expected_result": {
            "type": "string"
          },
          "evidence_required": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "cleanup": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "default_enabled": {
            "type": "boolean"
          }
        }
      }
    },
    "limits": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "requests_per_second",
        "concurrency",
        "duration_minutes"
      ],
      "properties": {
        "requests_per_second": {
          "type": "number",
          "exclusiveMinimum": 0
        },
        "concurrency": {
          "type": "integer",
          "minimum": 1
        },
        "duration_minutes": {
          "type": "integer",
          "minimum": 1
        },
        "max_error_rate": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "max_latency_ms": {
          "type": "integer",
          "minimum": 1
        },
        "max_test_records": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "stop_conditions": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string"
      }
    },
    "evidence": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "destination",
        "redact",
        "integrity"
      ],
      "properties": {
        "destination": {
          "type": "string"
        },
        "redact": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "integrity": {
          "type": "string"
        },
        "retention_days": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "cleanup": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string"
      }
    },
    "active_approval": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "approved_by",
        "approved_at",
        "approved_test_ids",
        "approval_reference"
      ],
      "properties": {
        "approved_by": {
          "type": "string"
        },
        "approved_at": {
          "type": "string",
          "format": "date-time"
        },
        "approved_test_ids": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "string"
          }
        },
        "approval_reference": {
          "type": "string"
        }
      }
    },
    "status": {
      "enum": [
        "draft",
        "authorized",
        "running",
        "stopped",
        "completed",
        "failed",
        "expired"
      ]
    }
  },
  "allOf": [
    {
      "if": {
        "properties": {
          "mode": {
            "const": "active"
          }
        },
        "required": [
          "mode"
        ]
      },
      "then": {
        "required": [
          "active_approval"
        ]
      }
    }
  ]
}

Validate against it

curl -X POST https://security.bowtiekreative.com/v1/validate \
  -H 'content-type: application/json' \
  --data '{"schema": "test-plan", "document": { … }}'

This schema as JSON →