İşlem hatlarından Azure Repos'a güvenli erişim
Depolarınız, işinizi destekleyen kodu içerdiğinden işletmenizin başarısı için kritik bir kaynaktır. Depolara erişim kolay verilmemelidir.
Bu makalede, kaynak kodunuzun yanlış ellere girme riskini sınırlamak için Azure Repos'a erişen işlem hatlarınızın güvenliğini nasıl artırabileceğiniz gösterilmektedir.
Azure depolarına güvenle erişmek için işlem hatlarının kurulumu, Yayın olmayan işlem hatları için iş yetkilendirme kapsamını geçerli projeyle sınırla, Yayın işlem hatları için iş yetkilendirme kapsamını geçerli projeyle sınırla ve YAML işlem hatlarındaki depolara erişimi koru seçeneklerinin etkinleştirildiği kurulumdur.
Hem derleme işlem hatlarını hem de klasik yayın işlem hatlarını ele alacağız:
Temel işlem
Adımlar tüm işlem hatlarında benzerdir:
İşlem hattınızın erişmesi gereken, aynı kuruluşun parçası olan ancak farklı projelerde yer alan Azure Depoları listesini belirleyin.
İşlem hattınızı inceleyerek depo listesini derleyebilirsiniz. Alternatif olarak, yayın işlem hatları için iş yetkilendirme kapsamını geçerli projeyle sınırla iki durumlu düğmesini açabilir ve işlem hattınızın hangi depoları kullanıma alabileceğini not edebilirsiniz. Alt modül depoları ilk başarısız çalıştırmada görünmeyebilir.
İşlem hattınızın erişmesi gereken bir depo içeren her Azure DevOps projesi için, işlem hattının derleme kimliğine bu projeye erişim izni vermek için adımları izleyin.
İşlem hattınızın kullanıma alan her Azure Deposu için, işlem hattının derleme kimliğine bu depoya Okuma erişimi verme adımlarını izleyin.
İşlem hattınızın kullanıma aldığı ve aynı projede yer alan bir depo tarafından alt modül olarak kullanılan her depo için, işlem hattının derleme kimliğine bu depoya Okuma erişimi vermek için adımları izleyin.
Yayın dışı işlem hatları için İş yetkilendirme kapsamını geçerli projeyle sınırla, Yayın işlem hatları için iş yetkilendirme kapsamını geçerli projeyle sınırla ve YAML işlem hatlarındaki depolara erişimi koru geçişlerini açın.
İşlem hatları oluşturma
Azure Repos'a erişirken işlem hatlarınızın güvenliğini artırmak için atılacak adımları göstermek için çalışan bir örnek kullanacağız.
Projede, Azure Repos deposunda barındırılan fabrikam-tailspin/SpaceGameWeb
SpaceGameWeb
işlem hattı üzerinde SpaceGameWeb
çalıştığınızı varsayalım. Ayrıca işlem hattınızın SpaceGameWeb
aynı projedeki depoyu SpaceGameWebReact
ve projedeki FabrikamFiber
ve FabrikamChat
depolarını kontrol ettiğinizi fabrikam-tailspin/FabrikamFiber
varsayalım.
Son olarak, deponun FabrikamFiber
depoyu aynı projede barındırılan FabrikamFiberLib
bir alt modül olarak kullandığını varsayalım. Alt modülleri kullanıma alma hakkında daha fazla bilgi edinin.
Projenin SpaceGameWeb
depo yapıları aşağıdaki ekran görüntüsünde olduğu gibi görünür.
Projenin FabrikamFiber
depo yapıları aşağıdaki ekran görüntüsünde olduğu gibi görünür.
Projenizin proje tabanlı derleme kimliği kullanacak veya YAML işlem hatlarındaki depolara erişimi korumak için ayarlı olmadığını düşünün. Ayrıca, işlem hattınızı zaten başarıyla çalıştırdığınızı varsayalım.
Derleme işlem hatları için Proje tabanlı derleme kimliği kullanma
İşlem hattı yürütürken depolar, hizmet bağlantıları, değişken grupları gibi çeşitli kaynaklara erişmek için bir kimlik kullanır. İşlem hattının kullanabileceği iki kimlik türü vardır: proje düzeyinde bir ve koleksiyon düzeyinde bir kimlik. Birincisi daha iyi güvenlik sağlar, ikincisi kullanım kolaylığı sağlar. Kapsamlı derleme kimlikleri ve iş yetkilendirme kapsamı hakkında daha fazla bilgi edinin.
İşlem hatlarınızı çalıştırmak için proje düzeyinde kimlikler kullanmanızı öneririz. Varsayılan olarak, proje düzeyinde kimlikler yalnızca üyesi oldukları projedeki kaynaklara erişebilir. Bu kimliğin kullanılması, işlem hattınızı ele geçirme sırasında kötü amaçlı bir kişinin kazandığı erişimi azalttığı için güvenliği artırır.
İşlem hattınızın proje düzeyinde bir kimlik kullanmasını sağlamak için, Yayın dışı işlem hatları için iş yetkilendirme kapsamını geçerli projeyle sınırla ayarını açın.
Çalışan örneğimizde, bu geçiş kapalı olduğunda işlem SpaceGameWeb
hattı tüm projelerdeki tüm depolara erişebilir. Geçiş açıkken yalnızca SpaceGameWeb
projedeki fabrikam-tailspin/SpaceGameWeb
kaynaklara erişebilir, bu nedenle yalnızca SpaceGameWeb
ve SpaceGameWebReact
depoları.
Örnek işlem hattımızı çalıştırırsanız iki durumlu düğmeyi açtığınızda işlem hattı başarısız olur ve hata günlükleri size remote: TF401019: The Git repository with name or identifier FabrikamChat does not exist or you do not have permissions for the operation you are attempting.
ve remote: TF401019: The Git repository with name or identifier FabrikamFiber does not exist or you do not have permissions for the operation you are attempting.
Kullanıma alma sorunlarını düzeltmek için Temel işlem bölümünde açıklanan adımları izleyin.
Ayrıca, bunları kullanan depolar öncesinde alt modül depolarını açıkça gözden geçirmeniz gerekir. Bizim örneğimizde depo anlamına gelir FabrikamFiberLib
.
Şimdi örnek işlem hattımızı çalıştırırsanız başarılı olur.
Daha fazla yapılandırma
Azure Depolarına erişirken güvenliği daha da geliştirmek için YAML işlem hatlarındaki depolara erişimi koru ayarını açmayı göz önünde bulundurun.
İşlem hattının SpaceGameWeb
bir YAML işlem hattı olduğunu ve YAML kaynak kodunun aşağıdaki koda benzer olduğunu varsayalım.
trigger:
- main
pool:
vmImage: ubuntu-latest
resources:
repositories:
- repository: SpaceGameWebReact
name: SpaceGameWeb/SpaceGameWebReact
type: git
- repository: FabrikamFiber
name: FabrikamFiber/FabrikamFiber
type: git
- repository: FabrikamChat
name: FabrikamFiber/FabrikamChat
type: git
steps:
- script: echo "Building SpaceGameWeb"
- checkout: SpaceGameWebReact
- checkout: FabrikamChat
condition: always()
- checkout: FabrikamFiber
submodules: true
condition: always()
- script: |
cd FabrikamFiber
git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" submodule update --recursive --remote
- script: cat $(Build.Repository.LocalPath)/FabrikamFiber/FabrikamFiberLib/README.md
- ...
YAML işlem hatlarındaki depolara erişimi koruma
Azure DevOps, YAML işlem hatlarındaki depolara erişimi koru ayarı biçiminde Azure Depoları için ayrıntılı bir izin mekanizması sağlar. Bu ayar, bir YAML işlem hattının ait oldukları projeye bakılmaksızın tüm Azure Depoları depolarına erişim izni istemesini sağlar. Bu ayar hakkında daha fazla bilgi edinin. GitHub'da barındırılan depolar gibi diğer depo türlerinin kullanıma alınılması bu ayardan etkilenmez.
Çalışan örneğimizde, bu geçiş açıkken işlem SpaceGameWeb
hattı projedeki depoya ve projedeki fabrikam-tailspin/SpaceGameWeb
FabrikamFiber
ve FabrikamChat
depolarına fabrikam-tailspin/FabrikamFiber
erişmek SpaceGameWebReact
için izin ister.
Örnek işlem hattını çalıştırdığınızda aşağıdaki ekran görüntüsüne benzer bir derleme görürsünüz.
İşlem hattınızın kullanıma aldığı veya kaynak olarak tanımladığı depolara izin vermeniz istenir.
Bunu yaptıktan sonra işlem hattınız çalışır, ancak depoyu alt modülü FabrikamFiber
olarak kullanıma FabrikamFiberLib
alamayacağından başarısız olur. Bu sorunu çözmek için, adımdan önce -checkout: FabrikamFiber
bir adım ekleme gibi açık bir - checkout: git://FabrikamFiber/FabrikamFiberLib
şekilde öğesini gözden geçirinFabrikamFiberLib
.
Şimdi örnek işlem hattını çalıştırırsanız başarılı olur.
Son YAML işlem hattı kaynak kodumuz aşağıdaki kod parçacığına benzer.
trigger:
- main
pool:
vmImage: ubuntu-latest
resources:
repositories:
- repository: SpaceGameWebReact
name: SpaceGameWeb/SpaceGameWebReact
type: git
- repository: FabrikamFiber
name: FabrikamFiber/FabrikamFiber
type: git
- repository: FabrikamChat
name: FabrikamFiber/FabrikamChat
type: git
steps:
- script: echo "Building SpaceGameWeb"
- checkout: SpaceGameWebReact
- checkout: FabrikamChat
condition: always()
- checkout: git://FabrikamFiber/FabrikamFiberLib
- checkout: FabrikamFiber
submodules: true
condition: always()
- script: |
cd FabrikamFiber
git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" submodule update --recursive --remote
- script: cat $(Build.Repository.LocalPath)/FabrikamFiber/FabrikamFiberLib/README.md
Sorun giderme
İşte birkaç sorunlu durum ve bunların nasıl işleneceğini.
Aynı kuruluştaki depoları kullanıma almak için komut satırında git kullanırsınız
Örneğin, kullanıyorsunuz - script: git clone https://$(System.AccessToken)@dev.azure.com/fabrikam-tailspin/FabrikamFiber/_git/OtherRepo/
. YAML işlem hatlarındaki depolara erişimi koru iki durumlu düğmesi açık olduğunda komut başarısız olur.
Sorunu çözmek için komutunu kullanarak depoya göz atınOtherRepo
; örneğin, - checkout: git://FabrikamFiber/OtherRepo
.checkout
Depo, alt modül olarak başka bir depo kullanıyor
İşlem hattınızın denetlediği depolardan birinin, ve FabrikamFiberLib
depoları örneğimizde FabrikamFiber
olduğu gibi alt modül olarak başka bir depo (aynı projede) kullandığını varsayalım. Alt modülleri kullanıma alma hakkında daha fazla bilgi edinin.
Ayrıca, derleme kimliğine SpaceGame
bu depoya Okuma erişimi verdiğini, ancak alt modül kullanıma alınırken deponun FabrikamFiber
kullanıma alınamamasına FabrikamFiberLib
rağmen başarısız olduğunu varsayalım.
Bu sorunu çözmek için, örneğin bir adımdan önce -checkout: FabrikamFiber
bir adım eklemek gibi açık bir - checkout: git://FabrikamFiber/FabrikamFiberLib
şekilde öğesini gözden geçirinFabrikamFiberLib
.
Klasik yayın işlem hatları
Yayın işlem hatları için depolara erişimin güvenliğini sağlama işlemi, derleme işlem hatları için olan işlem hattına benzer.
Uygulamanız gereken adımları göstermek için çalışan bir örnek kullanacağız. Örneğimizde, projede fabrikam-tailspin/FabrikamFiberDocRelease
adlı FabrikamFiberDocRelease
bir yayın işlem hattı vardır. İşlem hattının projedeki fabrikam-tailspin/FabrikamFiber
depoyu FabrikamFiber
denetlediğinden, genel belgeler oluşturmak için bir komut çalıştırdığında ve bunu bir web sitesinde yayımladığında varsayın. Ayrıca, deponun FabrikamFiber
bir alt modül olarak depoyu FabrikamFiberLib
(aynı projede) kullandığını düşünün
Klasik yayın işlem hatları için Project tabanlı derleme kimliği kullanma
İşlem hattı yürütürken depolar, hizmet bağlantıları, değişken grupları gibi çeşitli kaynaklara erişmek için bir kimlik kullanır. İşlem hattının kullanabileceği iki kimlik türü vardır: proje düzeyinde bir ve koleksiyon düzeyinde bir kimlik. Birincisi daha iyi güvenlik sağlar, ikincisi kullanım kolaylığı sağlar. Kapsamlı derleme kimlikleri ve iş yetkilendirme kapsamı hakkında daha fazla bilgi edinin.
İşlem hatlarınızı çalıştırmak için proje düzeyinde kimlikler kullanmanızı öneririz. Varsayılan olarak, proje düzeyinde kimlikler yalnızca üyesi oldukları projedeki kaynaklara erişebilir. Bu kimliğin kullanılması, işlem hattınızı ele geçirme sırasında kötü amaçlı bir kişinin kazandığı erişimi azalttığı için güvenliği artırır.
İşlem hattınızın proje düzeyinde bir kimlik kullanmasını sağlamak için İş yetkilendirme kapsamını yayın işlem hatları için geçerli projeyle sınırla ayarını açın.
Çalışan örneğimizde, bu geçiş kapalı olduğunda yayın FabrikamFiberDocRelease
işlem hattı depo dahil olmak üzere tüm projelerdeki tüm depolara FabrikamFiber
erişebilir. İki durumlu düğme açıkken yalnızca FabrikamFiberDocRelease
projedeki kaynaklara fabrikam-tailspin/FabrikamFiberDocRelease
erişebilir, bu nedenle FabrikamFiber
depoya erişilemez hale gelir.
Örnek işlem hattımızı çalıştırırsanız iki durumlu düğmeyi açtığınızda işlem hattı başarısız olur ve günlükler size bildirir remote: TF401019: The Git repository with name or identifier FabrikamFiber does not exist or you do not have permissions for the operation you are attempting.
Bu sorunları düzeltmek için Temel işlem'deki adımları izleyin.
Şimdi örnek işlem hattımızı çalıştırırsanız başarılı olur.