Bow Tie Kreative SECURITY Grammar

JSON Schemas

LAKA Security Authorization Manifest

authorization 11 required 14 properties

Required properties

  • authorization_id
  • client_id
  • approved_by
  • valid_from
  • valid_until
  • allowed_modes
  • targets
  • limits
  • forbidden_actions
  • emergency_contact
  • proof_of_control

The schema in full

schemas/authorization.schema.json · draft 2020-12
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://bowtiekreative.example/schemas/laka-security/authorization.schema.json",
  "title": "LAKA Security Authorization Manifest",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "authorization_id",
    "client_id",
    "approved_by",
    "valid_from",
    "valid_until",
    "allowed_modes",
    "targets",
    "limits",
    "forbidden_actions",
    "emergency_contact",
    "proof_of_control"
  ],
  "properties": {
    "authorization_id": {
      "type": "string",
      "minLength": 3
    },
    "client_id": {
      "type": "string",
      "minLength": 1
    },
    "approved_by": {
      "type": "string",
      "minLength": 1
    },
    "valid_from": {
      "type": "string",
      "format": "date-time"
    },
    "valid_until": {
      "type": "string",
      "format": "date-time"
    },
    "allowed_modes": {
      "type": "array",
      "minItems": 1,
      "uniqueItems": true,
      "items": {
        "enum": [
          "inventory",
          "audit",
          "passive",
          "active",
          "change",
          "containment",
          "recovery"
        ]
      }
    },
    "targets": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "kind",
          "value",
          "environments"
        ],
        "properties": {
          "kind": {
            "enum": [
              "domain",
              "hostname",
              "url",
              "ip",
              "cidr"
            ]
          },
          "value": {
            "type": "string",
            "minLength": 1
          },
          "environments": {
            "type": "array",
            "minItems": 1,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "minLength": 1
            }
          }
        }
      }
    },
    "limits": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "max_requests_per_second",
        "max_concurrency",
        "max_duration_minutes"
      ],
      "properties": {
        "max_requests_per_second": {
          "type": "number",
          "exclusiveMinimum": 0,
          "maximum": 100
        },
        "max_concurrency": {
          "type": "integer",
          "minimum": 1,
          "maximum": 50
        },
        "max_duration_minutes": {
          "type": "integer",
          "minimum": 1,
          "maximum": 1440
        },
        "max_error_rate": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "max_latency_ms": {
          "type": "integer",
          "minimum": 1
        }
      }
    },
    "forbidden_actions": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "maintenance_windows": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "start",
          "end"
        ],
        "properties": {
          "start": {
            "type": "string",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          }
        }
      }
    },
    "emergency_contact": {
      "type": "string",
      "minLength": 1
    },
    "data_handling": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "classification": {
          "type": "string"
        },
        "retention_days": {
          "type": "integer",
          "minimum": 0
        },
        "region": {
          "type": "string"
        },
        "redact": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "proof_of_control": {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "method",
        "status"
      ],
      "properties": {
        "method": {
          "enum": [
            "dns-txt",
            "http-token",
            "provider-evidence",
            "client-attestation",
            "other"
          ]
        },
        "status": {
          "enum": [
            "pending",
            "verified",
            "expired",
            "revoked"
          ]
        },
        "verified_at": {
          "type": "string",
          "format": "date-time"
        },
        "evidence_reference": {
          "type": "string"
        }
      }
    },
    "signatures": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "signer",
          "signed_at",
          "signature_reference"
        ],
        "properties": {
          "signer": {
            "type": "string"
          },
          "signed_at": {
            "type": "string",
            "format": "date-time"
          },
          "signature_reference": {
            "type": "string"
          }
        }
      }
    }
  }
}

Validate against it

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

This schema as JSON →