Akses aman ke Azure Repos dari alur

Repositori Anda adalah sumber daya penting untuk keberhasilan bisnis Anda, karena repositori tersebut berisi kode yang mendukung bisnis Anda. Akses ke repositori tidak boleh diberikan dengan mudah.

Artikel ini memperlihatkan kepada Anda cara meningkatkan keamanan alur Anda yang mengakses Azure Repos, untuk membatasi risiko kode sumber Anda masuk ke tangan yang salah.

Penyiapan alur untuk mengakses repositori Azure dengan aman adalah salah satunya ketika tombol dwiarah Batasi cakupan otorisasi pekerjaan ke proyek saat ini untuk alur non-rilis, Batasi cakupan otorisasi pekerjaan ke proyek saat ini untuk alur, dan Lindungi akses ke repositori di alur YAML, diaktifkan.

Kami akan membahas alur build dan alur rilis klasik:

Proses dasar

Langkah-langkahnya mirip di semua alur:

  1. Tentukan daftar repositori Azure Repos yang perlu diakses alur Anda yang merupakan bagian dari organisasi yang sama, tetapi berada dalam proyek yang berbeda.

    Anda dapat mengkompilasi daftar repositori dengan memeriksa alur Anda. Atau, Anda dapat mengaktifkan cakupan otorisasi pekerjaan Batasi ke proyek saat ini untuk pengalih alur rilis (non-)dan mencatat repositori mana yang gagal dicek keluar. Repositori submodul mungkin tidak muncul di eksekusi pertama yang gagal.

  2. Untuk setiap proyek Azure DevOps yang berisi repositori yang perlu diakses alur Anda, ikuti langkah-langkah untuk memberikan akses identitas build alur ke proyek tersebut.

  3. Untuk setiap repositori Azure Repos yang dicek keluar alur Anda, ikuti langkah-langkah untuk memberikan identitas build alur Akses baca ke repositori tersebut.

  4. Untuk setiap repositori yang digunakan sebagai submodul oleh repositori yang dicek keluar alur Anda dan berada dalam proyek yang sama, ikuti langkah-langkah untuk memberikan identitas build alur Akses baca ke repositori tersebut.

  5. Aktifkan cakupan otorisasi pekerjaan Batasi ke proyek saat ini untuk alur non-rilis, Batasi cakupan otorisasi pekerjaan ke proyek saat ini untuk alur rilis, dan Lindungi akses ke repositori dalam toggle alur YAML.

Membangun alur

Untuk mengilustrasikan langkah-langkah yang harus diambil untuk meningkatkan keamanan alur Anda saat mengakses Azure Repos, kita akan menggunakan contoh yang sedang berjalan.

Asumsikan Anda sedang mengerjakan alur yang SpaceGameWeb dihosting dalam fabrikam-tailspin/SpaceGameWeb proyek, di SpaceGameWeb repositori Azure Repos. Selain itu, katakanlah alur Anda SpaceGameWeb memeriksa repositori SpaceGameWebReact dalam proyek yang sama, dan FabrikamFiber repositori dan FabrikamChat dalam fabrikam-tailspin/FabrikamFiber proyek.

Terakhir, asumsikan FabrikamFiberFabrikamFiberLib repositori menggunakan repositori sebagai submodul, yang dihosting dalam proyek yang sama. Baca selengkapnya tentang cara memeriksa submodul.

Struktur SpaceGameWeb repositori proyek terlihat seperti pada cuplikan layar berikut.

Screenshot of the SpaceGameWeb repository structure.

Struktur FabrikamFiber repositori proyek terlihat seperti pada cuplikan layar berikut.

Screenshot of the FabrikamFiber repository structure.

Bayangkan proyek Anda tidak disiapkan untuk menggunakan identitas build berbasis proyek atau untuk melindungi akses ke repositori di alur YAML. Selain itu, asumsikan Anda telah berhasil menjalankan alur Anda.

Menggunakan identitas build berbasis Proyek untuk alur build

