@highflame/policy 2.1.14 → 2.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ import type { ServiceEntityMetadata, ActionEntityMetadata } from './entity-metadata-types.gen.js';
2
+ /**
3
+ * AiGateway entity metadata for UI components.
4
+ * Extracted from Cedar schema appliesTo blocks.
5
+ */
6
+ export declare const AI_GATEWAY_ENTITIES: ServiceEntityMetadata;
7
+ /**
8
+ * Per-action entity mapping for AiGateway.
9
+ * Maps action names to their valid principals and resources.
10
+ */
11
+ export declare const AI_GATEWAY_ACTION_ENTITIES: Record<string, ActionEntityMetadata>;
@@ -0,0 +1,37 @@
1
+ // Code generated by highflame-policy-codegen. DO NOT EDIT.
2
+ // Source: schemas/ai_gateway/schema.cedarschema
3
+ /**
4
+ * AiGateway entity metadata for UI components.
5
+ * Extracted from Cedar schema appliesTo blocks.
6
+ */
7
+ export const AI_GATEWAY_ENTITIES = {
8
+ principals: ['MCP_Client', 'User'],
9
+ resources: ['FilePath', 'LlmPrompt', 'Server', 'Tool'],
10
+ actions: ['call_tool', 'connect_server', 'process_prompt', 'read_file', 'write_file'],
11
+ };
12
+ /**
13
+ * Per-action entity mapping for AiGateway.
14
+ * Maps action names to their valid principals and resources.
15
+ */
16
+ export const AI_GATEWAY_ACTION_ENTITIES = {
17
+ 'call_tool': {
18
+ principals: ['MCP_Client', 'User'],
19
+ resources: ['Tool'],
20
+ },
21
+ 'connect_server': {
22
+ principals: ['MCP_Client', 'User'],
23
+ resources: ['Server'],
24
+ },
25
+ 'process_prompt': {
26
+ principals: ['MCP_Client', 'User'],
27
+ resources: ['LlmPrompt'],
28
+ },
29
+ 'read_file': {
30
+ principals: ['MCP_Client', 'User'],
31
+ resources: ['FilePath'],
32
+ },
33
+ 'write_file': {
34
+ principals: ['MCP_Client', 'User'],
35
+ resources: ['FilePath'],
36
+ },
37
+ };
package/dist/index.d.ts CHANGED
@@ -9,23 +9,23 @@ export * from './errors.js';
9
9
  export * from './annotations.js';
10
10
  export * from './explain.js';
11
11
  export * from './condition-groups.js';
12
- export { GUARDRAILS_SCHEMA, GUARDRAILS_CONTEXT, MCP_GATEWAY_SCHEMA, MCP_GATEWAY_CONTEXT, OVERWATCH_SCHEMA, OVERWATCH_CONTEXT, PALISADE_SCHEMA, PALISADE_CONTEXT, SENTRY_SCHEMA, SENTRY_CONTEXT, } from './service-schemas.gen.js';
12
+ export { AI_GATEWAY_SCHEMA, AI_GATEWAY_CONTEXT, GUARDRAILS_SCHEMA, GUARDRAILS_CONTEXT, OVERWATCH_SCHEMA, OVERWATCH_CONTEXT, PALISADE_SCHEMA, PALISADE_CONTEXT, SENTRY_SCHEMA, SENTRY_CONTEXT, } from './service-schemas.gen.js';
13
13
  export type { ContextAttribute, ActionContext, ServiceContext, } from './service-schemas.gen.js';
14
+ export { AiGatewayContextKey } from './ai_gateway-context.gen.js';
14
15
  export { GuardrailsContextKey } from './guardrails-context.gen.js';
15
- export { McpGatewayContextKey } from './mcp_gateway-context.gen.js';
16
16
  export { OverwatchContextKey } from './overwatch-context.gen.js';
17
17
  export { PalisadeContextKey } from './palisade-context.gen.js';
