Összetevő-szabályzatok ellenőrzése
Azure DevOps Services
Az összetevő-szabályzatok kényszerítve lesznek, mielőtt kritikus környezetekben, például éles környezetben üzembe helyeznénk. Ezeket a szabályzatokat a rendszer kiértékeli az adott folyamatfuttatás összes üzembe helyezhető összetevője alapján, és letiltja az üzembe helyezést, ha az összetevők nem felelnek meg. Az Összetevő kiértékeléséhez az ellenőrzés hozzáadásához konfigurálnia kell az egyéni szabályzatot. Ez az útmutató az egyéni szabályzatok létrehozásának módját ismerteti.
Megjegyzés
Jelenleg a támogatott összetevőtípusok tárolólemezképekhez és Kubernetes-környezetekhez tartoznak
Előfeltételek
A Rego használatával könnyen olvasható és írható szabályzatokat definiálhat.
Ismerkedjen meg a Rego lekérdezési nyelvével. Az alapismeretek igen.
A JSON-hoz hasonló strukturált dokumentummodellek támogatásához a Rego kibővíti a Datalogot. A rego lekérdezések az OPA-ban tárolt adatokra vonatkozó helyességi feltételek. Ezek a lekérdezések olyan szabályzatok meghatározására használhatók, amelyek a rendszer várt állapotát sértő adatpéldányokat sorolnak fel.
Egyéni szabályzatok létrehozása
Az alábbiakban a mintaszabályzatok vannak megosztva. A követelmények alapján létrehozhatja saját szabályzatkészletét.
Adott projekt/folyamat ellenőrzése
Ez a szabályzat ellenőrzi, hogy a rendszerképeket az Azure Pipelines és a Pipeline-foo készítette-e. Ahhoz, hogy ez működjön, a folyamat definíciójának felül kell bírálnia a névmezőt a következőhöz hasonlóra: AzureDevOps_$(BuildDefinitionName)_$(Date:yyyyyMMdd)$(Rev:.r). A folyamatfuttatások elnevezéséről itt talál további információt.
allowedBuilder := "AzureDevOps_pipeline-foo"
checkBuilder[errors] {
trace("Check if images are built by Azure Pipelines")
resourceUri := values[index].build.resourceUri
image := fetchImage(resourceUri)
builder := values[index].build.build.provenance.builderVersion
trace(sprintf("%s: builder", [builder]))
not startswith(builder, "allowedBuilder")
errors := sprintf("%s: image not built by Azure Pipeline [%s]", [image,builder])
}
fetchRegistry(uri) = reg {
out := regex.find_n("//.*/", uri, 1)
reg = trim(out[0], "/")
}
fetchImage(uri) = img {
out := regex.find_n("/.*@", uri, 1)
img := trim(out[0], "/@")
}
Az engedélyezett regisztrációs adatbázisok ellenőrzése
Ez a szabályzat ellenőrzi, hogy a rendszerképek csak engedélyezett beállításjegyzékekből származnak-e.
allowlist = {
"gcr.io/myrepo",
"raireg1.azurecr.io"
}
checkregistries[errors] {
trace(sprintf("Allowed registries: %s", [concat(", ", allowlist)]))
resourceUri := values[index].image.resourceUri
registry := fetchRegistry(resourceUri)
image := fetchImage(resourceUri)
not allowlist[registry]
errors := sprintf("%s: source registry not permitted", [image])
}
fetchRegistry(uri) = reg {
out := regex.find_n("//.*/", uri, 1)
reg = trim(out[0], "/")
}
fetchImage(uri) = img {
out := regex.find_n("/.*@", uri, 1)
img := trim(out[0], "/@")
}
Tiltott portok ellenőrzése
Ez a szabályzat ellenőrzi a tárolólemezképben közzétett tiltott portokat.
forbiddenPorts = {
"80",
"22"
}
checkExposedPorts[errors] {
trace(sprintf("Checking for forbidden exposed ports: %s", [concat(", ", forbiddenPorts)]))
layerInfos := values[index].image.image.layerInfo
layerInfos[x].directive == "EXPOSE"
resourceUri := values[index].image.resourceUri
image := fetchImage(resourceUri)
ports := layerInfos[x].arguments
trace(sprintf("exposed ports: %s", [ports]))
forbiddenPorts[ports]
errors := sprintf("%s: image exposes forbidden port %s", [image,ports])
}
fetchRegistry(uri) = reg {
out := regex.find_n("//.*/", uri, 1)
reg = trim(out[0], "/")
}
fetchImage(uri) = img {
out := regex.find_n("/.*@", uri, 1)
img := trim(out[0], "/@")
}
Korábbi üzemelő példányok ellenőrzése
Ez a szabályzat ellenőrzi, hogy a rendszerképet előre telepítették-e egy vagy több környezetbe, mielőtt az adott környezetbe/erőforrásokba lett-e üzembe helyezve az Ellenőrzés konfigurálva beállítással.
predeployedEnvironments = {
"env/resource1",
"env2/resource3"
}
checkDeployedEnvironments[errors] {
trace(sprintf("Checking if the image has been pre-deployed to one of: [%s]", [concat(", ", predeployedEnvironments)]))
deployments := values[index].deployment
deployedAddress := deployments[i].deployment.address
trace(sprintf("deployed to : %s",[deployedAddress]))
resourceUri := deployments[i].resourceUri
image := fetchImage(resourceUri)
not predeployedEnvironments[deployedAddress]
trace(sprintf("%s: fails pre-deployed environment condition. found %s", [image,deployedAddress]))
errors := sprintf("image %s fails pre-deployed environment condition. found %s", [image,deployedAddress])
}
fetchRegistry(uri) = reg {
out := regex.find_n("//.*/", uri, 1)
reg = trim(out[0], "/")
}
fetchImage(uri) = img {
out := regex.find_n("/.*@", uri, 1)
img := trim(out[0], "/@")
}
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: