mirror of
https://github.com/microsoft/regorus.git
synced 2026-08-05 02:16:11 +00:00
feat: add multi-threaded evaluation benchmark suite with comprehensive C# implementation (#457)
This commit introduces a complete multi-threaded evaluation benchmark suite for both Rust and C# implementations of Regorus. - Implemented engine evaluation benchmark with input and engine cloning strategies - Implemented compiled policy evaluation benchmark with input cloning and shared compiled policy strategies. - Created EngineEvaluationBenchmark.cs and CompiledPolicyEvaluationBenchmark.cs with time-based execution (3s warmup + 3s evaluation) - Implemented configuration options matching Rust implementation (useClonedEngines, useSharedPolicies parameters) - Created markdown analysis documentation with cross-platform performance analysis - C# seems to achieve 58-89% of Rust performance on test machine. Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
This commit is contained in:
committed by
GitHub
parent
a53c7c8192
commit
d561531613
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"path": "/api/v1/users/123"
|
||||
},
|
||||
"user": {
|
||||
"id": "user123",
|
||||
"scope": ["read:users", "write:users"],
|
||||
"department": "engineering"
|
||||
},
|
||||
"resource": {
|
||||
"owner": "user123",
|
||||
"type": "user"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"path": "/api/v1/users"
|
||||
},
|
||||
"user": {
|
||||
"id": "user456",
|
||||
"scope": ["write:users", "admin:users"],
|
||||
"department": "engineering"
|
||||
},
|
||||
"resource": {
|
||||
"owner": "user456",
|
||||
"type": "user"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"request": {
|
||||
"method": "DELETE",
|
||||
"path": "/api/v1/users/789"
|
||||
},
|
||||
"user": {
|
||||
"id": "admin123",
|
||||
"scope": ["admin:users"],
|
||||
"department": "security"
|
||||
},
|
||||
"resource": {
|
||||
"owner": "user789",
|
||||
"type": "user"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"vault": {
|
||||
"name": "mykeyvault",
|
||||
"location": "eastus",
|
||||
"enableSoftDelete": true,
|
||||
"softDeleteRetentionInDays": 90,
|
||||
"enablePurgeProtection": true,
|
||||
"networkAcls": {
|
||||
"defaultAction": "Deny",
|
||||
"bypass": "AzureServices"
|
||||
},
|
||||
"tags": {
|
||||
"environment": "production"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"vault": {
|
||||
"name": "devkeyvault",
|
||||
"location": "westus2",
|
||||
"enableSoftDelete": true,
|
||||
"softDeleteRetentionInDays": 30,
|
||||
"enablePurgeProtection": false,
|
||||
"networkAcls": {
|
||||
"defaultAction": "Allow",
|
||||
"bypass": "AzureServices"
|
||||
},
|
||||
"tags": {
|
||||
"environment": "development"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"vault": {
|
||||
"name": "prodkeyvault",
|
||||
"location": "eastus",
|
||||
"enableSoftDelete": true,
|
||||
"softDeleteRetentionInDays": 90,
|
||||
"enablePurgeProtection": true,
|
||||
"networkAcls": {
|
||||
"defaultAction": "Deny",
|
||||
"bypass": "AzureServices"
|
||||
},
|
||||
"tags": {
|
||||
"environment": "production"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"operation": "Microsoft.Network/networkSecurityGroups/securityRules/write",
|
||||
"rule": {
|
||||
"direction": "Inbound",
|
||||
"access": "Allow",
|
||||
"protocol": "TCP",
|
||||
"sourceAddressPrefix": "10.0.0.0/24",
|
||||
"sourcePortRange": "*",
|
||||
"destinationAddressPrefix": "*",
|
||||
"destinationPortRange": "80",
|
||||
"priority": 1001
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"operation": "Microsoft.Network/networkSecurityGroups/securityRules/write",
|
||||
"rule": {
|
||||
"direction": "Inbound",
|
||||
"access": "Allow",
|
||||
"protocol": "TCP",
|
||||
"sourceAddressPrefix": "172.16.0.0/16",
|
||||
"sourcePortRange": "*",
|
||||
"destinationAddressPrefix": "*",
|
||||
"destinationPortRange": "22",
|
||||
"priority": 1200
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"operation": "Microsoft.Network/networkSecurityGroups/securityRules/write",
|
||||
"rule": {
|
||||
"direction": "Inbound",
|
||||
"access": "Allow",
|
||||
"protocol": "TCP",
|
||||
"sourceAddressPrefix": "203.0.113.0/24",
|
||||
"sourcePortRange": "*",
|
||||
"destinationAddressPrefix": "*",
|
||||
"destinationPortRange": "443",
|
||||
"priority": 300
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"account": {
|
||||
"name": "mystorageaccount",
|
||||
"tier": "Standard",
|
||||
"replication": "LRS",
|
||||
"location": "eastus",
|
||||
"tags": {
|
||||
"environment": "production"
|
||||
}
|
||||
},
|
||||
"container": {
|
||||
"name": "data",
|
||||
"publicAccess": "None"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"account": {
|
||||
"name": "devstorageaccount",
|
||||
"tier": "Premium",
|
||||
"replication": "LRS",
|
||||
"location": "westus2",
|
||||
"tags": {
|
||||
"environment": "production"
|
||||
}
|
||||
},
|
||||
"container": {
|
||||
"name": "logs",
|
||||
"publicAccess": "None"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"account": {
|
||||
"name": "prodstorageaccount",
|
||||
"tier": "Standard",
|
||||
"replication": "GRS",
|
||||
"location": "eastus",
|
||||
"tags": {
|
||||
"environment": "production"
|
||||
}
|
||||
},
|
||||
"container": {
|
||||
"name": "backups",
|
||||
"publicAccess": "None"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"vm": {
|
||||
"size": "Standard_D2s_v3",
|
||||
"os": "Linux",
|
||||
"location": "eastus",
|
||||
"tags": {
|
||||
"environment": "production",
|
||||
"department": "engineering"
|
||||
}
|
||||
},
|
||||
"user": {
|
||||
"department": "engineering"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"vm": {
|
||||
"size": "Standard_B1s",
|
||||
"os": "Windows",
|
||||
"location": "westus2",
|
||||
"tags": {
|
||||
"environment": "dev",
|
||||
"department": "marketing"
|
||||
}
|
||||
},
|
||||
"user": {
|
||||
"department": "marketing"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"vm": {
|
||||
"size": "Standard_D4s_v3",
|
||||
"os": "Linux",
|
||||
"location": "eastus",
|
||||
"tags": {
|
||||
"environment": "production",
|
||||
"department": "engineering"
|
||||
}
|
||||
},
|
||||
"user": {
|
||||
"department": "engineering"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"operation": "collect",
|
||||
"data": {
|
||||
"type": "email",
|
||||
"source": "user_input"
|
||||
},
|
||||
"consent": {
|
||||
"given": true,
|
||||
"purpose": "marketing",
|
||||
"date": "2023-01-15"
|
||||
},
|
||||
"user": {
|
||||
"age": 25,
|
||||
"location": "US"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"operation": "process",
|
||||
"data": {
|
||||
"type": "survey_response",
|
||||
"source": "user_input"
|
||||
},
|
||||
"consent": {
|
||||
"given": true,
|
||||
"purpose": "analytics",
|
||||
"date": "2023-06-15"
|
||||
},
|
||||
"user": {
|
||||
"age": 30,
|
||||
"location": "US"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"operation": "delete",
|
||||
"data": {
|
||||
"type": "user_profile",
|
||||
"source": "database"
|
||||
},
|
||||
"consent": {
|
||||
"given": false,
|
||||
"purpose": "none",
|
||||
"date": "2022-01-01"
|
||||
},
|
||||
"user": {
|
||||
"age": 16,
|
||||
"location": "EU"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"data": {
|
||||
"type": "user_profile",
|
||||
"classification": "personal",
|
||||
"contains_pii": true,
|
||||
"region": "EU"
|
||||
},
|
||||
"user": {
|
||||
"clearance": "confidential",
|
||||
"location": "EU"
|
||||
},
|
||||
"operation": "read"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"data": {
|
||||
"type": "financial_report",
|
||||
"classification": "confidential",
|
||||
"contains_pii": false,
|
||||
"region": "US"
|
||||
},
|
||||
"user": {
|
||||
"clearance": "secret",
|
||||
"location": "US"
|
||||
},
|
||||
"operation": "read"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"data": {
|
||||
"type": "public_announcement",
|
||||
"classification": "public",
|
||||
"contains_pii": false,
|
||||
"region": "GLOBAL"
|
||||
},
|
||||
"user": {
|
||||
"clearance": "public",
|
||||
"location": "EU"
|
||||
},
|
||||
"operation": "read"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"user": {
|
||||
"name": "alice",
|
||||
"roles": ["viewer", "editor"]
|
||||
},
|
||||
"resource": {
|
||||
"name": "document1",
|
||||
"type": "document",
|
||||
"owner": "alice"
|
||||
},
|
||||
"action": "read"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"user": {
|
||||
"name": "bob",
|
||||
"roles": ["admin"]
|
||||
},
|
||||
"resource": {
|
||||
"name": "document2",
|
||||
"type": "document",
|
||||
"owner": "bob"
|
||||
},
|
||||
"action": "write"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"user": {
|
||||
"name": "charlie",
|
||||
"roles": ["viewer"]
|
||||
},
|
||||
"resource": {
|
||||
"name": "document3",
|
||||
"type": "document",
|
||||
"owner": "alice"
|
||||
},
|
||||
"action": "read"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"time": "09:30:00",
|
||||
"day": "monday",
|
||||
"user": {
|
||||
"role": "employee",
|
||||
"shift": "day"
|
||||
},
|
||||
"request": {
|
||||
"urgent": false
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"time": "14:30:00",
|
||||
"day": "wednesday",
|
||||
"user": {
|
||||
"role": "employee",
|
||||
"shift": "day"
|
||||
},
|
||||
"request": {
|
||||
"urgent": false
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"time": "22:00:00",
|
||||
"day": "friday",
|
||||
"user": {
|
||||
"role": "admin",
|
||||
"shift": "night"
|
||||
},
|
||||
"request": {
|
||||
"urgent": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package bench
|
||||
|
||||
default allow := false
|
||||
|
||||
valid_api_paths := ["/api/v1/", "/api/v2/", "/api/v3/"]
|
||||
|
||||
allow if {
|
||||
input.request.method == "GET"
|
||||
some path in valid_api_paths
|
||||
startswith(input.request.path, path)
|
||||
input.user.authenticated == true
|
||||
time.now_ns() - input.user.login_time < 86400000000000 # 24 hours in nanoseconds
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package bench
|
||||
|
||||
default allow := false
|
||||
|
||||
# Azure Key Vault access policy
|
||||
valid_operations := [
|
||||
"Microsoft.KeyVault/vaults/keys/read",
|
||||
"Microsoft.KeyVault/vaults/secrets/read",
|
||||
"Microsoft.KeyVault/vaults/certificates/read"
|
||||
]
|
||||
|
||||
vault_admins := ["admin@company.com", "security@company.com"]
|
||||
|
||||
allow if {
|
||||
input.operation in valid_operations
|
||||
input.principal.type == "ServicePrincipal"
|
||||
input.principal.appId != ""
|
||||
input.resource.properties.enableSoftDelete == true
|
||||
input.resource.properties.enablePurgeProtection == true
|
||||
time.now_ns() - input.principal.createdTime < 31536000000000000 # Less than 1 year old
|
||||
}
|
||||
|
||||
allow if {
|
||||
input.operation in valid_operations
|
||||
input.principal.type == "User"
|
||||
input.principal.userPrincipalName in vault_admins
|
||||
input.context.conditionalAccess.compliant == true
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package bench
|
||||
|
||||
default allow := false
|
||||
|
||||
# Azure Network Security Group rules policy
|
||||
dangerous_ports := [22, 3389, 1433, 3306, 5432, 6379, 27017]
|
||||
internal_networks := ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
|
||||
|
||||
is_internal_source if {
|
||||
some network in internal_networks
|
||||
net.cidr_contains(network, input.rule.sourceAddressPrefix)
|
||||
}
|
||||
|
||||
allow if {
|
||||
input.operation == "Microsoft.Network/networkSecurityGroups/securityRules/write"
|
||||
input.rule.direction == "Inbound"
|
||||
input.rule.access == "Allow"
|
||||
input.rule.destinationPortRange != "*"
|
||||
not input.rule.destinationPortRange in dangerous_ports
|
||||
input.rule.sourceAddressPrefix != "*"
|
||||
input.rule.sourceAddressPrefix != "Internet"
|
||||
}
|
||||
|
||||
allow if {
|
||||
input.operation == "Microsoft.Network/networkSecurityGroups/securityRules/write"
|
||||
input.rule.direction == "Inbound"
|
||||
input.rule.access == "Allow"
|
||||
input.rule.destinationPortRange in dangerous_ports
|
||||
is_internal_source
|
||||
input.rule.priority >= 1000
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package bench
|
||||
|
||||
default allow := false
|
||||
|
||||
# Azure Storage Account security policy
|
||||
required_encryption_algorithms := ["AES256", "RSA-OAEP"]
|
||||
|
||||
allow if {
|
||||
input.operation == "Microsoft.Storage/storageAccounts/write"
|
||||
input.resource.properties.supportsHttpsTrafficOnly == true
|
||||
input.resource.properties.minimumTlsVersion == "TLS1_2"
|
||||
input.resource.properties.encryption.services.blob.enabled == true
|
||||
input.resource.properties.encryption.keySource == "Microsoft.Storage"
|
||||
input.resource.properties.allowBlobPublicAccess == false
|
||||
input.resource.properties.networkAcls.defaultAction == "Deny"
|
||||
count(input.resource.properties.networkAcls.ipRules) > 0
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package bench
|
||||
|
||||
default allow := false
|
||||
|
||||
# Azure VM deployment policy
|
||||
allowed_vm_sizes := [
|
||||
"Standard_B1s", "Standard_B2s", "Standard_B4ms",
|
||||
"Standard_D2s_v3", "Standard_D4s_v3", "Standard_F2s_v2"
|
||||
]
|
||||
|
||||
allowed_regions := ["eastus", "westus2", "northeurope", "southeastasia"]
|
||||
|
||||
allow if {
|
||||
input.operation == "Microsoft.Compute/virtualMachines/write"
|
||||
input.resource.properties.hardwareProfile.vmSize in allowed_vm_sizes
|
||||
input.resource.location in allowed_regions
|
||||
input.resource.properties.osProfile.adminPassword == null # Require SSH keys
|
||||
count(input.resource.tags) > 0 # Must have tags
|
||||
input.resource.tags.environment in ["dev", "test", "prod"]
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package bench
|
||||
|
||||
default allow := false
|
||||
|
||||
# Complex data filtering and aggregation
|
||||
sensitive_fields := ["ssn", "credit_card", "password"]
|
||||
|
||||
contains_sensitive_data if {
|
||||
some field in sensitive_fields
|
||||
object.get(input.data, field, null) != null
|
||||
}
|
||||
|
||||
user_clearance_level := object.get(input.user.attributes, "clearance", 0)
|
||||
|
||||
required_clearance := 3 if contains_sensitive_data else := 1
|
||||
|
||||
allow if {
|
||||
user_clearance_level >= required_clearance
|
||||
input.operation in ["read", "export"]
|
||||
count(input.data) > 0
|
||||
count(input.data) <= 1000 # Limit data size
|
||||
}
|
||||
|
||||
allow if {
|
||||
input.user.role == "data_processor"
|
||||
input.operation == "transform"
|
||||
not contains_sensitive_data
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package bench
|
||||
|
||||
default allow := false
|
||||
|
||||
rbac_roles := {
|
||||
"admin": ["read", "write", "delete", "admin"],
|
||||
"manager": ["read", "write"],
|
||||
"user": ["read"]
|
||||
}
|
||||
|
||||
user_permissions contains perm if {
|
||||
some role in input.user.roles
|
||||
perm := rbac_roles[role][_]
|
||||
}
|
||||
|
||||
allow if {
|
||||
input.action in user_permissions
|
||||
input.resource.owner == input.user.id
|
||||
}
|
||||
|
||||
allow if {
|
||||
input.action in user_permissions
|
||||
input.resource.public == true
|
||||
input.action == "read"
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package bench
|
||||
|
||||
default allow := false
|
||||
|
||||
allow if {
|
||||
input.user.role == "admin"
|
||||
input.action in ["read", "write", "delete"]
|
||||
input.resource.classification in ["public", "internal"]
|
||||
count(input.user.permissions) > 0
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package bench
|
||||
|
||||
default allow := false
|
||||
|
||||
# Time-based access control with complex conditions
|
||||
business_hours if {
|
||||
hour := time.clock([time.now_ns(), "America/New_York"])[0]
|
||||
hour >= 9
|
||||
hour < 17
|
||||
}
|
||||
|
||||
allow if {
|
||||
input.user.department in ["engineering", "product"]
|
||||
input.action == "deploy"
|
||||
business_hours
|
||||
count([x | x := input.approvals[_]; x.status == "approved"]) >= 2
|
||||
}
|
||||
|
||||
allow if {
|
||||
input.user.emergency_access == true
|
||||
input.action in ["read", "diagnose"]
|
||||
input.justification != ""
|
||||
}
|
||||
Reference in New Issue
Block a user