18
18
  export { SentryContextKey } from './sentry-context.gen.js';
19
+ export { AI_GATEWAY_ENTITIES, AI_GATEWAY_ACTION_ENTITIES, } from './ai_gateway-entities.gen.js';
19
20
  export { GUARDRAILS_ENTITIES, GUARDRAILS_ACTION_ENTITIES, } from './guardrails-entities.gen.js';
20
- export { MCP_GATEWAY_ENTITIES, MCP_GATEWAY_ACTION_ENTITIES, } from './mcp_gateway-entities.gen.js';
21
21
  export { OVERWATCH_ENTITIES, OVERWATCH_ACTION_ENTITIES, } from './overwatch-entities.gen.js';
22
22
  export { PALISADE_ENTITIES, PALISADE_ACTION_ENTITIES, } from './palisade-entities.gen.js';
23
23
  export { SENTRY_ENTITIES, SENTRY_ACTION_ENTITIES, } from './sentry-entities.gen.js';
24
24
  export type { ServiceEntityMetadata, ActionEntityMetadata } from './entity-metadata-types.gen.js';
25
+ export { AI_GATEWAY_DEFAULTS, AI_GATEWAY_TEMPLATES, AI_GATEWAY_CATEGORIES, AI_GATEWAY_TEMPLATES_JSON, getAiGatewayDefaultsByCategory, getAiGatewayTemplatesByCategory, getAiGatewayTemplateById, } from './ai_gateway-defaults.gen.js';
26
+ export type { AiGatewayCategory, AiGatewayCategoryInfo, AiGatewayDefaultPolicy, AiGatewayTemplate, } from './ai_gateway-defaults.gen.js';
25
27
  export { GUARDRAILS_DEFAULTS, GUARDRAILS_TEMPLATES, GUARDRAILS_CATEGORIES, GUARDRAILS_TEMPLATES_JSON, getGuardrailsDefaultsByCategory, getGuardrailsTemplatesByCategory, getGuardrailsTemplateById, } from './guardrails-defaults.gen.js';
26
28
  export type { GuardrailsCategory, GuardrailsCategoryInfo, GuardrailsDefaultPolicy, GuardrailsTemplate, } from './guardrails-defaults.gen.js';
27
- export { MCP_GATEWAY_DEFAULTS, MCP_GATEWAY_TEMPLATES, MCP_GATEWAY_CATEGORIES, MCP_GATEWAY_TEMPLATES_JSON, getMcpGatewayDefaultsByCategory, getMcpGatewayTemplatesByCategory, getMcpGatewayTemplateById, } from './mcp_gateway-defaults.gen.js';
28
- export type { McpGatewayCategory, McpGatewayCategoryInfo, McpGatewayDefaultPolicy, McpGatewayTemplate, } from './mcp_gateway-defaults.gen.js';
29
29
  export { OVERWATCH_DEFAULTS, OVERWATCH_TEMPLATES, OVERWATCH_CATEGORIES, OVERWATCH_TEMPLATES_JSON, getOverwatchDefaultsByCategory, getOverwatchTemplatesByCategory, getOverwatchTemplateById, } from './overwatch-defaults.gen.js';
30
30
  export type { OverwatchCategory, OverwatchCategoryInfo, OverwatchDefaultPolicy, OverwatchTemplate, } from './overwatch-defaults.gen.js';
31
31
  export { SENTRY_DEFAULTS, SENTRY_TEMPLATES, SENTRY_CATEGORIES, SENTRY_TEMPLATES_JSON, getSentryDefaultsByCategory, getSentryTemplatesByCategory, getSentryTemplateById, } from './sentry-defaults.gen.js';
package/dist/index.js CHANGED
@@ -18,21 +18,21 @@ export * from './explain.js';
18
18
  // Condition groups (AST ↔ flat UI groups)
19
19
  export * from './condition-groups.js';
20
20
  // Service-specific schemas and context (inlined)