Saat alur dijalankan, alur menggunakan identitas untuk mengakses berbagai sumber daya, seperti repositori, koneksi layanan, grup variabel. Ada dua jenis identitas yang dapat digunakan alur: tingkat proyek satu dan satu tingkat koleksi. Yang pertama memberikan keamanan yang lebih baik, yang terakhir memberikan kemudahan penggunaan. Baca selengkapnya tentang identitas build tercakup dan cakupan otorisasi pekerjaan.

Kami sarankan Anda menggunakan identitas tingkat proyek untuk menjalankan alur Anda. Secara default, identitas tingkat proyek hanya dapat mengakses sumber daya dalam proyek tempat mereka menjadi anggota. Menggunakan identitas ini meningkatkan keamanan, karena mengurangi akses yang diperoleh oleh orang jahat saat membajak alur Anda.

Untuk membuat alur Anda menggunakan identitas tingkat proyek, aktifkan cakupan otorisasi pekerjaan Batasi ke proyek saat ini untuk pengaturan alur non-rilis .

Dalam contoh kami yang sedang berjalan, ketika tombol ini nonaktif, SpaceGameWeb alur dapat mengakses semua repositori di semua proyek. Ketika tombol aktif, SpaceGameWeb hanya dapat mengakses sumber daya dalam fabrikam-tailspin/SpaceGameWeb proyek, jadi hanya SpaceGameWeb repositori dan SpaceGameWebReact .

Jika Anda menjalankan contoh alur kami, ketika Anda menyalakan tombol, alur akan gagal, dan log kesalahan akan memberi tahu Anda 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. dan 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.

Untuk memperbaiki masalah checkout, ikuti langkah-langkah yang dijelaskan dalam Proses dasar.

Selain itu, Anda perlu secara eksplisit memeriksa repositori submodul, sebelum repositori yang menggunakannya. Dalam contoh kami, itu berarti repositori FabrikamFiberLib .

Jika Anda sekarang menjalankan contoh alur kami, alur tersebut akan berhasil.

Konfigurasi lebih lanjut

Untuk lebih meningkatkan keamanan saat mengakses Azure Repos, pertimbangkan untuk mengaktifkan pengaturan Lindungi akses ke repositori di alur YAML.

SpaceGameWeb Asumsikan alur adalah alur YAML, dan kode sumber YAML-nya terlihat mirip dengan kode berikut.

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
  - ...

Melindungi akses ke repositori di alur YAML

Azure DevOps menyediakan mekanisme izin menenangkan untuk repositori Azure Repos, dalam bentuk pengaturan Lindungi akses ke repositori dalam alur YAML. Pengaturan ini membuat alur YAML secara eksplisit meminta izin untuk mengakses semua repositori Azure Repos, terlepas dari proyek mana mereka berada. Baca selengkapnya tentang pengaturan ini. Memeriksa jenis repositori lain, misalnya, yang dihosting GitHub, tidak terpengaruh oleh pengaturan ini.

Dalam contoh kami yang sedang berjalan, ketika tombol ini aktif, SpaceGameWeb alur akan meminta izin untuk mengakses SpaceGameWebReact repositori dalam fabrikam-tailspin/SpaceGameWeb proyek, dan FabrikamFiber repositori dan FabrikamChat dalam fabrikam-tailspin/FabrikamFiber proyek.

Saat menjalankan contoh alur, Anda akan melihat build yang mirip dengan cuplikan layar berikut. Screenshot of running the SpaceGameWeb pipeline the first time after turning on the Protect access to repositories in YAML pipelines toggle.

Anda akan diminta untuk memberikan izin ke repositori yang dicek keluar alur Anda atau telah didefinisikan sebagai sumber daya. Screenshot of being asked to grant permission to the SpaceGameWeb pipeline to access three repositories.

Setelah Anda melakukannya, alur Anda akan berjalan, tetapi akan gagal karena tidak akan dapat memeriksa repositori FabrikamFiberLib sebagai submodul .FabrikamFiber Untuk mengatasi masalah ini, lihat FabrikamFiberLibsecara eksplisit , misalnya, tambahkan - checkout: git://FabrikamFiber/FabrikamFiberLib langkah, sebelum -checkout: FabrikamFiber langkah.

Jika Anda sekarang menjalankan contoh alur, alur tersebut akan berhasil.

Kode sumber alur YAML akhir kami terlihat seperti cuplikan kode berikut.

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

