Terraform mendukung penambahan file tambahan dengan variabel selama doa.
dokumentasi: https://www.terraform.io/intro/getting-started/variables.html#from-a-file
Kami menggunakan fitur itu untuk menyediakan secrets.tfvars
file pada setiap pemanggilan Terraform. Kami juga menggunakan skrip untuk membungkus perintah sehingga permintaannya konsisten, dan semua anggota tim menghindari keharusan membuat kesalahan yang sama. Pembungkus disinkronkan .tfstate
dengan S3 sebelum eksekusi, dan mendorong .tfstate
kembali ke S3 di akhir. Saya juga mendengar ada orang yang melakukan hal yang sama dengan keadaan tersimpan di Konsul, bahkan menambahkan semacam semafor di konsul untuk mencegah dua orang memulai Terraform pada saat yang sama.
Ketika Anda menghindari pengaturan nilai default dalam variables.tf
file, itu memaksa pengguna untuk memasukkan nilai. Itu bisa dimasukkan secara manual atau menggunakan -var-file
opsi perintah seperti dijelaskan di atas. Tidak menetapkan default pada rahasia Anda adalah cara yang baik untuk memberlakukan perubahan yang membutuhkan perubahan rahasia.
The secrets.tfvars
file symbolic link ke salah satu file dengan rahasia yang tidak disimpan dalam kontrol versi. Kami memiliki beberapa, satu per lingkungan, seperti begitu secrets-prod.tfvars
, secrets-dev.tfvars
, secrets-stg.tfvars
, dll ...
Praktik yang lebih baik lagi adalah membuat file rahasia ini selama skrip wrapper berdasarkan data di Vault atau cara lain untuk membagikan rahasia. Karena saat ini ketika format rahasia berubah, atau rahasia itu sendiri, kita perlu mengkomunikasikannya kepada tim di luar saluran kontrol versi - dan ini tidak selalu bekerja dengan baik, jujur saja. Tapi rahasia memang jarang berubah.
Kami menghindari terraform menangani rahasia kami. Sekalipun Anda berhasil menyuntikkan rahasia dengan file var "secrtes.tfvars" seperti yang ditunjukkan di atas, rahasia-rahasia ini akan disimpan dalam keadaan terraform (jarak jauh) Anda.
Anda dapat melindungi file keadaan jauh dengan menggunakan misalnya otorisasi S3, atau Anda dapat gitignore file negara bagian tetapi kami memutuskan untuk tidak bergantung pada jenis perlindungan ini.
sumber
Jika Anda menggunakan AWS, lihat "Cara yang Tepat untuk Mengelola Rahasia" oleh Segment.io di Blog AWS. Kami menganjurkan penggunaan
chamber
untuk semua pelanggan kami untuk mengelola rahasia. Ia bekerja dengan memanfaatkan Toko Parameter Manajer Sistem (SSM) AWS bersama dengan kunci KMS. Ini memastikan rahasia dienkripsi saat istirahat (dan dalam perjalanan), dijamin dengan IAM, dapat diaudit dengan CloudTrails, dan hanya diekspos sebagai variabel lingkungan pada saat dijalankan.Setelah mengkonfigurasi ruang dan mengatur kunci KMS, kami menulis rahasia ke toko parameter.
Kemudian gunakan rahasia itu ketika Anda menelepon terraform.
Ini mengasumsikan Anda telah mendefinisikan variabel yang dipanggil
DB_USER
danDB_PASS
dalam kode HCL Anda.Misalnya, Anda dapat menambahkan ini ke
variables.tf
CATATAN:
chamber
akan selalu mengekspor variabel lingkungan dalam huruf besarKami menyediakan modul terraform yang dipanggil
terraform-aws-kms-key
untuk memudahkan penyediaan kunci KMS. Lihat dokumentasi terperinci kami dengan contoh-contoh cara menggunakanchamber
dengan banyak ruang nama serta cara menggunakan ruang dengan terraform untuk mengelola rahasia. Lihat contoh referensi lengkap kami untuk dependensi ruang penyediaan.Adapun
.tfstate
, Anda memunculkan poin yang sangat bagus tentang keberadaan rahasia teks biasa di file negara. Benar-benar tidak ada jalan lain untuk ini. Agar terraform menghitung perubahan untuk membangun rencana, ia perlu mengetahui status "sebelum" dan "setelah". Untuk alasan ini, kami sarankan menggunakan ember S3 terenkripsi dengan versi wajib. Gunakanterraform-aws-tfstate-backend
modul untuk menyediakan ember dan tabel penguncian DynamoDB sesuai dengan praktik terbaik.sumber
Untuk mengimpor rahasia ke file .tf, Anda juga dapat menggunakan sumber data eksternal . Ini bisa berupa skrip yang mendekripsi rahasia Anda.
sumber
Saya melihat beberapa cara yang berbeda tetapi saya sangat suka git-crypt untuk melakukan hal adhoc sebelum mengimplementasikan sesuatu yang lebih besar seperti Vault.
sumber