21
- export { GUARDRAILS_SCHEMA, GUARDRAILS_CONTEXT, MCP_GATEWAY_SCHEMA, MCP_GATEWAY_CONTEXT, OVERWATCH_SCHEMA, OVERWATCH_CONTEXT, PALISADE_SCHEMA, PALISADE_CONTEXT, SENTRY_SCHEMA, SENTRY_CONTEXT, } from './service-schemas.gen.js';
21
+ export { AI_GATEWAY_SCHEMA, AI_GATEWAY_CONTEXT, GUARDRAILS_SCHEMA, GUARDRAILS_CONTEXT, OVERWATCH_SCHEMA, OVERWATCH_CONTEXT, PALISADE_SCHEMA, PALISADE_CONTEXT, SENTRY_SCHEMA, SENTRY_CONTEXT, } from './service-schemas.gen.js';
22
22
  // Service-specific context key enums
23
+ export { AiGatewayContextKey } from './ai_gateway-context.gen.js';
23
24
  export { GuardrailsContextKey } from './guardrails-context.gen.js';
24
- export { McpGatewayContextKey } from './mcp_gateway-context.gen.js';
25
25
  export { OverwatchContextKey } from './overwatch-context.gen.js';
26
26
  export { PalisadeContextKey } from './palisade-context.gen.js';
27
27
  export { SentryContextKey } from './sentry-context.gen.js';
28
28
  // Service-specific entity metadata (for UI - principals, resources, actions)
29
+ export { AI_GATEWAY_ENTITIES, AI_GATEWAY_ACTION_ENTITIES, } from './ai_gateway-entities.gen.js';
29
30
  export { GUARDRAILS_ENTITIES, GUARDRAILS_ACTION_ENTITIES, } from './guardrails-entities.gen.js';
30
- export { MCP_GATEWAY_ENTITIES, MCP_GATEWAY_ACTION_ENTITIES, } from './mcp_gateway-entities.gen.js';
31
31
  export { OVERWATCH_ENTITIES, OVERWATCH_ACTION_ENTITIES, } from './overwatch-entities.gen.js';
32
32
  export { PALISADE_ENTITIES, PALISADE_ACTION_ENTITIES, } from './palisade-entities.gen.js';
33
33
  export { SENTRY_ENTITIES, SENTRY_ACTION_ENTITIES, } from './sentry-entities.gen.js';
34
34
  // Service-specific default policies, templates, and categories
35
+ export { AI_GATEWAY_DEFAULTS, AI_GATEWAY_TEMPLATES, AI_GATEWAY_CATEGORIES, AI_GATEWAY_TEMPLATES_JSON, getAiGatewayDefaultsByCategory, getAiGatewayTemplatesByCategory, getAiGatewayTemplateById, } from './ai_gateway-defaults.gen.js';
35
36
  export { GUARDRAILS_DEFAULTS, GUARDRAILS_TEMPLATES, GUARDRAILS_CATEGORIES, GUARDRAILS_TEMPLATES_JSON, getGuardrailsDefaultsByCategory, getGuardrailsTemplatesByCategory, getGuardrailsTemplateById, } from './guardrails-defaults.gen.js';
36
- export { MCP_GATEWAY_DEFAULTS, MCP_GATEWAY_TEMPLATES, MCP_GATEWAY_CATEGORIES, MCP_GATEWAY_TEMPLATES_JSON, getMcpGatewayDefaultsByCategory, getMcpGatewayTemplatesByCategory, getMcpGatewayTemplateById, } from './mcp_gateway-defaults.gen.js';
37
37
  export { OVERWATCH_DEFAULTS, OVERWATCH_TEMPLATES, OVERWATCH_CATEGORIES, OVERWATCH_TEMPLATES_JSON, getOverwatchDefaultsByCategory, getOverwatchTemplatesByCategory, getOverwatchTemplateById, } from './overwatch-defaults.gen.js';
