Azure Ardışık Düzenlerinde güvenlik açığı mı var?

Aug 16 2020

Azure DevOps'u araştırıyorum ve Azure işlem hatlarında oldukça bariz bir güvenlik açığı gibi görünen bir şeyle karşılaştım.

Dolayısıyla, ardışık düzenimi YAML olarak oluşturuyorum ve 2 aşama tanımlıyorum: bir inşa aşaması ve bir dağıtım aşaması. Dağıtım aşaması şu şekildedir:

- stage: deployApiProdStage
  displayName: 'Deploy API to PROD'
  dependsOn: buildTestApiStage
  jobs:
  - deployment: deployApiProdJob
    displayName: 'Deploy API to PROD'
    timeoutInMinutes: 10
    condition: and(succeeded(), eq(variables.isRelease, true))
    environment: PROD
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureWebApp@1
            displayName: 'Deploy Azure web app'
            inputs:
              azureSubscription: '(service connection to production web app)'
              appType: 'webAppLinux'
              appName: 'my-web-app'
              package: '$(Pipeline.Workspace)/$(artifactName)/**/*.zip'
              runtimeStack: 'DOTNETCORE|3.1'
              startUpCommand: 'dotnet My.Api.dll'

Microsoft belgeleri, bir ortama onaylar ve kontroller ekleyerek bunu güvence altına almaktan bahsediyor; yukarıdaki durumda PROD ortamı. Burada PROD web uygulamamda yayınlamaya izin veren korumalı kaynak - azureSubscription'daki hizmet bağlantısı - PROD ortamından çekilirse bu sorun olmaz. Maalesef, söyleyebileceğim kadarıyla değil. Bunun yerine boru hattının kendisiyle ilişkilidir.

Bu, ardışık düzen ilk çalıştırıldığında Azure DevOps kullanıcı arabiriminin benden , herhangi bir dağıtımın gerçekleşmesi için gerekli olan hizmet bağlantısına ardışık düzen erişimine izin vermemi istediği anlamına gelir. Erişime izin verildiğinde, bu boru hattı sonsuza kadar bu hizmet bağlantısına erişebilir. Bu, o andan itibaren, iş için hangi ortam belirtilmiş olursa olsun, hizmet bağlantısının kullanılabileceği anlamına gelir. Daha da kötüsü, tanınmayan herhangi bir ortam adı bir hataya neden olmaz, ancak varsayılan olarak boş bir ortamın oluşturulmasına neden olur!

Öyleyse, PROD ortamı için manuel bir onay ayarlasam bile, kuruluştaki biri kod incelememiz aracılığıyla (düzenli büyük kod incelemeleriyle mümkündür) ortam adını gök mavisi renkte 'NewPROD' olarak değiştiren bir değişiklik yapmayı başarırsa -pipelines.yml dosyası, CI / CD bu yeni ortamı yaratacak ve devam edip hemen PROD'a dağıtacak çünkü yeni ortamın hiçbir denetimi veya onayı yoktur!

Elbette bunun yerine servis bağlantısının çevre ile ilişkilendirilmesi mantıklı olacaktır. Yeni ortamların otomatik olarak oluşturulmasını yasaklamak için bir seçeneğe sahip olmak da mantıklı olacaktır - bunun özellikle ne kadar yararlı olduğunu gerçekten anlamıyorum. Şu anda, söyleyebileceğim kadarıyla, bu, depoya erişimi olan veya onay süreci boyunca azure-pipelines.yml dosyasına bir değişiklik kaydırmayı başaran herkes tarafından kritik ortamlara dağıtım yapılmasına izin verebilecek büyük bir güvenlik açığıdır. , tek bir büyük başarısızlık / zayıflık noktası sunar. Ardışık düzenlerinizi güvence altına almak için çok beğenilen artımlı yaklaşıma ne oldu? Burada bir şey mi özlüyorum yoksa bu güvenlik açığı düşündüğüm kadar kötü mü?

Yanıtlar

1 CeceDong-MSFT Aug 17 2020 at 16:04

Örneğinizde, boş bir ortam yarattığınız / kullandığınız görülüyor, dağıtım hedefi yok. Şu anda bir ortamda yalnızca Kubernetes kaynağı ve sanal makine kaynağı türleri desteklenmektedir.

https://docs.microsoft.com/en-us/azure/devops/pipelines/process/environments?view=azure-devops

Örneğinizdeki kaynak bir servis bağlantısıdır, bu nedenle servis bağlantısına gitmeniz ve bu servis bağlantısı için kontroller tanımlamanız gerekir.

https://docs.microsoft.com/en-us/azure/devops/pipelines/process/approvals?view=azure-devops&tabs=check-pass