Yapıt ilkesi denetimleri
Azure DevOps Services
Yapıt ilkeleri üretim gibi kritik ortamlara dağıtılamadan önce uygulanır. Bu ilkeler, belirtilen işlem hattı çalıştırmasında dağıtılabilir tüm yapıtlar için değerlendirilir ve yapıtlar uygun değilse dağıtımı engeller. Yapıtı değerlendirmek için bir denetim eklemek için özel ilkenin yapılandırılması gerekir. Bu kılavuzda özel ilkelerin nasıl oluşturulabileceği açıklanmaktadır.
Not
Şu anda desteklenen yapıt türleri kapsayıcı görüntüleri ve Kubernetes ortamları içindir
Önkoşullar
Okuması ve yazması kolay ilke tanımlamak için Rego kullanın.
Rego sorgu dilini tanıyın. Temel bilgiler bunu yapar.
JSON gibi yapılandırılmış belge modellerini desteklemek için Rego, Datalog'u genişletir. Rego sorguları, OPA'da depolanan verilerde yapılan onaylardır. Bu sorgular, sistemin beklenen durumunu ihlal eden veri örneklerini listeleyen ilkeleri tanımlamak için kullanılabilir.
Özel ilkeler oluşturma
Aşağıda paylaşılan örnek ilkeler verilmiştır. Gereksinimlerinize bağlı olarak, kendi ilke kümenizi oluşturabilirsiniz.
Belirli bir projeyi/işlem hattını denetleme
Bu ilke, görüntülerin Azure Pipelines ve Pipeline-foo tarafından derlenip derlenmediğini denetler. Bunun çalışması için işlem hattı tanımının ad alanını şu şekilde geçersiz kılması gerekir: AzureDevOps_$(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.r). İşlem hattı çalıştırmalarını adlandırma hakkında daha fazla bilgi için buraya bakın.
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], "/@")
}
İzin verilen kayıt defterlerini denetleme
Bu ilke, görüntülerin yalnızca izin verilen kayıt defterlerinden olup olmadığını denetler.
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], "/@")
}
Yasak bağlantı noktalarını denetleme
Bu ilke, kapsayıcı görüntüsünde kullanıma sunulan yasak bağlantı noktalarını denetler.
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], "/@")
}
Önceki dağıtımları denetleme
Bu ilke, Denetimin yapılandırıldığı belirli ortamlara/kaynaklara dağıtılmadan önce görüntünün bir/daha fazla ortama önceden dağıtılıp dağıtılmadığını denetler.
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], "/@")
}
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin