Tidak peduli berapa banyak waktu dan usaha yang kita keluarkan untuk keamanan aplikasi, selalu saja lebih sedikit. Namun alur kerja sederhana untuk hal-hal seperti manajemen rahasia, rotasi kunci, dan masa berlaku kata sandi sangat membantu dalam membuat aplikasi dan infrastruktur kita tangguh terhadap vektor serangan yang jelas terlihat.

Jika Anda pernah menggunakan AWS Elastic Container Service (ECS) / Fargate, Anda pasti menemukan masalah meneruskan rahasia ke container yang sedang berjalan. Posting ini menjelaskan 3 metode untuk meneruskan rahasia sebagai variabel lingkungan ke aplikasi yang berjalan sebagai Tugas AWS ECS.

Metode 1 — Meneruskan rahasia sebagai variabel lingkungan dalam Definisi Tugas ECS

  • Baik: Dibutuhkan infrastruktur minimal
  • Buruk: Definisi Tugas ECS terkait erat dengan rahasia. Penerapan baru diperlukan jika Anda mengubah nilai rahasia
  • Buruk: Rahasia dapat dilihat oleh siapa pun yang memiliki akses ke Definisi Tugas ECS

Metode 2 — Ambil rahasia terbaru menggunakan skrip titik masuk

Dengan menggunakan skrip titik masuk buruh pelabuhan, Anda dapat mengambil rahasia dari mana pun Anda inginkan sebelum aplikasi melakukan booting.

  • Baik: Rahasia hanya terlihat oleh aplikasi pada saat runtime dan tidak sebelum itu. Artinya, mereka bukan bagian dari Definisi Tugas ECS
  • Buruk: Logika untuk mengambil rahasia tertanam berulang kali di aplikasi berbeda. Jadi, meskipun rahasianya (mudah-mudahan) dipertahankan dalam konfigurasi infrastruktur Anda, setiap aplikasi perlu mengetahui bagaimana dan di mana mengambilnya. Hal ini melanggar prinsip “KERING” dan “Tanggung Jawab Tunggal”.

Banyak repositori di Github menggunakan pendekatan ini. Contoh pengambilan rahasia dengan cara ini dari AWS S3 juga dijelaskan di sini.

Metode 3 — Gunakan atribut 'valueFrom' untuk ketentuan tugas ECS

Metode ini memberikan beban dalam mengambil rahasia untuk Anda di AWS dan kontainer aplikasi dapat mengharapkan variabel lingkungan ada sebelum aplikasi dijalankan

  • Bagus: Aplikasi tidak peduli bagaimana cara mengambil rahasia — aplikasi mengharapkan rahasia tersebut tersedia sebagai variabel lingkungan selama run-time.
  • Bagus: Mendukung AWS SSM Parameter Store dan AWS Systems Manager (saat ini)

Rekomendasi Saya

Metode yang saya rekomendasikan adalah menggunakan atribut 'valueFrom' untuk memasukkan parameter AWS SSM terenkripsi KMS langsung ke tugas yang sedang berjalan. Dengan cara ini rahasianya tidak terlihat oleh seseorang yang masuk ke Konsol AWS atau disimpan dalam teks biasa di mana pun.

Menstandardisasi jalur yang Anda gunakan untuk parameter yang Anda tambahkan ke Penyimpanan Parameter AWS SSM adalah ide bagus karena akan membantu Anda membatasi cakupan akses ke rahasia ini. Cara Anda merancang infrastruktur pasti akan menentukan format jalur apa yang mungkin dapat Anda gunakan. Tidak masalah format apa yang Anda putuskan — yang penting adalah menstandardisasi 'beberapa format' daripada mengizinkan setiap layanan menentukan format jalurnya sendiri. Jadi, secara keseluruhan, berikut 3 langkah yang saya rekomendasikan:

Langkah 1: Tentukan format jalur Penyimpanan Parameter AWS SSM Anda. Contohnya adalah:

  • /{lingkungan}/{layanan}/DATABASE_PASSWORD
  • /{layanan}/{lingkungan}.DATABASE_PASSWORD

Langkah 2: Tambahkan pasangan nilai kunci Anda ke Penyimpanan Parameter AWS SSM dan gunakan kunci KMS untuk mengenkripsinya

Langkah 3: Gunakan atribut 'secrets/valueFrom' untuk memasukkan parameter AWS SSM langsung ke tugas yang sedang berjalan

Dan inilah konfigurasi Terraform untuk melakukan ini. File-file ini hanya berisi klausa yang diperlukan untuk rahasia — Anda masih perlu mengisi detail lainnya untuk benar-benar membuat tugas ECS.

Berkas templat:

Catatan: jika Anda menggunakan 'rahasia/valueFrom' dalam ketentuan tugas ECS, Anda juga perlu memberinya 'serviceRoleArn' yang memiliki izin untuk membaca parameter SSM yang diperlukan untuk cakupan tersebut.

Bacaan Tambahan

Ikuti kami di Twitter🐦dan Facebook👥dan bergabunglah dengan Grup Facebook kami💬.

Untuk bergabung dengan komunitas kami Slack🗣️ dan membaca topik Faun mingguan kami🗞️,klik di sini⬇

Jika postingan ini bermanfaat, silakan klik tombol tepuk 👏 di bawah beberapa kali untuk menunjukkan dukungan Anda kepada penulis! ⬇