Bagikan melalui


Melindungi rahasia di Azure Pipelines

Layanan Azure DevOps | Azure DevOps Server 2022 | Azure DevOps Server 2020

Artikel ini menyediakan praktik terbaik tentang melindungi rahasia di Azure Pipelines. Rahasia adalah segala hal yang aksesnya ingin Anda kontrol dengan ketat, seperti kunci API, kata sandi, sertifikat, atau kunci kriptografi.

Azure Pipelines tidak menghasilkan nilai rahasia. Namun, Anda mungkin perlu menambahkan rahasia ke alur untuk menyimpan data sensitif seperti kunci API. Untuk mempelajari selengkapnya tentang mengatur variabel rahasia, lihat Mengatur variabel rahasia.

Jangan gunakan rahasia jika metode lain tersedia

Metode terbaik untuk melindungi rahasia bukan untuk memiliki rahasia di tempat pertama. Periksa untuk melihat apakah alur Anda dapat menggunakan metode yang berbeda dari menggunakan rahasia untuk melakukan tugas.

  • Gunakan koneksi layanan:
    • Saat Anda menargetkan Azure atau layanan lain, gunakan koneksi layanan alih-alih mengelola rahasia dalam variabel.
    • Koneksi layanan memungkinkan Anda terhubung dengan aman ke layanan eksternal tanpa mengekspos informasi sensitif langsung dalam konfigurasi alur Anda.
    • Untuk informasi selengkapnya, lihat Mengelola koneksi layanan dan Menyambungkan ke Microsoft Azure dengan koneksi layanan Azure Resource Manager.
  • Gunakan identitas terkelola:

    • Pertimbangkan untuk menggunakan identitas terkelola alih-alih menangani rahasia secara langsung.
    • Identitas terkelola memungkinkan aplikasi dan layanan Anda mengautentikasi keamanan dengan layanan Azure tanpa memerlukan kredensial eksplisit.
    • Anda dapat menggunakan identitas terkelola untuk mengakses layanan Azure lainnya.
  • Tugas Azure CLI:

    • Jika Anda menggunakan tugas Azure CLI, di alur Anda, pertimbangkan untuk menggunakan addSpnToEnvironment pengaturan untuk mengakses detail perwakilan layanan dalam skrip tanpa meneruskan rahasia secara eksplisit.

Untuk informasi selengkapnya, lihat Menggunakan perwakilan layanan & identitas terkelola

Menggunakan variabel rahasia

Jangan pernah menyimpan nilai sensitif sebagai teks biasa dalam file .yml Azure Pipelines.

Variabel rahasia dapat digunakan untuk informasi privat seperti kata sandi, ID, dan data identifikasi lainnya yang tidak ingin Anda ekspos dalam alur. Kami menyarankan agar Anda mengatur variabel rahasia dengan Azure Key Vault. Anda juga dapat mengatur variabel rahasia di UI atau dalam grup variabel. Kami tidak merekomendasikan penggunaan perintah pengelogan untuk mengatur variabel rahasia. Saat Anda mengatur rahasia dengan perintah pengelogan, siapa pun yang dapat mengakses alur Anda juga dapat melihat rahasianya.

Variabel rahasia dienkripsi dan dapat digunakan dalam alur tanpa mengekspos nilainya. Meskipun nilainya tidak diekspos, jangan pernah menggaungkan rahasia sebagai output dan tidak meneruskan rahasia pada baris perintah. Sebagai gantinya, kami sarankan Anda memetakan rahasia Anda ke dalam variabel lingkungan.

Saat Anda membuat rahasia, ikuti panduan penamaan variabel dan pastikan bahwa nama rahasia Anda tidak mengungkapkan informasi sensitif.

Membatasi akses ke variabel rahasia

Untuk membatasi akses ke rahasia di Azure DevOps, ikuti praktik terbaik berikut:

  • Simpan rahasia Anda di Azure Key Vault. Dengan Azure Key Vault, Anda kemudian dapat menggunakan model kontrol akses berbasis peran Azure untuk membatasi akses ke rahasia atau grup rahasia.
  • Atur variabel rahasia di UI untuk alur. Variabel rahasia yang diatur dalam antarmuka pengguna pengaturan alur untuk alur dicakup ke alur tempat variabel diatur. Jadi, Anda dapat memiliki rahasia yang hanya terlihat oleh pengguna dengan akses ke alur tersebut.
  • Atur rahasia dalam grup variabel. Grup variabel mengikuti model keamanan pustaka. Anda bisa mengontrol siapa yang bisa menentukan item baru di pustaka, dan siapa yang bisa menggunakan item yang sudah ada.

Jangan menulis rahasia ke log

