Panduan lengkap untuk mengelola APP_KEY, mengaktifkan HTTPS, melakukan rotasi kunci enkripsi, strategi backup data terenkripsi, dan mengamankan file konfigurasi environment.
APP_KEY adalah kunci utama enkripsi yang digunakan oleh seluruh sistem. Kunci ini tersimpan di file .env dan merupakan komponen paling kritis dalam arsitektur keamanan OnePlatform.
APP_KEY berformat base64:<kunci-base64> yang merepresentasikan kunci 256-bit (32 byte) yang di-encode dalam Base64. Contoh:
Untuk instalasi baru, gunakan perintah Artisan berikut untuk men-generate kunci yang aman secara kriptografis:
APP_KEY hilang atau diganti tanpa prosedur rotasi yang benar, seluruh data terenkripsi tidak akan dapat didekripsi dan data tersebut akan hilang secara permanen. Tidak ada cara untuk memulihkan data terenkripsi tanpa kunci asli.
Catat APP_KEY di password manager atau secret vault perusahaan (contoh: HashiCorp Vault, AWS Secrets Manager). Jangan simpan di catatan biasa, email, atau chat.
Gunakan APP_KEY yang berbeda untuk setiap environment (development, staging, production). Jangan pernah menggunakan kunci produksi di environment lain.
File .env sudah ada di .gitignore secara default. Pastikan APP_KEY tidak pernah masuk ke version control (Git). Gunakan .env.example tanpa nilai kunci yang sesungguhnya.
Hanya berikan akses ke file .env kepada personel yang benar-benar membutuhkan. Atur permission file: chmod 600 .env di server produksi.
Pengaturan FORCE_HTTPS memaksa seluruh koneksi melalui HTTPS untuk melindungi data-in-transit dari penyadapan.
| Variabel | Nilai | Deskripsi | Environment |
|---|---|---|---|
FORCE_HTTPS |
true | Semua request HTTP dialihkan ke HTTPS. URL yang di-generate menggunakan skema https:// |
Production Staging |
FORCE_HTTPS |
false | HTTP diperbolehkan. Berguna untuk development lokal tanpa sertifikat SSL | Development |
# Untuk produksi, selalu aktifkan HTTPS FORCE_HTTPS=true # Pastikan APP_URL juga menggunakan https APP_URL=https://app.perusahaan.com # Session cookie harus secure SESSION_SECURE_COOKIE=true
FORCE_HTTPS=true, pastikan: (1) Sertifikat SSL/TLS sudah terpasang di web server (Nginx/Apache). (2) Web server sudah dikonfigurasi untuk melayani HTTPS di port 443. (3) APP_URL sudah menggunakan skema https://.
Rotasi kunci enkripsi mungkin diperlukan jika terjadi potensi kebocoran APP_KEY, pergantian personel kritis, atau sebagai bagian dari kebijakan keamanan berkala. Prosedur ini harus dilakukan dengan sangat hati-hati.
Nonaktifkan akses pengguna untuk mencegah penulisan data baru selama proses rotasi. Jalankan php artisan down pada server produksi.
Buat backup lengkap database dan catat APP_KEY lama di tempat aman. Backup ini adalah jaring pengaman jika proses rotasi gagal. Pastikan backup dapat diakses dengan cepat.
Buat script migrasi yang membaca dan mendekripsi semua field terenkripsi menggunakan APP_KEY lama, lalu simpan sementara dalam format plaintext. Pastikan semua 22 field dari 8 model terproses.
Jalankan php artisan key:generate untuk membuat kunci baru. Kunci baru akan otomatis dituliskan ke file .env.
Jalankan script migrasi yang mengenkripsi ulang semua data plaintext menggunakan APP_KEY baru. Verifikasi setiap record berhasil dienkripsi ulang.
Uji dekripsi beberapa record sample untuk memastikan data dapat dibaca dengan benar. Jika berhasil, jalankan php artisan up untuk mengaktifkan kembali aplikasi.
Catat APP_KEY baru di secret vault. Hapus semua data plaintext sementara yang dibuat selama proses rotasi. Hapus juga cache konfigurasi lama dengan php artisan config:clear.
// Langkah 1: Maintenance mode php artisan down // Langkah 2: Backup database mysqldump -u user -p database > backup_$(date +%Y%m%d).sql // Langkah 3-5: Jalankan command rotasi kunci php artisan encryption:rotate-key // Langkah 6: Verifikasi dan aktifkan kembali php artisan config:clear php artisan up
Backup data terenkripsi memerlukan perhatian khusus karena data di database sudah dalam bentuk ciphertext. Tanpa APP_KEY, backup database tidak akan berguna untuk data yang dienkripsi.
Selalu backup database bersamaan dengan APP_KEY yang digunakan saat backup dibuat. Simpan keduanya di lokasi yang berbeda untuk keamanan tambahan.
Simpan salinan APP_KEY di secret vault yang terpisah dari backup database. Jika backup database bocor, data tetap aman karena kunci ada di tempat lain.
Secara berkala, uji proses restore backup di environment terpisah. Pastikan data terenkripsi dapat didekripsi dengan benar menggunakan APP_KEY yang di-backup.
Jika pernah melakukan rotasi kunci, simpan riwayat semua APP_KEY sebelumnya beserta tanggal penggunaannya. Ini diperlukan untuk mendekripsi backup lama.
APP_KEY yang sesuai dengan database tersebut, (3) Source code aplikasi, (4) Konfigurasi .env lengkap. Tanpa salah satu komponen ini, pemulihan penuh tidak memungkinkan.
| Komponen Backup | Frekuensi | Lokasi Penyimpanan | Retensi |
|---|---|---|---|
| Database (full) | Harian | Cloud storage terenkripsi (S3, GCS) | 30 hari |
| Database (incremental) | Per 6 jam | Cloud storage terenkripsi | 7 hari |
| APP_KEY | Setiap perubahan | Secret vault (HashiCorp Vault, AWS SM) | Selamanya |
| File .env | Setiap perubahan | Secret vault (terpisah dari APP_KEY) | 3 versi terakhir |
| Source code | Setiap commit | Git repository (privat) | Selamanya |
File .env berisi semua konfigurasi sensitif aplikasi termasuk APP_KEY, kredensial database, dan API keys. Mengamankan file ini adalah prioritas utama.
| # | Item | Perintah / Tindakan | Status |
|---|---|---|---|
| 1 | Permission file ketat | chmod 600 .env -- hanya owner yang dapat membaca |
Wajib |
| 2 | Masuk di .gitignore | Pastikan .env terdaftar di .gitignore |
Wajib |
| 3 | Tidak dapat diakses via web | Konfigurasi web server untuk memblokir akses ke file dotenv | Wajib |
| 4 | APP_DEBUG=false di produksi | Nonaktifkan debug mode untuk mencegah kebocoran informasi sensitif | Wajib |
| 5 | Gunakan .env.example tanpa nilai asli | File .env.example di repository hanya berisi placeholder, bukan nilai sesungguhnya |
Wajib |
| 6 | Audit akses berkala | Review secara berkala siapa saja yang memiliki akses ke .env produksi |
Disarankan |
| 7 | Gunakan secret manager | Untuk infrastruktur besar, gunakan vault/secret manager sebagai pengganti file .env |
Disarankan |
# Tambahkan di konfigurasi Nginx server block location ~ /\.env { deny all; return 404; } # Blokir semua file dotfile location ~ /\. { deny all; access_log off; log_not_found off; }
Berikut daftar variabel environment yang berkaitan langsung dengan keamanan dan enkripsi di OnePlatform:
| Variabel | Contoh Nilai | Deskripsi | Dampak Keamanan |
|---|---|---|---|
APP_KEY |
base64:abc... |
Kunci utama enkripsi AES-256-CBC | Kritis |
APP_ENV |
production |
Environment aplikasi (production/staging/local) | Kritis |
APP_DEBUG |
false |
Mode debug. Harus false di produksi |
Kritis |
FORCE_HTTPS |
true |
Paksa penggunaan HTTPS untuk semua koneksi | Kritis |
SESSION_SECURE_COOKIE |
true |
Tandai cookie session sebagai Secure (hanya HTTPS) | Tinggi |
SESSION_ENCRYPT |
true |
Enkripsi data session sebelum disimpan | Tinggi |
DB_PASSWORD |
***** |
Password database. Gunakan password yang kuat | Kritis |
MAIL_PASSWORD |
***** |
Password SMTP untuk pengiriman email | Tinggi |
Checklist akhir sebelum men-deploy OnePlatform ke lingkungan produksi:
[x] APP_ENV=production [x] APP_DEBUG=false [x] APP_KEY di-generate dengan php artisan key:generate [x] APP_KEY dicatat di secret vault [x] FORCE_HTTPS=true [x] SESSION_SECURE_COOKIE=true [x] Sertifikat SSL/TLS terpasang dan valid [x] File .env permission: 600 [x] File .env tidak dapat diakses via web [x] .env masuk di .gitignore [x] Backup database dijadwalkan (harian) [x] APP_KEY di-backup terpisah dari database [x] Restore backup telah diuji [x] DB_PASSWORD menggunakan password kuat (min. 16 karakter) [x] Akses .env terbatas pada personel berwenang