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:
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.
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.
Untuk setiap repositori Azure Repos yang dicek keluar alur Anda, ikuti langkah-langkah untuk memberikan identitas build alur Akses baca ke repositori tersebut.
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.
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 FabrikamFiber
FabrikamFiberLib
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.
Struktur FabrikamFiber
repositori proyek terlihat seperti pada cuplikan layar berikut.
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.
Anda akan diminta untuk memberikan izin ke repositori yang dicek keluar alur Anda atau telah didefinisikan sebagai sumber daya.
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 FabrikamFiberLib
secara 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 FabrikamFiberLib
secara 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.