[Bug]: Cosmos DB private endpoint rule aborts rule evaluation ("Argument types do not match") and never recognises approved private endpoints
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 56/100
Línea de trabajo
Start by reading Get-MonkeyAzCosmosDBInfo.ps1, Get-MonkeyAzGenericPrivateEndpoint, Resolve-Filter.ps1, and the Cosmos DB rule azure-cosmosdb-lacks-private-endpoint.json. Reproduce the reported PowerShell 7.6.9 list behavior, then compare the rule's property path with the storage account rule. Done means evaluation completes and accounts with approved private endpoints pass without false findings; consider whether the shared filter affects other helpers.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What happened?
Two problems with the rule "Ensure that Cosmos DB uses Private Endpoints where possible" (azure-cosmosdb-lacks-private-endpoint.json, path az_cosmosdb, whereObject = networking.privateEndpointConnections).
Problem 1: rule evaluation throws "Argument types do not match".
Get-MonkeyAzCosmosDBInfo.ps1 assigns the result of Get-MonkeyAzGenericPrivateEndpoint to networking.privateEndpointConnections. That function returns its list with Write-Output $allPrivateEndpoints -NoEnumerate, so the stored value is a List[Object] wrapped in a PSObject. The filter generated by Resolve-Filter.ps1 evaluates
@($_.networking.privateEndpointConnections).Where({$null -ne $_.id -and $_.privateLinkServiceConnectionState.status -eq 'Approved'})
On the PSObject-wrapped list, .Where() throws Argument types do not match. This happens for an empty list, for the placeholder entry (no private endpoint) and for real private endpoints. Out-MonkeyData writes the error with Write-Error; with $ErrorActionPreference = 'Stop' the whole scan stops.
Problem 2: approved private endpoints are never matched.
The rule checks privateLinkServiceConnectionState.status on the entry itself. Get-MonkeyAzGenericPrivateEndpoint stores the ARM data under properties (properties.privateLinkServiceConnectionState.status). With a workaround for problem 1, an account with an approved private endpoint still gets no match and, because of shouldExist: true, is reported as a finding (false positive).
How to reproduce it
Minimal repro for problem 1 (PowerShell 7.6.9):
function Get-Pe { $l = [System.Collections.Generic.List[System.Object]]::new(); [void]$l.Add([pscustomobject]@{ id = $null }); Write-Output $l -NoEnumerate }
$o = [pscustomobject]@{ networking = [pscustomobject]@{ privateEndpointConnections = $null } }
$o.networking.privateEndpointConnections = Get-Pe
@($o.networking.privateEndpointConnections).Where({ $null -ne $_.id }) # Argument types do not match
$o.networking.privateEndpointConnections = @(Get-Pe)
@($o.networking.privateEndpointConnections).Where({ $null -ne $_.id }) # works
With Monkey365: run Invoke-Monkey365 -Instance Azure against a subscription that contains a Cosmos DB account.
Expected behavior
The rule evaluates without error; accounts with an approved private endpoint pass.
Suggested fix
- Problem 1:
$cosmosDBObject.networking.privateEndpointConnections = @(Get-MonkeyAzGenericPrivateEndpoint @p)(this is the workaround we use). - Problem 2: use
properties.privateLinkServiceConnectionState.statusin the rule condition (the storage account rule already uses this path), or flatten the property in the helper.
From where are you running Monkey365?
- Resource: Docker container
- OS: Linux (Ubuntu 24.04)
- PowerShell Version: 7.6.9
- Monkey365 Version: 1.0.5 (PowerShell Gallery)
- Others: app-only authentication with access tokens
Additional context
In 1.0.0 this did not show up for us because Cosmos DB accounts without a diagnostic setting were dropped before evaluation (#196, fixed in 1.0.5). Other helpers also return lists with -NoEnumerate; any whereObject filter on such a property would fail the same way. A generic fix could be in Resolve-Filter.ps1 or in the helpers.
- Lenguaje dominante
- PowerShell
- Estrellas
- 1.4k
- Forks
- 144
- Merge medio
- 1 d 21 h
- PR fusionados (30 d)
- 1
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de silverhack/monkey365
-
bug status/needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
silverhack/monkey365#200 ·
-
bug status/needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
silverhack/monkey365#199 ·
-
documentation enhancement help wanted impact-low priority-medium question
Dificultad 4/5 3-5 días Aptitud para principiantes 68/100
silverhack/monkey365#187 · 1 comentario ·
-
documentation enhancement epic priority-medium
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
silverhack/monkey365#184 ·
-
Expose domain-level context for SPF / DKIM / DMARC findings in Exchange OnlineQuizá libre de nuevo @silverhack la tomó hace 112 días y no hay ningún pull request abierto. Abiertoenhancement
silverhack/monkey365#167 · 3 comentarios · 1 asignado ·
Todos los issues de silverhack/monkey365
Issues similares
-
CRT transfer manager mutates the caller's ExtraArgs, so reusing the dict fails on the next uploadAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
boto/s3transfer#433 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Lambda MicroVMs added x86-64: the service model now lists X86_64, INTEL and 100 image env varsAbiertoplatform rust
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
laithalsaadoon/microvms-agentd#758 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
MicrosoftLearning/eShopOnWeb#466 ·
-
Updating an `OidcIssuer` without `thumbprints` fails with "You must provide at least one thumbprint"AbiertoBug kind/bug pulumi/pulumi-pulumiservice R1 S1
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
pulumi/pulumi-pulumiservice#1370 ·
Los mantenedores suelen responder en 1 día