Aracılığıyla paylaş


İş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:

  1. İş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.

  2. İş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.

  3. İş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.

  4. İş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.

  5. 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/SpaceGameWebSpaceGameWeb 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.

Screenshot of the SpaceGameWeb repository structure.

Projenin FabrikamFiber depo yapıları aşağıdaki ekran görüntüsünde olduğu gibi görünür.

Screenshot of the FabrikamFiber repository structure.

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/SpaceGameWebFabrikamFiber 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. Screenshot of running the SpaceGameWeb pipeline the first time after turning on the Protect access to repositories in YAML pipelines toggle.

İşlem hattınızın kullanıma aldığı veya kaynak olarak tanımladığı depolara izin vermeniz istenir. Screenshot of being asked to grant permission to the SpaceGameWeb pipeline to access three repositories.

Bunu yaptıktan sonra işlem hattınız çalışır, ancak depoyu alt modülü FabrikamFiberolarak 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 SpaceGamebu 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.

Ayrıca bkz.