@@ -25,6 +25,87 @@ function Invoke-SASTokenObfuscation {
2525 }
2626}
2727
28+ function Invoke-APIKeyObfuscation {
29+ param (
30+ [Parameter (mandatory = $true )]
31+ $RecordingsFolderPath
32+ )
33+
34+ Get-ChildItem " $RecordingsFolderPath " - Filter * .yaml |
35+ Foreach-Object {
36+ $RecordingFileName = $_.Name
37+ $PathToRecording = " $RecordingsFolderPath \$RecordingFileName "
38+ Write-Verbose - Message " Searching for API Keys in "" $PathToRecording "" and obfuscating it..."
39+ (Get-Content $PathToRecording ) -replace ' api_key=[\w%]+' , ' api_key=REDACTED' | Set-Content $PathToRecording
40+ }
41+ }
42+
43+ function Invoke-QuantumWorkspaceDataObfuscation {
44+ param (
45+ [Parameter (mandatory = $true )]
46+ $RecordingsFolderPath
47+ )
48+
49+ Get-ChildItem " $RecordingsFolderPath " - Filter * .yaml |
50+ Foreach-Object {
51+ $RecordingFileName = $_.Name
52+ $PathToRecording = " $RecordingsFolderPath \$RecordingFileName "
53+ Write-Host " Starting obfuscation of sensitive fields in recording file: $PathToRecording "
54+
55+ # Read full content
56+ $content = Get-Content $PathToRecording - Raw
57+ Write-Host " Loaded file content."
58+
59+ # Obfuscate primaryKey and secondaryKey inside JSON strings
60+ $content = $content -replace ' "primaryKey"\s*:\s*\{[^}]*"key"\s*:\s*"[^"]+"' , ' "primaryKey":{"key":"REDACTED"'
61+ Write-Host " Obfuscated 'primaryKey'."
62+
63+ $content = $content -replace ' "secondaryKey"\s*:\s*\{[^}]*"key"\s*:\s*"[^"]+"' , ' "secondaryKey":{"key":"REDACTED"'
64+ Write-Host " Obfuscated 'secondaryKey'."
65+
66+ # Obfuscate primary and secondary connection strings
67+ $connectionPattern = ' "(primary|secondary)ConnectionString"\s*:\s*"SubscriptionId=[^;]+;ResourceGroupName=[^;]+;WorkspaceName=[^;]+;ApiKey=[^;]+;QuantumEndpoint=[^"]+"'
68+ $replacementConnection = ' "$1ConnectionString":"SubscriptionId=REDACTED;ResourceGroupName=REDACTED;WorkspaceName=REDACTED;ApiKey=REDACTED;QuantumEndpoint=REDACTED"'
69+ $content = $content -replace $connectionPattern , $replacementConnection
70+ Write-Host " Obfuscated primary and secondary connection strings."
71+
72+ # Obfuscate standalone ApiKey
73+ $content = $content -replace ' ApiKey=[\w-]+;' , ' ApiKey=REDACTED;'
74+ Write-Host " Obfuscated standalone ApiKey values."
75+
76+ # Obfuscate apiKeyEnabled boolean
77+ $content = $content -replace ' "apiKeyEnabled"\s*:\s*(true|false)' , ' "apiKeyEnabled":REDACTED'
78+ Write-Host " Obfuscated 'apiKeyEnabled' values."
79+
80+ # Obfuscate resourceName
81+ $content = $content -replace ' "resourceName"\s*:\s*"[^"]+"' , ' "resourceName":"REDACTED"'
82+ Write-Host " Obfuscated 'resourceName' values."
83+
84+ # Obfuscate quantumWorkspaceName
85+ $content = $content -replace ' "quantumWorkspaceName"\s*:\s*\{\s*"type"\s*:\s*"String",\s*"value"\s*:\s*"[^"]+"\s*\}' , ' "quantumWorkspaceName":{"type":"String","value":"REDACTED"}'
86+ Write-Host " Obfuscated 'quantumWorkspaceName'."
87+
88+ # Obfuscate location and storageAccountLocation
89+ $content = $content -replace ' "(location|storageAccountLocation)"\s*:\s*\{\s*"type"\s*:\s*"String",\s*"value"\s*:\s*"[^"]+"\s*\}' , ' "$1":{"type":"String","value":"REDACTED"}'
90+ Write-Host " Obfuscated 'location' and 'storageAccountLocation'."
91+
92+ # Obfuscate workspaceName in connection strings
93+ $content = $content -replace ' WorkspaceName=[^;]+;' , ' WorkspaceName=REDACTED;'
94+ Write-Host " Obfuscated 'WorkspaceName' in connection strings."
95+
96+ # Obfuscate Set-Cookie headers
97+ $content = $content -replace ' ApplicationGatewayAffinityCORS=[\w-]+;' , ' ApplicationGatewayAffinityCORS=REDACTED;'
98+ $content = $content -replace ' ApplicationGatewayAffinity=[\w-]+;' , ' ApplicationGatewayAffinity=REDACTED;'
99+ $content = $content -replace ' ARRAffinity=[\w-]+;' , ' ARRAffinity=REDACTED;'
100+ $content = $content -replace ' ARRAffinitySameSite=[\w-]+;' , ' ARRAffinitySameSite=REDACTED;'
101+ Write-Host " Obfuscated sensitive Set-Cookie headers."
102+
103+ # Save the modified content
104+ Set-Content - Path $PathToRecording - Value $content
105+ Write-Host " Finished obfuscation. Changes saved to: $PathToRecording "
106+ }
107+ }
108+
28109# For debug, print all relevant environment variables:
29110Get-ChildItem env:AZURE* , env:* VERSION, env:* OUTDIR | ForEach-Object {
30111 Write-Host $_.Name " =" $_.Value
@@ -47,5 +128,8 @@ azdev test quantum --live --verbose --xml-path $RecordingsFolderPath
47128# Make sure we don't check-in SAS-tokens
48129Invoke-SASTokenObfuscation - RecordingsFolderPath $RecordingsFolderPath
49130
131+ # Make sure we don't check-in API keys, Connection strings and quantum workspace data
132+ Invoke-QuantumWorkspaceDataObfuscation - RecordingsFolderPath $RecordingsFolderPath
133+
50134# Restoring to initial folder location
51- Pop-Location
135+ Pop-Location
0 commit comments