Azure Pipelines mencoba menggosok rahasia dari log sedapat mungkin, tetapi tidak mudah. Hindari menggemakan rahasia ke konsol, menggunakannya dalam parameter baris perintah, atau mencatatnya ke file. Berhati-hatilah saat Anda menggunakan perintah Azure CLI yang menghasilkan informasi sensitif. None output formatGunakan , dan jika Anda perlu mengambil rahasia dari panggilan Azure CLI, Use none output format and retrieve security information to a secret variable.

Jangan gunakan data terstruktur sebagai rahasia

Hindari menggunakan format data terstruktur seperti JSON, XML, atau YAML, untuk merangkum nilai rahasia, termasuk karakter kontrol seperti pengembalian pengangkutan, \r, dan umpan baris,\n. Sebagai gantinya, 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 bagaimana rahasia ditangani

Untuk mengaudit bagaimana rahasia digunakan di Azure Pipelines, ikuti praktik terbaik berikut:

  • Tinjau kode sumber: Periksa kode sumber repositori yang menghosting alur. Untuk memastikan rahasia ditangani dengan benar, periksa tugas apa pun yang digunakan dalam alur. Misalnya, verifikasi bahwa rahasia tidak secara tidak sengaja dikirim ke host yang tidak diinginkan atau dicetak secara eksplisit ke output log.
  • Periksa log eksekusi: Setelah menguji input yang valid dan tidak valid, lihat log eksekusi untuk alur Anda. Pastikan bahwa rahasia diredaksi dengan benar dan tidak terekspos. Terkadang, kesalahan dalam perintah atau alat mungkin secara tidak sengaja membocorkan rahasia ke dalam log kesalahan. Meskipun Azure Pipelines mencoba menggosok rahasia dari log, tinjauan manual masih penting.

Mengaudit dan memutar rahasia

Untuk mengaudit dan memutar rahasia, ikuti praktik terbaik berikut:

  • Tinjau rahasia terdaftar: Menilai rahasia yang terdaftar di alur Anda secara berkala. Konfirmasikan bahwa mereka masih diperlukan, dan hapus yang tidak lagi diperlukan, yang membantu mengurangi kekacauan dan potensi risiko keamanan.
  • Memutar rahasia: Putar rahasia secara teratur untuk meminimalkan jendela waktu di mana rahasia yang disusupi dapat dieksploitasi. Dengan mengubah rahasia secara berkala, Anda meningkatkan keamanan.
  • Pilih metode autentikasi yang tepat
    • Jenis rahasia yang digunakan:
      • Token akses pribadi (PATs): Token ini digunakan untuk autentikasi. Ikuti praktik terbaik keamanan saat memilih metode autentikasi yang tepat. Anda dapat mengelola PAT menggunakan REST API.
      • Variabel rahasia: Gunakan variabel rahasia untuk menyimpan informasi sensitif dengan aman seperti kunci API, kata sandi, atau info masuk lainnya dalam alur Anda.
      • Rahasia Azure Key Vault: Gunakan Azure Key Vault untuk menyimpan dan mengelola rahasia dengan aman.
      • Koneksi layanan: Koneksi layanan ini memungkinkan alur Anda terhubung ke layanan eksternal (misalnya, Azure, GitHub, Docker Hub). Pastikan konfigurasi yang tepat dan penanganan rahasia koneksi layanan yang aman.

Menggunakan templat YAML

Alih-alih menyertakan skrip sebaris dengan parameter rahasia langsung di YAML alur Anda, gunakan templat. Pendekatan ini meningkatkan keamanan dengan mengabstraksi informasi sensitif 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 tentang menggunakan templat, lihat Referensi penggunaan templat.

Membatasi rahasia dengan kebijakan cabang dan izin grup variabel

Untuk memastikan bahwa rahasia terikat ke main cabang dan tidak dapat diakses oleh cabang acak, Anda dapat menggunakan kombinasi izin grup variabel, penyisipan pekerjaan kondisional, dan kebijakan cabang.

Dengan kebijakan cabang, Anda dapat menerapkan kebijakan validasi build yang hanya mengizinkan build dari cabang utama. Kemudian, Anda dapat menggunakan izin grup variabel untuk memastikan bahwa hanya alur resmi yang memiliki akses rahasia yang disimpan dalam grup variabel Anda. Terakhir, Anda dapat menggunakan kondisi dalam alur Anda untuk memastikan bahwa grup variabel hanya dapat dirujuk oleh pendorongan ke main cabang.

jobs:
- job: ExampleJob
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - script: echo "This runs only for the main branch"
    displayName: 'Conditional Step'
  variables:
  - group: your-variable-group-name

Langkah berikutnya