GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Mengamankan Data Sensitif Dengan Rahasia Penulisan Docker

Manajemen rahasia yang aman merupakan aspek penting dari keamanan kontainer. Jika Anda memasukkan kata sandi dan kunci API sebagai variabel lingkungan, Anda berisiko terpapar informasi yang tidak disengaja. Variabel shell sering dicatat, diturunkan ke proses anak, atau bocor ke layanan pelaporan kesalahan tanpa sepengetahuan Anda.

Menyuntikkan nilai sebagai rahasia khusus mengurangi risiko ini. Docker memiliki dukungan bawaan untuk manajemen rahasia yang aman yang dapat Anda kaitkan dengan Docker Compose. Akses ke rahasia diberikan per layanan.

Bagaimana Rahasia Bekerja?

Docker CLI memiliki sekumpulan perintah manajemen rahasia tetapi ini hanya berfungsi dengan klaster Swarm. Anda tidak dapat menambahkan rahasia ke container mandiri menggunakan CLI Docker saja.

Docker Compose menambahkan rahasia "palsu" untuk menghadirkan kemampuan ini ke beban kerja tanpa cluster. Fungsi implementasi Compose mirip dengan fitur Docker Swarm dan berfungsi dengan file Compose apa pun.

Rahasia dibuat sebagai file teks biasa yang diikat ke dalam wadah Anda. Aplikasi Anda mengakses nilai rahasia dengan membaca konten file. Model ini memungkinkan nilai tetap diam hingga digunakan secara eksplisit dalam penampung Anda, tidak seperti variabel lingkungan yang terlihat secara permanen.

Mendefinisikan Rahasia di File Tulis

Memasukkan rahasia ke dalam wadah adalah proses dua langkah. Pertama, Anda perlu mendefinisikan rahasianya, menggunakan secrets tingkat atas bidang di file Tulis Anda. Kemudian Anda memperbarui definisi layanan Anda untuk merujuk rahasia yang mereka butuhkan.

Berikut adalah contoh yang menggunakan rahasia untuk memberikan sandi ke layanan dengan aman:

version: "3"
services:
  app:
    image: example-app:latest
    secrets:
      - db_password
secrets:
    db_password:
      file: ./db_password.txt

Nilai rahasia akan dibaca dari db_password.txt direktori kerja Anda file ketika Anda menjalankan docker-compose up . Compose akan memasang file ke /run/secrets/db_password di dalam wadah. Aplikasi Anda dapat mengakses kata sandi basis data dengan membaca konten file rahasia.

Menggunakan Rahasia Docker yang Ada

Di luar rahasia berbasis file, Compose juga memungkinkan Anda mereferensikan rahasia Docker Swarm yang ada. Jika Anda menggunakan mekanisme ini, Anda harus membuat rahasia di Docker sebelum anda menjalankan docker-compose up . docker secrets ruang perintah hanya akan berfungsi bila titik akhir Docker aktif Anda adalah simpul pengelola Swarm.

Buat rahasia menggunakan CLI Docker:

# take value from standard input
echo P@55w0rd | docker secret create db_password -
 
OR 
 
# take value from a file
docker secret create db_password ./db_password.txt

Sekarang perbarui file Docker Compose Anda untuk mereferensikan rahasia:

version: "3"
services:
  app:
    image: example-app:latest
    secrets:
      - db_password
secrets:
    db_password:
      external: true

Mengatur external rahasia field menginstruksikan Compose untuk mengambil nilainya dari rahasia Docker yang ada. Tumpukan akan gagal dengan kesalahan jika Anda mencoba memulainya sebelum rahasia itu ada.

Sintaks Rahasia Diperpanjang

Compose mendukung sintaks rahasia yang lebih panjang jika Anda memerlukan kontrol yang lebih terperinci atas proses injeksi. Beralih ke sintaks ini memungkinkan Anda menyesuaikan izin file dan mengubah nama rahasia yang dipasang.

