Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Layanan Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022
Pipeline menawarkan kemampuan yang kuat untuk mengeksekusi skrip dan menyebarkan kode ke lingkungan produksi, tetapi sangat penting untuk menjaga keseimbangan antara kekuatan ini dengan keamanan. Anda tidak pernah ingin alur menjadi saluran untuk kode berbahaya. Menyeimbangkan keamanan dengan fleksibilitas dan daya yang diperlukan oleh tim pengembangan sangat penting.
Artikel ini memberikan gambaran umum tentang konfigurasi terkait keamanan yang diperlukan untuk melindungi alur Anda dari ancaman dan kerentanan.
Prasyarat
| Kategori | Persyaratan |
|---|---|
| Azure DevOps | - Terapkan rekomendasi di Membuat Azure DevOps Anda aman. - Pengetahuan dasar tentang YAML dan Azure Pipelines. Untuk informasi selengkapnya, lihat Buat pipeline pertama Anda. |
| Izin | - Untuk mengubah izin alur: Anggota grup Administrator Proyek. - Untuk mengubah izin organisasi: Anggota grup Administrator Koleksi Proyek. |
Membatasi akses proyek, repositori, dan koneksi layanan
Untuk meningkatkan keamanan, pertimbangkan untuk memisahkan proyek Anda, menggunakan kebijakan cabang, dan menambahkan lebih banyak langkah keamanan untuk fork. Minimalkan cakupan koneksi layanan dan gunakan metode autentikasi yang paling aman.
- Proyek terpisah: Mengelola setiap produk dan tim dalam proyek terpisah. Ini mencegah alur dari satu produk secara tidak sengaja mengakses sumber daya terbuka dari produk lain, meminimalkan paparan lateral.
- Gunakan identitas tingkat proyek: Gunakan identitas build berbasis proyek untuk alur alih-alih identitas tingkat koleksi. Identitas tingkat proyek hanya dapat mengakses sumber daya dalam proyek terkait, meminimalkan risiko akses tidak sah oleh aktor jahat. Untuk informasi selengkapnya, lihat cakupan identitas build dan ruang lingkup otorisasi pekerjaan.
- Gunakan kebijakan cabang: Untuk memastikan perubahan aman pada kode dan alur, terapkan izin dan kebijakan cabang. Selain itu, pertimbangkan untuk menambahkan izin alur dan pemeriksaan ke repositori.
-
Tambahkan keamanan tambahan untuk fork: Saat Anda bekerja dengan repositori publik dari GitHub, pertimbangkan dengan cermat pendekatan Anda untuk build fork. Fork yang berasal dari luar organisasi Anda menimbulkan risiko tertentu.
- Jangan memberikan rahasia ke build fork: Secara default, alur dikonfigurasi untuk membangun fork, tetapi rahasia dan sumber daya yang dilindungi tidak secara otomatis terekspos ke pekerjaan dalam alur tersebut. Sangat penting untuk tidak menonaktifkan perlindungan ini untuk menjaga keamanan.
- Pertimbangkan untuk memicu build fork secara manual: Nonaktifkan build fork otomatis dan gunakan komentar permintaan pull untuk membangun kontribusi ini secara manual. Pengaturan ini memberi Anda kesempatan untuk meninjau kode sebelum memicu build. Untuk informasi selengkapnya, lihat Menonaktifkan build fork otomatis.
- Jangan berikan rahasia pada build fork: Secara default, rahasia yang terkait dengan pipeline Anda tidak tersedia untuk validasi pull request fork. Jangan aktifkan opsi untuk Membuat rahasia tersedia untuk build fork. Untuk petunjuk tentang cara menemukan dan memverifikasi pengaturan ini, lihat Kontribusi dari fork.
- Pertimbangkan untuk memicu build fork secara manual: Nonaktifkan build fork otomatis dan gunakan komentar permintaan pull untuk membangun kontribusi ini secara manual. Pengaturan ini memberi Anda kesempatan untuk meninjau kode sebelum memicu build. Untuk petunjuk tentang cara melakukannya, lihat Menonaktifkan build fork otomatis.
- Gunakan agen yang dihosting Microsoft untuk build fork: Hindari menjalankan build dari fork pada agen yang dihost sendiri. Melakukannya dapat memungkinkan organisasi eksternal untuk menjalankan kode eksternal pada komputer dalam jaringan perusahaan Anda. Jika memungkinkan, gunakan agen yang dihosting Microsoft.
- Gunakan aplikasi GitHub Azure Pipelines untuk batasan cakupan token: Saat Anda membuat permintaan pull fork GitHub, Azure Pipelines memastikan alur tidak dapat mengubah konten repositori GitHub apa pun. Pembatasan ini hanya berlaku jika Anda menggunakan aplikasi Azure Pipelines GitHub untuk berintegrasi dengan GitHub.
Mengamankan koneksi layanan
- Minimalkan cakupan koneksi layanan: Koneksi layanan hanya boleh memiliki akses ke sumber daya yang diperlukan. Saat Anda membuat koneksi layanan Azure Resource Manager baru, selalu pilih grup sumber daya tertentu. Pastikan bahwa grup sumber daya hanya berisi VM atau sumber daya yang diperlukan untuk build. Untuk petunjuk tentang cara menyiapkan koneksi layanan, lihat Menggunakan koneksi layanan Azure Resource Manager.
- Gunakan federasi identitas beban kerja untuk autentikasi: Jika memungkinkan, gunakan federasi identitas beban kerja alih-alih perwakilan layanan untuk koneksi layanan Azure Anda. Federasi identitas beban kerja menggunakan Open ID Connect (OIDC), teknologi standar industri, untuk memfasilitasi autentikasi antara Azure dan Azure DevOps tanpa mengandalkan rahasia. Untuk instruksi tentang cara melakukannya, lihat Membuat koneksi layanan dengan federasi identitas beban kerja (otomatis).
- Minimalkan akses Aplikasi GitHub: Saat Anda mengonfigurasi aplikasi GitHub ke Azure DevOps, berikan akses hanya ke repositori yang ingin Anda buat menggunakan alur.
- Membatasi koneksi layanan ke cabang tertentu: Gunakan pemeriksaan kontrol cabang untuk membatasi cabang mana yang dapat menggunakan koneksi layanan Anda. Memiliki pemeriksaan kontrol cabang memastikan bahwa koneksi layanan hanya berjalan pada cabang yang diotorisasi dan semua sumber daya alur yang ditautkan dibangun dari cabang yang diizinkan.
Menggunakan alur YAML alih-alih alur Klasik
Untuk keamanan tambahan dan untuk mengurangi risiko kesalahan konfigurasi yang tidak disengaja, gunakan alur YAML alih-alih alur Klasik. Tindakan pencegahan ini mencegah masalah keamanan yang timbul dari YAML dan alur klasik yang berbagi sumber daya yang sama, seperti koneksi layanan. Jika organisasi Anda menggunakan alur Klasik, migrasikan alur ke YAML.
- YAML menawarkan manfaat infrastruktur sebagai kode: Perlakukan alur YAML seperti kode lain karena langkah-langkah dan dependensi didefinisikan dalam kode. Ada juga visibilitas yang jelas ke dalam konfigurasi alur dan berkurangnya risiko kesalahan konfigurasi yang tidak disengaja.
- Alur YAML dapat dikombinasikan dengan langkah-langkah keamanan yang ditingkatkan: Melalui tinjauan kode dan permintaan pull, gunakan kebijakan cabang untuk menyiapkan proses peninjauan permintaan pull untuk mencegah penggabungan yang buruk.
-
Manajemen akses sumber daya: Pemilik sumber daya mengontrol apakah alur YAML dapat mengakses sumber daya tertentu. Fitur keamanan ini mencegah serangan seperti mencuri repositori lain. Gunakan Persetujuan dan pemeriksaan untuk menyediakan kontrol akses untuk tiap jalankan alur.
- Pemeriksaan cabang yang dilindungi: Jika Anda memiliki proses peninjauan kode manual untuk cabang tertentu, Anda dapat memperluas perlindungan ini ke alur. Pemeriksaan cabang yang dilindungi untuk sumber daya mencegah alur berjalan secara otomatis pada cabang yang tidak sah.
- Pemeriksaan persetujuan manual: Gunakan pemeriksaan persetujuan manual untuk memblokir permintaan alur agar tidak menggunakan sumber daya yang dilindungi hingga disetujui secara manual oleh pengguna atau grup tertentu.
- Pemeriksaan jam kerja: Gunakan pemeriksaan ini untuk memastikan bahwa penyebaran alur dimulai dalam periode hari dan waktu tertentu.
- Nonaktifkan pembuatan alur Klasik: Secara independen nonaktifkan pembuatan alur build klasik dan alur rilis klasik. Ketika keduanya dinonaktifkan, tidak ada alur build klasik, alur rilis klasik, grup tugas, atau grup penyebaran yang dapat dibuat melalui antarmuka pengguna atau REST API. Untuk informasi selengkapnya, lihat Menonaktifkan pembuatan alur Klasik.
Agen aman
Untuk mengamankan kontainer, tandai volume sebagai baca-saja, atur batas sumber daya, gunakan gambar tepercaya, pindai kerentanan, dan terapkan kebijakan keamanan.
- Gunakan agen yang di-host Microsoft alih-alih di-host sendiri: Agen yang di-host Microsoft menawarkan isolasi dan mesin virtual yang bersih untuk setiap kali menjalankan alur. Gunakan agen yang dihosting Microsoft alih-alih agen yang dihost sendiri. Untuk informasi selengkapnya, lihat Agen yang dihosting Microsoft.
- Agen terpisah untuk setiap proyek: Untuk mengurangi gerakan lateral dan mencegah kontaminasi silang antar proyek, pertahankan kumpulan agen terpisah, masing-masing didedikasikan untuk proyek tertentu.
- Gunakan akun dengan hak istimewa rendah untuk menjalankan agen: Untuk meningkatkan keamanan sistem, gunakan akun dengan hak istimewa terendah untuk menjalankan agen yang dihost sendiri. Misalnya, pertimbangkan untuk menggunakan akun komputer Anda atau identitas layanan terkelola. Jangan menjalankan agen di bawah identitas dengan akses langsung ke sumber daya Azure DevOps.
-
Mengisolasi artefak produksi dan kumpulan agen sensitif: Gunakan kumpulan agen yang berbeda untuk mencegah masalah keamanan.
- Gunakan kumpulan agen terpisah untuk artefak produksi: Mengisolasi artefak produksi dengan menggunakan kumpulan agen yang berbeda, mencegah penyebaran yang tidak disengaja dari cabang nonproduksi.
- Kumpulan sensitif segmen: Buat kumpulan terpisah untuk beban kerja sensitif dan tidak sensitif. Hanya izinkan kredensial dalam definisi build yang terkait dengan kumpulan yang sesuai.
- Mengonfigurasi firewall yang ketat untuk agen yang dihost sendiri: Siapkan firewall agar seketat mungkin sambil tetap memungkinkan agen berfungsi, menyeimbangkan keamanan dan kegunaan.
- Memperbarui kumpulan agen yang dihost sendiri secara teratur: Selalu perbarui agen yang dihost sendiri dengan pembaruan rutin untuk memastikan kode yang rentan tidak berjalan, mengurangi risiko eksploitasi.
Gunakan variabel dan parameter dengan aman
Gunakan variabel dan parameter dengan aman di alur Anda dengan mengikuti praktik terbaik untuk mengatur rahasia. Praktik terbaik termasuk membatasi penggunaan rahasia, menggunakan variabel waktu antrean, dan mengaktifkan validasi argumen tugas shell untuk melindungi alur Anda dari ancaman dan kerentanan.
- Membatasi akses ke rahasia: Hapus rahasia atau kunci apa pun agar tidak muncul di alur. Pindah ke metode autentikasi tanpa rahasia seperti federasi identitas beban kerja atau atur rahasia di UI, grup variabel, atau grup variabel yang bersumber dari Azure Key Vault.
- Aktifkan validasi parameter shell: Saat pengaturan Aktifkan validasi parameter argumen tugas shell diaktifkan, ada pemeriksaan tambahan untuk karakter seperti titik koma, tanda kutip, dan tanda kurung. Aktifkan validasi parameter argumen tugas shell di tingkat organisasi atau proyek di bawah Pengaturan>Alur>Pengaturan.
- Batasi variabel yang dapat diatur pada waktu antrean: Mencegah pengguna menentukan variabel baru pada waktu antrean dengan mengaktifkan pengaturan batasi variabel yang dapat diatur pada waktu antrean di Pengaturan Organisasi>Alur>Pengaturan.
-
Gunakan parameter alih-alih variabel: Tidak seperti variabel, alur yang sedang berjalan tidak dapat memodifikasi parameter alur. Parameter memiliki jenis data seperti
numberdanstring, dan dapat dibatasi untuk subset nilai tertentu. Pembatasan ini berharga ketika aspek alur yang dapat dikonfigurasi pengguna hanya boleh menerima nilai dari daftar yang telah ditentukan sebelumnya, memastikan bahwa alur tidak menerima data arbitrer. - Mereferensikan rahasia dari templat: Alih-alih menyertakan skrip sebaris dengan parameter rahasia langsung di YAML alur Anda, gunakan templat untuk mengabstraksi informasi sensitif yang jauh dari alur utama. Untuk menerapkan pendekatan ini, buat file YAML terpisah untuk skrip Anda lalu simpan skrip tersebut di repositori aman yang terpisah. Anda kemudian dapat mereferensikan templat dan meneruskan variabel rahasia di YAML Anda sebagai parameter. Variabel aman harus berasal dari Azure Key Vault, grup variabel, atau antarmuka pengguna alur. Untuk informasi selengkapnya, lihat Menggunakan templat.
-
Batasi rahasia dengan kebijakan cabang dan izin grup variabel: Anda dapat menggunakan kombinasi izin grup variabel, penyisipan pekerjaan kondisional, dan kebijakan cabang untuk memastikan bahwa rahasia terkait dengan
maincabang. Untuk informasi selengkapnya, lihat Melindungi rahasia. -
Gunakan setvariable untuk membatasi variabel yang diatur: Gunakan atribut
settableVariablesuntuk mengonfigurasi variabel apa saja yang boleh diatur oleh penulis alur dalam alur. Tanpa pengaturan ini, penulis alur dapat mendeklarasikan variabel baru tanpa batas dengan perintah pengelogansetvariable. Saat Anda menentukan daftarwith settableVariableskosong, semua pengaturan variabel tidak diizinkan. Untuk informasi selengkapnya, lihatsettableVariablesatribut di Skema YAML.
Metode terbaik untuk melindungi rahasia adalah tidak memiliki rahasia sejak awal. Hindari menggunakan rahasia jika memungkinkan, jangan pernah menyimpannya dalam file YAML, dan pastikan mereka tidak dicatat atau dicetak untuk menjaga keamanan.
- Hindari menggunakan rahasia jika memungkinkan: Periksa untuk melihat apakah alur Anda dapat menggunakan metode yang berbeda dari menggunakan rahasia untuk melakukan tugas seperti koneksi layanan dengan federasi identitas beban kerja atau identitas terkelola. Identitas terkelola memungkinkan aplikasi dan layanan Anda mengautentikasi dengan Azure tanpa memerlukan kredensial eksplisit. Untuk informasi selengkapnya, lihat Menggunakan perwakilan layanan & identitas terkelola. Jangan letakkan rahasia di YAML: Jangan pernah menyimpan nilai sensitif sebagai teks biasa dalam file .yml Azure Pipelines.
- Jangan mencatat atau mencetak rahasia: Hindari menggemakan rahasia ke konsol, menggunakannya dalam parameter baris perintah, atau mencatatnya ke file. Azure Pipelines mencoba membersihkan rahasia dari log semaksimal mungkin tetapi tidak dapat mengidentifikasi semua cara rahasia tersebut berpotensi bocor.
- Jangan gunakan data terstruktur seperti JSON sebagai rahasia: Buat rahasia individual untuk setiap nilai sensitif. Pendekatan ini memastikan akurasi redaksi yang lebih baik dan meminimalkan risiko mengekspos data sensitif secara tidak sengaja.
Mengaudit dan memutar rahasia
Untuk mengamankan alur kerja Anda, merivisi penanganan rahasia secara teratur dalam tugas dan log, tinjau dan hapus proses rahasia yang tidak perlu, dan ganti rahasia secara berkala untuk meminimalkan risiko keamanan.
- Mengaudit penanganan rahasia dalam tugas dan log: Memeriksa tugas untuk memastikan rahasia tidak dikirim ke host atau dicetak ke log. Verifikasi bahwa tidak ada rahasia dalam file log apa pun, termasuk log kesalahan.
- Tinjau rahasia terdaftar: Pastikan bahwa rahasia dalam alur kerja Anda masih diperlukan, dan hapus yang tidak lagi diperlukan untuk mengurangi tumpukan dan potensi risiko keamanan.
- Mengganti rahasia: Gantilah rahasia secara teratur untuk meminimalkan periode waktu di mana rahasia yang disusupi dapat dieksploitasi.
Mencegah eksekusi kode berbahaya
Untuk memastikan bahwa hanya kode yang diuji dan dibersihkan yang berjalan melalui alur Anda, tinjau alur Anda secara teratur untuk masalah umum.
- Pemindaian kode: Melarikan karakter khusus dalam argumen untuk menghindari injeksi perintah shell. Anda dapat menggunakan GitHub Advanced Security untuk Azure DevOps untuk mengotomatiskan pemindaian kode.
- Memvalidasi input dan menggunakan parameter: Memvalidasi parameter input dan argumen untuk mencegah perilaku yang tidak diinginkan. Gunakan kueri berparameter dalam skrip untuk mencegah injeksi SQL. Parameter runtime membantu menghindari masalah keamanan yang terkait dengan variabel, seperti Injeksi Argumen.
-
Jangan gunakan PATH dalam skrip: Mengandalkan pengaturan agen
PATHberbahaya karena dapat diubah oleh skrip atau alat sebelumnya. Selalu gunakan jalur yang sepenuhnya memenuhi syarat sebagai gantinya. - Mengontrol tugas yang tersedia: Nonaktifkan kemampuan untuk menginstal dan menjalankan tugas dari Marketplace, yang memberi Anda kontrol yang lebih besar atas kode yang dijalankan dalam alur.
Kontainer yang aman
Pelajari cara mengamankan kontainer melalui perubahan konfigurasi, pemindaian, dan kebijakan.
-
Tandai volume sebagai hanya baca: Kontainer menyertakan mount volume yang disediakan oleh sistem untuk tugas, alat, dan komponen eksternal yang diperlukan agar dapat bekerja dengan agen host. Atur
externals,tasks, dantoolsuntuk membaca hanya untuk keamanan tambahan. - Atur batas sumber daya khusus kontainer: Tetapkan batas pada CPU dan memori untuk mencegah kontainer mengonsumsi sumber daya yang berlebihan, yang dapat menyebabkan penolakan kerentanan layanan atau keamanan.
-
Gunakan gambar tepercaya: Gunakan gambar resmi dan terverifikasi dari sumber terkemuka seperti Azure Container Registry atau Docker Hub. Selalu tentukan versi atau tag tertentu untuk mempertahankan konsistensi dan keandalan, daripada mengandalkan tag
latest. Perbarui gambar dasar secara teratur untuk menyertakan patch keamanan terbaru dan perbaikan bug. - Memindai kontainer untuk kerentanan dan melindungi dari ancaman runtime: Gunakan alat seperti Microsoft Defender for Cloud untuk memantau dan mendeteksi risiko keamanan. Selain itu, Azure Container Registry menawarkan pemindaian kerentanan terintegrasi untuk membantu memastikan gambar kontainer aman sebelum penyebaran. Anda juga dapat mengintegrasikan alat pemindaian pihak ketiga melalui ekstensi Azure DevOps untuk pemeriksaan keamanan tambahan.
- Terapkan kebijakan keamanan untuk mencegah eskalasi hak istimewa dan memastikan kontainer berjalan dengan jumlah hak istimewa paling sedikit yang diperlukan: Misalnya, Azure Kubernetes Service (AKS), kontrol akses berbasis peran, dan Penerimaan Keamanan Pod memungkinkan Anda menerapkan kebijakan yang membatasi hak istimewa kontainer, memastikan eksekusi non-root, dan membatasi akses ke sumber daya penting.
- Memanfaatkan Kebijakan Jaringan: Kebijakan Jaringan dapat digunakan untuk membatasi komunikasi antar kontainer, memastikan bahwa hanya kontainer yang berwenang yang dapat mengakses sumber daya sensitif dalam jaringan Anda. Selain itu, Azure Policy untuk AKS dapat diterapkan untuk memberlakukan praktik terbaik keamanan kontainer, seperti memastikan hanya gambar kontainer tepercaya yang disebarkan.
Menggunakan templat untuk menerapkan praktik terbaik
Mulailah dengan templat minimal dan terapkan ekstensi secara bertahap. Pendekatan ini memastikan bahwa saat Anda menerapkan praktik keamanan, Anda memiliki titik awal terpusat yang mencakup semua alur.
- Gunakan templat perluas: Memperluas templat menentukan struktur luar dan menawarkan titik tertentu untuk kustomisasi yang ditargetkan. Menggunakan templat extends dapat mencegah kode berbahaya menyusup ke alur.
- Membatasi akses dengan langkah-langkah: Membatasi akses jaringan dengan memiliki langkah-langkah seperti mengunduh paket yang dijalankan pada kontainer daripada pada host. Saat langkah-langkah berjalan dalam kontainer, Anda mencegah aktor jahat memodifikasi konfigurasi agen atau meninggalkan kode berbahaya untuk eksekusi nanti.
Artikel Terkait
- Siklus Hidup Pengembangan Keamanan Microsoft
- Pusat Kepercayaan Azure