38
38
  export { SENTRY_DEFAULTS, SENTRY_TEMPLATES, SENTRY_CATEGORIES, SENTRY_TEMPLATES_JSON, getSentryDefaultsByCategory, getSentryTemplatesByCategory, getSentryTemplateById, } from './sentry-defaults.gen.js';
@@ -36,17 +36,17 @@ const OVERWATCH_SECRETS_DEFAULT_CEDAR = `// ====================================
36
36
  // Secrets Detection Policy (Default)
37
37
  // =============================================================================
38
38
  // Detects and blocks credential leakage across prompts, tool calls, and file
39
- // operations using YARA rule name matching and file path patterns.
39
+ // operations using Shield's secrets detector context keys and file path patterns.
40
40
  //
41
- // Detection layers:
42
- // 1. YARA rule triggers (detected_threats) — pattern-based, always available
43
- // 2. Sensitive file path blocking (.env, credential directories)
41
+ // Detection:
42
+ // Shield's secrets detector (Tier Fast) populates:
43
+ // contains_secrets (bool) true if any secret found
44
+ // secret_types (Set<String>) — types found: "aws_access_key", "ssh_key",
45
+ // "pem_certificate", "environment_variable", "github_token", etc.
46
+ // secret_count (long) — total secret matches
44
47
  //
45
- // YARA rules matched:
46
- // secrets_leakage — AWS keys, GitHub tokens, private key headers, API keys
47
- // ssh_key_exposure — SSH private key content and key file paths
48
- // pem_file_access — PEM/certificate private keys and key files
49
- // environment_variable_leakage — OPENAI_API_KEY, HF_TOKEN, generic *_API_KEY
48
+ // Policies reference secret_types directly for per-category granularity.
49
+ // This works with both built-in and user-configured secret types.
50
50
  //
51
51
  // Compliance:
52
52
  // NIST 800-53 SC-28 (Protection of Information at Rest)
@@ -60,17 +60,17 @@ const OVERWATCH_SECRETS_DEFAULT_CEDAR = `// ====================================
60
60
  // =============================================================================
61
61
 
62
62
  // ---------------------------------------------------------------------------
63
- // Section 1: YARA Rule — secrets_leakage
63
+ // Section 1: General Secret Leakage
64
64
  // Detects AWS access keys, GitHub tokens, private key headers, API key
65
65
  // assignments, and bearer tokens in content.
66
66
  // ---------------------------------------------------------------------------
67
67
 
68
- // Block prompts containing detected secrets
68
+ // Block prompts containing any detected secrets
69
69
  @id("secrets-block-leakage-prompt")
70
70
  @name("Block secrets in prompts")
71
- @description("Block prompts when YARA detects exposed secrets — AWS access keys (AKIA...), GitHub tokens (ghp_...), private key headers, bearer tokens, or API key assignments (api_key=sk-proj-...).")
71
+ @description("Block prompts when secrets are detected — AWS access keys (AKIA...), GitHub tokens (ghp_...), private key headers, bearer tokens, or API key assignments.")
72
72
  @severity("high")
73
- @tags("secrets,credentials,yara,process-prompt,nist-sc-28,nist-ia-5")
73
+ @tags("secrets,credentials,process-prompt,nist-sc-28,nist-ia-5")
74
74
  @reject_message("Prompt blocked: exposed secrets detected (AWS keys, tokens, private keys, or API key assignments). Remove sensitive credentials before submitting.")