Lima bidang opsional tersedia:

  • source – Nama rahasia untuk referensi – ini harus merupakan salah satu nilai yang ditentukan dalam secrets file Compose Anda bagian.
  • target – Nama file yang akan digunakan saat rahasia dipasang ke dalam wadah.
  • uid – UID untuk diatur pada file rahasia yang dipasang. Default ke 0.
  • gid – GID untuk diatur pada file rahasia yang di-mount. Default ke 0.
  • mode – Izin sistem file untuk diterapkan ke file rahasia yang dipasang, dinyatakan dalam notasi oktal. Ini default ke 0444. Hati-hati bahwa file rahasia tidak pernah dapat ditulis karena selalu dipasang ke sistem file sementara penampung.

Berikut adalah contoh modifikasi yang mengganti nama file rahasia yang dipasang dan mengubah izinnya:

version: "3"
services:
  app:
    image: example-app:latest
    secrets:
      - source: db_password
        target: database_password_secret
        mode: 0440
secrets:
    db_password:
      external: true

Sintaks sederhana biasanya cukup untuk sebagian besar penerapan. Jika Anda memiliki persyaratan yang lebih spesifik, versi yang diperluas akan memberi Anda kontrol yang Anda butuhkan. Referensi rahasia individu dapat mencampur dan mencocokkan dua sintaks dalam file Compose yang sama.

Rahasia dan Penulisan Gambar

Banyak gambar Docker komunitas populer sekarang mendukung rahasia alih-alih variabel lingkungan. Sebagai pembuat gambar, menawarkan rahasia adalah pendekatan praktik terbaik untuk melindungi data pengguna Anda.

Anda dapat mendukung kedua mekanisme dengan mengizinkan variabel lingkungan disetel ke jalur file. Jika gambar Anda memerlukan koneksi database, biarkan pengguna menyetel DB_PASSWORD variabel lingkungan ke P@55w0rd atau /run/secrets/db_password . Wadah Anda harus memeriksa apakah nilai variabel mereferensikan file yang valid; jika ya, buang dan baca nilai akhir dari file.

Model ini memberi pengguna fleksibilitas untuk memilih mekanisme yang paling tepat untuk penerapannya. Ingatlah bahwa tidak semua pengguna akan dapat mengadopsi rahasia – jika Swarm dan Compose keduanya tidak tersedia, mereka tidak akan memiliki cara untuk memberikan nilainya.

Kesimpulan

Menggunakan rahasia daripada variabel lingkungan biasa mengurangi risiko pengungkapan informasi yang tidak disengaja. Bayangkan skenario terburuk di mana sebuah wadah mengirim variabel lingkungannya ke layanan logging pihak ketiga yang disusupi. Penyerang sekarang memiliki kata sandi basis data dan kunci API Anda.

Dengan membatasi data rahasia ke akses sistem file, nilai tidak dapat dibaca secara tidak sengaja karena nilai tersebut bukan fitur abadi dari lingkungan Anda. Ingatlah bahwa file rahasia membawa risikonya sendiri. Anda mungkin tergoda untuk memasukkannya ke dalam kontrol sumber, yang berarti siapa pun yang memiliki akses ke repositori Anda dapat membaca nilainya.

Rahasia harus "rahasia" sepanjang siklus hidup container Anda. Untuk penerapan produksi, biasanya yang terbaik adalah mengotomatiskan build dengan sistem CI. Tetapkan rahasia Anda di pengaturan saluran penyedia CI Anda, lalu gunakan skrip build Anda untuk menuliskannya ke file yang dapat diakses oleh Compose. Ini memastikan hanya Anda yang memiliki akses ke nilai aktual, melalui antarmuka alat CI Anda.


Docker
  1. Cara Menyebarkan Layanan Mikro dengan Docker

  2. Cara Menggunakan Tulis Docker

  3. Cara Menyebarkan Aplikasi dengan Rancher

  1. Cara Menggunakan Ansible Vault untuk Mengamankan Data Sensitif

  2. Cara Menginstal Jenkins dengan Docker

  3. Cara Menyederhanakan File Penulisan Docker Dengan Jangkar dan Ekstensi YAML

  1. Cara Menyimpan Data Kontainer Docker Dalam Volume Docker

  2. Memulai Dengan Docker Compose Di Linux

  3. Cara Setup MySQL Dengan Docker Di Linux