Pemecahan Masalah

Berikut adalah beberapa situasi bermasalah dan cara menanganinya.

Anda menggunakan git di baris perintah untuk memeriksa repositori di organisasi yang sama

Misalnya, Anda menggunakan - script: git clone https://$(System.AccessToken)@dev.azure.com/fabrikam-tailspin/FabrikamFiber/_git/OtherRepo/. Perintah akan gagal ketika tombol Lindungi akses ke repositori di alur YAML aktif.

Untuk mengatasi masalah ini, lihat repositori OtherRepo menggunakan checkout perintah , misalnya, - checkout: git://FabrikamFiber/OtherRepo.

Repositori menggunakan repositori lain sebagai submodul

Katakanlah salah satu repositori yang dicek keluar alur Anda menggunakan repositori lain (dalam proyek yang sama) sebagai submodul, seperti halnya dalam contoh kami untuk FabrikamFiber repositori dan FabrikamFiberLib . Baca selengkapnya tentang cara memeriksa submodul.

Selain itu, asumsikan Anda memberikan SpaceGame identitas build akses Baca ke repositori ini, tetapi checkout FabrikamFiber repositori masih gagal saat memeriksa FabrikamFiberLib submodul.

Untuk mengatasi masalah ini, lihat FabrikamFiberLibsecara eksplisit , misalnya, tambahkan - checkout: git://FabrikamFiber/FabrikamFiberLib langkah sebelum yang satu -checkout: FabrikamFiber .

Alur rilis klasik

Proses untuk mengamankan akses ke repositori untuk alur rilis mirip dengan yang untuk alur build.

Untuk mengilustrasikan langkah-langkah yang perlu Anda ambil, kita akan menggunakan contoh yang sedang berjalan. Dalam contoh kami, ada alur rilis bernama FabrikamFiberDocRelease dalam fabrikam-tailspin/FabrikamFiberDocRelease proyek. Asumsikan FabrikamFiber alur memeriksa repositori dalam fabrikam-tailspin/FabrikamFiber proyek, menjalankan perintah untuk menghasilkan dokumentasi publik, lalu menerbitkannya ke situs web. Selain itu, bayangkan FabrikamFiber repositori menggunakan FabrikamFiberLib repositori (dalam proyek yang sama) sebagai submodul

Menggunakan identitas build berbasis Proyek untuk alur rilis klasik

Saat alur dijalankan, alur menggunakan identitas untuk mengakses berbagai sumber daya, seperti repositori, koneksi layanan, grup variabel. Ada dua jenis identitas yang dapat digunakan alur: tingkat proyek satu dan satu tingkat koleksi. Yang pertama memberikan keamanan yang lebih baik, yang terakhir memberikan kemudahan penggunaan. Baca selengkapnya tentang identitas build tercakup dan cakupan otorisasi pekerjaan.

Kami sarankan Anda menggunakan identitas tingkat proyek untuk menjalankan alur Anda. Secara default, identitas tingkat proyek hanya dapat mengakses sumber daya dalam proyek tempat mereka menjadi anggota. Menggunakan identitas ini meningkatkan keamanan, karena mengurangi akses yang diperoleh oleh orang jahat saat membajak alur Anda.

Untuk membuat alur Anda menggunakan identitas tingkat proyek, aktifkan pengaturan Batasi otorisasi pekerjaan ke proyek saat ini untuk alur rilis .

Dalam contoh kami yang sedang berjalan, ketika tombol ini nonaktif, FabrikamFiberDocRelease alur rilis dapat mengakses semua repositori di semua proyek, termasuk FabrikamFiber repositori. Ketika tombol aktif, FabrikamFiberDocRelease hanya dapat mengakses sumber daya dalam fabrikam-tailspin/FabrikamFiberDocRelease proyek, sehingga FabrikamFiber repositori menjadi tidak dapat diakses.

Jika Anda menjalankan contoh alur kami, ketika Anda menyalakan tombol, alur akan gagal, dan log akan memberi tahu Anda 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.

Untuk memperbaiki masalah ini, ikuti langkah-langkah dalam proses Dasar.

Jika Anda sekarang menjalankan contoh alur kami, alur tersebut akan berhasil.

Baca juga