75
75
  forbid (
76
76
  principal,
@@ -78,15 +78,15 @@ forbid (
78
78
  resource
79
79
  )
80
80
  when {
81
- context.detected_threats.contains("secrets_leakage")
81
+ context.contains_secrets == true
82
82
  };
83
83
 
84
84
  // Block tool calls containing detected secrets
85
85
  @id("secrets-block-leakage-tool")
86
86
  @name("Block secrets in tool calls")
87
- @description("Block tool execution when YARA detects exposed secrets in tool arguments or command content.")
87
+ @description("Block tool execution when secrets are detected in tool arguments or command content.")
88
88
  @severity("high")
89
- @tags("secrets,credentials,yara,call-tool,nist-sc-28,mitre-t1552")
89
+ @tags("secrets,credentials,call-tool,nist-sc-28,mitre-t1552")
90
90
  @reject_message("Tool execution blocked: exposed secrets detected in command or arguments. Remove sensitive credentials before executing.")
91
91
  forbid (
92
92
  principal,
@@ -94,11 +94,11 @@ forbid (
94
94
  resource
95
95
  )
96
96
  when {
97
- context has detected_threats && context.detected_threats.contains("secrets_leakage")
97
+ context has contains_secrets && context.contains_secrets == true
98
98
  };
99
99
 
100
100
  // ---------------------------------------------------------------------------
101
- // Section 2: YARA Rule — ssh_key_exposure
101
+ // Section 2: SSH Key Exposure
102
102
  // Detects SSH private key content (BEGIN OPENSSH/RSA PRIVATE KEY) and
103
103
  // SSH key file paths (/.ssh/id_rsa, id_ed25519).
104
104
  // ---------------------------------------------------------------------------
@@ -106,9 +106,9 @@ when {
106
106
  // Block SSH key exposure across tool calls and file operations
107
107
  @id("secrets-block-ssh-keys")
108
108
  @name("Block SSH key exposure")
109
- @description("Block when YARA detects SSH private key content or SSH key file paths. Covers tool calls, file reads, and file writes. AI agents must not access SSH credentials.")
109
+ @description("Block when SSH private key content or SSH key file paths are detected. Covers tool calls, file reads, and file writes. AI agents must not access SSH credentials.")
110
110
  @severity("critical")
111
- @tags("secrets,ssh,credentials,yara,nist-ia-5,mitre-t1552")
111
+ @tags("secrets,ssh,credentials,nist-ia-5,mitre-t1552")
112
112
  @reject_message("Blocked: SSH private key content or key file path detected. AI agents must not access SSH credentials.")
113
113
  forbid (
114
114
  principal,
@@ -116,11 +116,11 @@ forbid (
116
116
  resource
117
117
  )
118
118
  when {
119
- context has detected_threats && context.detected_threats.contains("ssh_key_exposure")
119
+ context has secret_types && context.secret_types.contains("ssh_key")
120
120
  };
121
121
 
122
122
  // ---------------------------------------------------------------------------
123
- // Section 3: YARA Rule pem_file_access
123
+ // Section 3: PEM / Certificate Key Exposure
124
124
  // Detects PEM private key content (BEGIN ENCRYPTED/RSA/EC/DSA PRIVATE KEY)
125
125
  // and key file paths (.pem, .key, .p12, .pfx).
126
126
  // ---------------------------------------------------------------------------
@@ -128,9 +128,9 @@ when {
128
128
  // Block PEM/certificate key exposure
129
129
  @id("secrets-block-pem-keys")
130
130
  @name("Block PEM/certificate key exposure")
131
- @description("Block when YARA detects PEM private key content or certificate key file paths (.pem, .key, .p12, .pfx). AI agents must not access certificate credentials.")
131
+ @description("Block when PEM private key content or certificate key file paths (.pem, .key, .p12, .pfx) are detected. AI agents must not access certificate credentials.")
132
132
  @severity("critical")
133
- @tags("secrets,certificates,pem,yara,nist-ia-5,mitre-t1552")
133
+ @tags("secrets,certificates,pem,nist-ia-5,mitre-t1552")
134
134
  @reject_message("Blocked: PEM private key or certificate key file detected. AI agents must not access certificate credentials.")
135
135
  forbid (
136
136
  principal,
@@ -138,11 +138,11 @@ forbid (
138
138
  resource
139
139
  )
140
140
  when {
141
- context has detected_threats && context.detected_threats.contains("pem_file_access")
141
+ context has secret_types && context.secret_types.contains("pem_certificate")
142
142
  };
143
143
 
144
144
  // ---------------------------------------------------------------------------
145
- // Section 4: YARA Rule — environment_variable_leakage
145
+ // Section 4: Environment Variable Leakage
146
146
  // Detects OPENAI_API_KEY=sk-..., HF_TOKEN=hf_..., and generic
147
147
  // <NAME>_API_KEY=<value> (16+ chars) patterns.
148
148
  // ---------------------------------------------------------------------------
@@ -150,9 +150,9 @@ when {
150
150
  // Block environment variable secret exposure
151
151
  @id("secrets-block-env-vars")
152
152
  @name("Block environment variable leakage")
153
- @description("Block when YARA detects environment variable secret assignments — OPENAI_API_KEY, HF_TOKEN, or generic <NAME>_API_KEY=<value> patterns with 16+ character values.")
153
+ @description("Block when environment variable secret assignments are detected — OPENAI_API_KEY, HF_TOKEN, or generic <NAME>_API_KEY=<value> patterns with 16+ character values.")
154
154
  @severity("high")
155
- @tags("secrets,environment,yara,nist-ia-5")
155
+ @tags("secrets,environment,nist-ia-5")
156
156
  @reject_message("Blocked: environment variable secret detected (API keys, tokens). Remove sensitive values before proceeding.")
157
157
  forbid (
158
158
  principal,
@@ -160,7 +160,7 @@ forbid (
160
160
  resource
161
161
  )
162
162
  when {
163
- context has detected_threats && context.detected_threats.contains("environment_variable_leakage")
163
+ context has secret_types && context.secret_types.contains("environment_variable")
164
164
  };
165
165
 
166
166
  // ---------------------------------------------------------------------------
@@ -168,7 +168,7 @@ when {
168
168
  // Blocks file read/write access to credential directories and .env files.
169
169
  // NOTE: Targets read_file/write_file only — NOT call_tool. The path field
170
170
  // is empty for Bash commands (extractor reads tool_input.file_path which is
171
- // undefined for Bash). SSH key access via Bash is caught by YARA rules above.
171
+ // undefined for Bash). SSH key access via Bash is caught by rules above.
172
172
  // ---------------------------------------------------------------------------
173
173
 
174
174
  // Block access to credential directories
@@ -639,20 +639,16 @@ const OVERWATCH_PII_DEFAULT_CEDAR = `// ========================================
639
639
  // PII Detection Policy (Default)
640
640
  // =============================================================================
641
641
  // Detects and blocks personally identifiable information across prompts, tool
642
- // calls, and file operations using YARA rule name matching and ML classifiers.
642
+ // calls, and file operations using Shield's PII detector context keys.
643
643
  //
644
- // Detection layers:
645
- // 1. YARA rule triggers (detected_threats) pattern-based, always available
644
+ // Detection:
645
+ // Shield's pii_regex (Tier Fast) and gcp_dlp (Tier Slow) detectors populate:
646
+ // pii_detected (bool) — true if any PII found
647
+ // pii_types (Set<String>) — types found: "ssn", "credit_card", "email", etc.
648
+ // pii_count (long) — total PII matches
646
649
  //
647
- // YARA rules matched:
648
- // pii_ssn — US Social Security Numbers (XXX-XX-XXXX)
649
- // pii_credit_card — Credit card numbers (13-19 digits)
650
- // pii_passport — Passport numbers (1-2 letters + 6-9 digits)
651
- // pii_iban — International Bank Account Numbers
652
- // pii_email — Email addresses
653
- // pii_phone_us — US phone numbers
654
- // pii_date_of_birth — Dates in MM/DD/YYYY format
655
- // pii_ip_address — IPv4 addresses
650
+ // Policies reference pii_types directly for per-type granularity. This works
651
+ // with both built-in and user-configured PII types (via ConfigReloader).
656
652
  //
657
653
  // Compliance:
658
654
  // PCI DSS 3.4, 4.1 (Payment Card Data)
@@ -677,7 +673,7 @@ const OVERWATCH_PII_DEFAULT_CEDAR = `// ========================================
677
673
  @name("Block Social Security Numbers")
678
674
  @description("Block content containing SSN patterns (XXX-XX-XXXX). SSNs are high-value identity theft targets — exposure through AI agents is a critical privacy violation.")
679
675
  @severity("critical")
680
- @tags("pii,ssn,identity,yara,pci-dss,nist-si-4")
676
+ @tags("pii,ssn,identity,pci-dss,nist-si-4")
681
677
  @reject_message("Content blocked: Social Security Number patterns detected. SSNs must never be processed through AI agents.")
682
678
  forbid (
683
679
  principal,
@@ -685,7 +681,7 @@ forbid (
685
681
  resource
686
682
  )
687
683
  when {
688
- context has detected_threats && context.detected_threats.contains("pii_ssn")
684
+ context has pii_types && context.pii_types.contains("ssn")
689
685
  };
690
686
 
691
687
  // Block credit card numbers (PCI DSS compliance)
@@ -693,7 +689,7 @@ when {
693
689
  @name("Block credit card numbers")
694
690
  @description("Block content containing credit card number patterns (13-19 digits). PCI DSS 3.4 requires PANs are rendered unreadable — AI agents must never process raw card numbers.")
695
691
  @severity("critical")
696
- @tags("pii,credit-card,payment,yara,pci-dss-3.4,pci-dss-4.1")
692
+ @tags("pii,credit-card,payment,pci-dss-3.4,pci-dss-4.1")
697
693
  @reject_message("Content blocked: credit card number patterns detected. Sharing payment card data through AI agents violates PCI DSS. Use tokenized references instead.")
698
694
  forbid (
699
695
  principal,
@@ -701,7 +697,7 @@ forbid (
701
697
  resource
702
698
  )
703
699
  when {
704
- context has detected_threats && context.detected_threats.contains("pii_credit_card")
700
+ context has pii_types && context.pii_types.contains("credit_card")
705
701
  };
706
702
 
707
703
  // ---------------------------------------------------------------------------
@@ -715,7 +711,7 @@ when {
715
711
  @name("Block passport numbers")
716
712
  @description("Block content containing passport number patterns (1-2 letters + 6-9 digits). Passport numbers are government-issued identifiers with high identity theft risk.")
717
713
  @severity("high")
718
- @tags("pii,passport,identity,yara,gdpr-art-32")
714
+ @tags("pii,passport,identity,gdpr-art-32")
719
715
  @reject_message("Content blocked: passport number patterns detected. Government-issued identifiers must not be processed through AI agents.")
720
716
  forbid (
721
717
  principal,
@@ -723,7 +719,7 @@ forbid (
723
719
  resource
724
720
  )
725
721
  when {
726
- context has detected_threats && context.detected_threats.contains("pii_passport")
722
+ context has pii_types && context.pii_types.contains("passport")
727
723
  };
728
724
 
729
725
  // Block IBAN (International Bank Account Numbers)
@@ -731,7 +727,7 @@ when {
731
727
  @name("Block bank account numbers")
732
728
  @description("Block content containing IBAN patterns. Bank account numbers are sensitive financial identifiers that must not be exposed through AI agents.")
733
729
  @severity("high")
734
- @tags("pii,iban,financial,yara,gdpr-art-32,pci-dss")
730
+ @tags("pii,iban,financial,gdpr-art-32,pci-dss")
735
731
  @reject_message("Content blocked: bank account number (IBAN) patterns detected. Financial account numbers must not be processed through AI agents.")
736
732
  forbid (
737
733
  principal,
@@ -739,7 +735,7 @@ forbid (
739
735
  resource
740
736
  )
741
737
  when {
742
- context has detected_threats && context.detected_threats.contains("pii_iban")
738
+ context has pii_types && context.pii_types.contains("iban")
743
739
  };
744
740
 
745
741
  // ---------------------------------------------------------------------------
@@ -753,7 +749,7 @@ when {
753
749
  @name("Block email addresses")
754
750
  @description("Block prompts and tool calls containing email address patterns. Prevents accidental sharing of personal email addresses with AI agents.")
755
751
  @severity("medium")
756
- @tags("pii,email,contact,yara,gdpr-art-32")
752
+ @tags("pii,email,contact,gdpr-art-32")
757
753
  @reject_message("Content blocked: email address patterns detected. Remove personal email addresses before submitting to AI agents.")
758
754
  forbid (
759
755
  principal,
@@ -761,7 +757,7 @@ forbid (
761
757
  resource
762
758
  )
763
759
  when {
764
- context has detected_threats && context.detected_threats.contains("pii_email")
760
+ context has pii_types && context.pii_types.contains("email")
765
761
  };
766
762
 
767
763
  // Block US phone numbers
@@ -769,7 +765,7 @@ when {
769
765
  @name("Block phone numbers")
770
766
  @description("Block prompts and tool calls containing US phone number patterns. Prevents accidental sharing of personal phone numbers with AI agents.")
771
767
  @severity("medium")
772
- @tags("pii,phone,contact,yara,ccpa")
768
+ @tags("pii,phone,contact,ccpa")
773
769
  @reject_message("Content blocked: phone number patterns detected. Remove personal phone numbers before submitting to AI agents.")
774
770
  forbid (
775
771
  principal,
@@ -777,7 +773,7 @@ forbid (
777
773
  resource
778
774
  )
779
775
  when {
780
- context has detected_threats && context.detected_threats.contains("pii_phone_us")
776
+ context has pii_types && context.pii_types.contains("phone")
781
777
  };
782
778
 
783
779
  // Block dates of birth
@@ -785,7 +781,7 @@ when {
785
781
  @name("Block dates of birth")
786
782
  @description("Block prompts and tool calls containing date of birth patterns (MM/DD/YYYY). Date of birth combined with other identifiers enables identity theft.")
787
783
  @severity("medium")
788
- @tags("pii,dob,identity,yara,hipaa-164.312")
784
+ @tags("pii,dob,identity,hipaa-164.312")
789
785
  @reject_message("Content blocked: date of birth patterns detected. Remove personal dates before submitting to AI agents.")
790
786
  forbid (
791
787
  principal,
@@ -793,7 +789,7 @@ forbid (
793
789
  resource
794
790
  )
795
791
  when {
796
- context has detected_threats && context.detected_threats.contains("pii_date_of_birth")
792
+ context has pii_types && context.pii_types.contains("date_of_birth")
797
793
  };
798
794
 
799
795
  // ---------------------------------------------------------------------------
@@ -807,7 +803,7 @@ when {
807
803
  @name("Block IP addresses in prompts")
808
804
  @description("Block prompts containing IPv4 address patterns. Only targets prompts — IP addresses are too common in source code and config files to block in tool calls or file operations.")
809
805
  @severity("low")
810
- @tags("pii,ip-address,network,yara")
806
+ @tags("pii,ip-address,network")
811
807
  @reject_message("Content blocked: IP address patterns detected in prompt. Remove network identifiers before submitting.")
812
808
  forbid (
813
809
  principal,
@@ -815,9 +811,8 @@ forbid (
815
811
  resource
816
812
  )
817
813
  when {
818
- context.detected_threats.contains("pii_ip_address")
814
+ context has pii_types && context.pii_types.contains("ip_address")
819
815
  };
820
-
821
816
  `;
822
817
  const OVERWATCH_TOOLS_MCP_ALLOWLIST_CEDAR = `// MCP Server Allowlist Template
823
818
  // Only allow specific MCP servers to be used