Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure DevOps Hizmetleri | Azure DevOps Server | Azure DevOps Server 2022
Azure Pipelines'ın güvenliğini sağlarken paylaşılan altyapıyı, depoları, projeleri ve daha fazlasını korumayı göz önünde bulundurun.
Bu makale, Azure Pipelines için güvenlik önlemleri uygulamanıza yardımcı olan bir serinin parçasıdır. Daha fazla bilgi için bkz . Azure Pipelines'ın güvenliğini sağlama.
Önkoşullar
| Kategori | Gereksinimler |
|---|---|
| Azure DevOps | - Azure DevOps'unuzu güvenli hale getirme ve Azure Pipelines'ı güvenli hale getirme bölümünde öneriler uygulayın. - YAML ve Azure Pipelines hakkında temel bilgiler. Daha fazla bilgi için bkz. İlk işlem hattınızı oluşturma. |
| İzinler | - İşlem hattı izinlerini değiştirmek için: Proje Yöneticileri grubunun üyesi. - Kuruluş izinlerini değiştirmek için: Proje Koleksiyonu Yöneticileri grubunun üyesi. |
Paylaşılan altyapıyı koruma
Azure Pipelines'daki korumalı kaynaklar, gerçek altyapının soyutlamasıdır. Altyapının temelini korumak için bu önerileri izleyin.
Microsoft tarafından barındırılan havuzları kullanma
Microsoft tarafından barındırılan havuzlar, bir işlem hattının her çalıştırması için yalıtım ve temiz bir sanal makine sağlar. Mümkünse, şirket içinde barındırılan havuzlar yerine Microsoft tarafından barındırılan havuzları kullanın.
Her proje için ayrı aracılar
Bir aracı yalnızca bir havuzla ilişkilendirebilir. Havuzu birden çok projeyle ilişkilendirerek aracıları projeler arasında paylaşabilirsiniz. Uygulamada, birden çok proje aynı aracıyı art arda kullanabilir. Uygun maliyetli olsa da, bu yaklaşım yanal hareket risklerine neden olabilir.
Yanal hareketi azaltmak ve projeler arasında çapraz bulaşmayı önlemek için, her biri belirli bir projeye ayrılmış ayrı aracı havuzları koruyun.
Aracıları çalıştırmak için düşük ayrıcalıklı hesaplar kullanma
Aracıyı Azure DevOps kaynaklarına doğrudan erişimi olan bir kimlik altında çalıştırmak riskli olabilir. Bu risk, Microsoft Entra Id kullanan kuruluşlarda yaygındır.
Bu risk neden önemlidir:
- Aracıyı Entra Id tarafından yedeklenen bir kimlik altında çalıştırırsanız, işin erişim belirtecini kullanmadan Azure DevOps API'lerine doğrudan erişebilir.
- Bu derleme aracılarında güvenliği aşılmış bir işlem hattı çalıştıran saldırganlar, azure devops kuruluşunun tamamı üzerinde denetim sahibi olabilir.
Öneri: Ayrıcalıksız bir yerel hesap kullanarak aracıyı çalıştırın:
-
Windows aracıları: Ağ Hizmeti (
NT AUTHORITY\NETWORK SERVICE), Yerel Hizmet veya Grup Tarafından Yönetilen Hizmet Hesabı (gMSA) kullanın. -
Linux aracıları ve macOS aracıları: Ayrılmış bir kök olmayan kullanıcı hesabı oluşturun (örneğin,
svc_azuredevops). Bu hesap, maksimum güvenlik için sudo veya sudoers erişimine sahip olmamalıdır.
Önemli
Azure DevOps'ta Proje Koleksiyonu Hizmet Hesapları grubu yanıltıcı olabilir. Devralma yoluyla, Proje Koleksiyonu Hizmet Hesaplarının üyeleri de Proje Koleksiyonu Yöneticilerinin üyeleridir. Bazı müşteriler, derleme aracılarının Entra ID tarafından desteklenen bir kimlik kullanarak çalıştırır ve bu kimlikler Proje Koleksiyonu Hizmet Hesaplarının bir parçası olabilir.
Yüksek ayrıcalıklı aracıların riskleri:
Kendi kendine barındırılan aracılar bazen gizli bilgilere veya üretim ortamlarına erişmek için yüksek ayrıcalıklı hesaplar altında çalışır. Saldırganlar bu derleme aracılarından birinde güvenliği aşılmış bir işlem hattı yürütürse şunları yapabilir:
- Bu sırlara erişim ele geçirin
- Bu hesaplar aracılığıyla erişilebilen diğer sistemlerde yatay olarak hareket etme
Aracı güvenliği için en iyi yöntemler:
- Şirket içinde barındırılan aracıları çalıştırmak için mümkün olan en düşük ayrıcalıklı hesabı kullanın.
- Makine hesabınızı veya yönetilen hizmet kimliğini kullanmayı göz önünde bulundurun.
- Azure Pipelines'ın gizli bilgilere ve ortamlara erişimi yönetmesini sağlayın.
Hizmet bağlantılarının kapsamını en aza indirme
Hizmet bağlantıları yalnızca gerekli kaynaklara erişmelidir.
Kimlik doğrulama önerileri:
- Mümkün olduğunda Azure hizmet bağlantınız için hizmet sorumlusu yerine iş yükü kimlik federasyonu kullanın.
- İş yükü kimlik federasyonu, Azure ile Azure DevOps arasında sırları kullanmadan kimlik doğrulama sağlamak için endüstri standardı bir teknoloji olan Open ID Connect'i (OIDC) kullanır.
Kapsam önerileri:
- Azure hizmet bağlantınızın kapsamını yalnızca gerekli kaynaklara erişecek şekilde belirleyin.
- Azure aboneliğinin tümü için katkıda bulunanlara yönelik geniş haklar vermekten kaçının.
- Yeni bir Azure Resource Manager hizmet bağlantısı oluştururken her zaman belirli bir kaynak grubunu seçin.
- Kaynak grubunun yalnızca derleme için gerekli VM'leri veya kaynakları içerdiğinden emin olun.
- GitHub uygulamasını yapılandırırken yalnızca derlemek istediğiniz depolara erişim verin.
- Hizmet bağlantısı Kullanım geçmişini düzenli olarak gözden geçirin ve artık gerekli olmayan bağlantıları kaldırın veya devre dışı bırakın. Hizmet bağlantıları, bağlandıkları hizmetlere sabit erişime sahiptir, bu nedenle kullanılmayan bağlantılar gerekenden daha uzun süre etkin kalmamalıdır. Azure Pipelines, etkin olmayan hizmet bağlantılarını 100 gün etkinlik dışı bırakıldıktan sonra otomatik olarak devre dışı bırakmaya başlıyor.
Projeleri koruma
Tek tek kaynakların ötesinde, Azure DevOps'ta kaynak gruplarını göz önünde bulundurmak çok önemlidir. Kaynaklar ekip projelerine göre düzenlenir ve proje ayarlarına ve kapsama göre işlem hattınızın nelere erişebileceğini anlamanız gerekir.
İşlem hattınızdaki her iş, açık kaynakları okuma izinlerine sahip bir erişim belirteci alır. Bazı durumlarda boru hatları bu kaynakları da güncelleyebilir. Bu izin modeli, kullanıcı hesabınızın belirli bir kaynağa doğrudan erişimi olmasa da işlem hattınızda çalışan betiklerin ve görevlerin yine de kaynağa erişebileceği anlamına gelir. Ayrıca Azure DevOps'un güvenlik modeli, kuruluştaki diğer projelerden bu kaynaklara erişim sağlar. İşlem hattı erişimini belirli kaynaklara kısıtlamaya karar verirseniz, bu karar bir projedeki tüm işlem hatları için geçerlidir. Belirli işlem hatlarına açık kaynaklara seçmeli erişim verilemiyor.
Ayrı projeler
Açık kaynakların yapısı göz önünde bulundurulduğunda, her ürünü ve ekibi ayrı projelerde yönetmeyi göz önünde bulundurun. Bunu yaparak, bir ürünün işlem hatlarının yanlışlıkla başka bir üründen açık kaynaklara erişmesini engeller ve böylece yanal maruz kalma en aza indirilir. Ancak birden çok ekip veya ürün bir projeyi paylaştığında kaynaklarının ayrıntılı olarak yalıtılması zorlaşır.
Azure DevOps kuruluşunuz Ağustos 2019'dan önce oluşturulduysa, çalıştırmalar kuruluşunuzun tüm projelerine açık kaynaklara erişmeye devam edebilir. Kuruluş yöneticiniz, Azure Pipelines'da işlem hatları için proje yalıtımını etkinleştiren kritik bir güvenlik ayarını gözden geçirmelidir.
Bu ayarı Kuruluş ayarları>İşlem Hattı>Ayarları'nda veya doğrudan: adresinde bulabilirsiniz. https://dev.azure.com/Organization_Name/_settings/pipelinessettings
Depoları koruma
Sürüm denetimi depolarında kaynak kodunu, işlem hattının YAML dosyasını ve gerekli betikleri ve araçları depolayabilirsiniz. Kod ve işlem hattında güvenli değişiklikler yapmak için izinleri ve dal ilkelerini uygulamak çok önemlidir. Ayrıca, depolara işlem hattı izinleri ve denetimleri eklemeyi de göz önünde bulundurun.
Ayrıca, depolarınız için varsayılan erişim denetimi ayarlarını gözden geçirin.
Git'in tasarımının dal düzeyinde korumanın sınırlamaları olduğu anlamına geldiğini unutmayın. Depoya anında iletme erişimi olan kullanıcılar genellikle yeni dallar oluşturabilir. GitHub açık kaynak projeleriyle çalışıyorsanız, GitHub hesabı olan herkes deponuzu fork edebilir ve katkıda bulunabilir olarak önerilerde bulunabilir. İşlem hatları bir depoyla (belirli dallarla değil) ilişkilendirildiğinden, kod ve YAML dosyalarını potansiyel olarak güvenilmeyen olarak ele almak önemlidir.
Çatallar
GitHub'dan genel depolarla çalışırken fork işlemlerine yaklaşımınızı dikkatle göz önünde bulundurun. Kuruluşunuzun dışından gelen çatallar belirli riskler oluşturur. Ürünlerinizi güvenilmeyen olası katkıda bulunan kodlardan korumak için bu önerileri izleyin.
Not
Bu öneriler öncelikle GitHub'dan genel depolar oluşturmak için geçerlidir.
Çatal derlemelere gizli bilgileri sağlamayın
Varsayılan olarak, işlem hatlarınız çatalar oluşturur, ancak gizli bilgileri ve korumalı kaynakları bu işlem hatlarındaki işlere otomatik olarak sunmaz. Güvenliği korumak için bu korumayı devre dışı bırakma.
Not
Gizli anahtarlara erişmek için çatal oluşturma işlemlerini etkinleştirdiğinizde Azure Pipelines varsayılan olarak kullanılan erişim belirtecini kısıtlar. Bu belirtecin açık kaynaklara erişimi normal erişim belirteciyle karşılaştırıldığında sınırlıdır. Çatal derlemelerine normal derlemelerle aynı izinleri vermek için, Çatal derlemelerinin normal derlemelerle aynı izinlere sahip olmasını sağlayın ayarını etkinleştirin.
Çatal derlemelerini manuel olarak tetiklemeyi göz önünde bulundurun
Otomatik çatal derlemelerini kapatın ve bunun yerine bu katkıları el ile oluşturmanın bir yolu olarak çekme isteği açıklamalarını kullanın. Bu ayar, bir derlemeyi tetiklemeden önce kodu gözden geçirme fırsatı sunar.
Çatallanmış derlemeler için Microsoft barındırmalı aracıları kullanın
Kendi barındırılan aracılarda çatallardan derleme çalıştırmaktan kaçının. Şirket içinde barındırılan aracılar kullanıyorsanız, dış kuruluşlar şirket ağınızdaki makinelerde dış kod çalıştırabilir. Mümkün olduğunda Microsoft tarafından barındırılan aracıları kullanın. Kendi kendine barındırılan aracılar için ağ yalıtımı uygulayın ve aracıların işleri arasında durumlarını kalıcı hale getirmemelerinden emin olun.
Kod değişikliklerini gözden geçirme
Çatallı çekme isteğinde işlem hattınızı çalıştırmadan önce, önerilen değişiklikleri dikkatle gözden geçirin ve çalıştırmaya hazır olduğunuzdan emin olun.
Çalıştırdığınız YAML işlem hattının sürümü, çekme isteğinden alınan sürümdür. YAML kodunda ve komut satırı betikleri veya birim testleri gibi işlem hattı çalıştırıldığında çalışan kodda yapılan değişikliklere özellikle dikkat edin.
GitHub belirteç kapsamı sınırlaması
GitHub çatallı çekme isteği oluşturduğunuzda Azure Pipelines, işlem hattının GitHub depo içeriğini değiştirememesini sağlar. Bu kısıtlama yalnızcaAzure Pipelines GitHub uygulamasını GitHub ile tümleştirmek için kullandığınızda geçerlidir. OAuth uygulaması gibi diğer GitHub tümleştirme biçimlerini kullanıyorsanız kısıtlama uygulanmaz.
Kullanıcı branşları
Kuruluşunuzdaki doğru izinlere sahip kullanıcılar yeni veya güncelleştirilmiş kod içeren yeni dallar oluşturabilir. Korumalı dallarınızla aynı işlem hattı üzerinden bu kod çalıştırılabilir. Yeni daldaki YAML dosyası değiştirilirse, güncelleştirilmiş YAML işlem hattını çalıştırır. Bu tasarım büyük esneklik ve self servis sunsa da, tüm değişiklikler (kötü amaçlı olarak yapılıp yapılmadığı) güvenli değildir.
İşlem hattınız kaynak kodu kullanıyorsa veya Azure Repos'ta tanımlanmışsa Azure Repos izinleri modelini tam olarak anlamanız gerekir. Özellikle, depo düzeyinde Dal Oluşturma iznine sahip bir kullanıcı, katkıda bulunma izni olmasa bile depoya kod ekleyebilir.
Diğer güvenlik konuları
İşlem hatlarının güvenliğini sağlarken aşağıdaki güvenlik özelliklerini göz önünde bulundurun.
PATH'i kullan
Aracının PATH ayarına güvenmek tehlikelidir. Önceki bir betik veya araç potansiyel olarak değiştirdiğinden, bunu düşündüğünüz yere işaret etmeyebilir. Güvenlik açısından kritik betikler ve ikili dosyalar için her zaman programın adlandırılmış tam yolunu kullanın.
Günlük sırları
Azure Pipelines, olabildiğince günlüklerden gizli bilgileri kaldırmaya çalışır. Bu filtreleme azami çabayla yapılmaktadır ve sırların sızdırılabileceği tüm yolları yakalayamaz. Gizli bilgileri konsolda yankılamaktan, komut satırı parametrelerinde kullanmaktan veya dosyalara loglamaktan kaçının.
Kapsayıcıları kilitle
Kapsayıcılar, sistem tarafından sağlanan birkaç birim bağlamasına sahiptir. Bu birimler, görevler, çalışma alanı ve konak aracısı ile iletişim kurmak için gerekli olan dış bileşenlerle eşlenmiştir. Bu birimlerin herhangi birini veya tümünü yalnızca okunabilir olarak işaretleyebilirsiniz.
resources:
containers:
- container: example
image: ubuntu:22.04
mountReadOnly:
externals: true
tasks: true
tools: true
work: false # the default; shown here for completeness
Genellikle, çoğu kişi ilk üç dizini salt okunur olarak ayarlar ve work'yi okuma-yazma olarak bırakır.
Belirli bir iş veya adımda work dizinine yazmıyorsanız, work dizinini de salt okunur yapabilirsiniz. Eğer işlem hattı görevleriniz kendi kendini değiştirebilme içeriyorsa, tasks'u okuma-yazma olarak tutmanız gerekebilir.
Kullanılabilir görevleri denetleme
Market'ten görevleri yükleme ve çalıştırma özelliğini devre dışı bırakabilirsiniz. Bu yaklaşım, işlem hattında çalışan kod üzerinde daha fazla denetim sağlar. Ayrıca, aracı üzerinde özel bir eylem olan Kullanıma Alma görevi dışındaki tüm kutu içi görevleri devre dışı bırakabilirsiniz. Çoğu durumda kutu içi görevleri devre dışı bırakmayın.
Doğrudan kullanarak tfx yüklediğiniz görevler her zaman kullanılabilir.
Bu özelliklerin ikisini de etkinleştirdiğinizde , yalnızca bu görevler kullanılabilir.
Denetim hizmetini kullanma
Denetleme hizmeti birçok işlem hattı öğesini kaydeder.
Kötü amaçlı bir değişikliğin geçmişte kalmadığından emin olmak için denetim günlüğünü düzenli aralıklarla gözden geçirin.
Başlamak için https://dev.azure.com/ORG-NAME/_settings/audit adresini ziyaret edin.