Konfigurasi Keamanan

Panduan lengkap untuk mengelola APP_KEY, mengaktifkan HTTPS, melakukan rotasi kunci enkripsi, strategi backup data terenkripsi, dan mengamankan file konfigurasi environment.

Hanya untuk Administrator Sistem
Konfigurasi keamanan yang dibahas di halaman ini hanya boleh dilakukan oleh administrator sistem atau DevOps yang berwenang. Kesalahan konfigurasi dapat menyebabkan kehilangan data permanen yang tidak dapat dipulihkan.

Pengelolaan APP_KEY

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.

Format APP_KEY

APP_KEY berformat base64:<kunci-base64> yang merepresentasikan kunci 256-bit (32 byte) yang di-encode dalam Base64. Contoh:

APP_KEY=base64:abc123def456...

Generate APP_KEY Baru

Untuk instalasi baru, gunakan perintah Artisan berikut untuk men-generate kunci yang aman secara kriptografis:

php artisan key:generate
PERINGATAN KRITIS
Jika 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.

Praktik Terbaik Pengelolaan APP_KEY

Simpan di Tempat Aman

Catat APP_KEY di password manager atau secret vault perusahaan (contoh: HashiCorp Vault, AWS Secrets Manager). Jangan simpan di catatan biasa, email, atau chat.

Pisahkan Per Environment

Gunakan APP_KEY yang berbeda untuk setiap environment (development, staging, production). Jangan pernah menggunakan kunci produksi di environment lain.

Jangan Commit ke Repository

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.

Batasi Akses

Hanya berikan akses ke file .env kepada personel yang benar-benar membutuhkan. Atur permission file: chmod 600 .env di server produksi.

Pengaturan FORCE_HTTPS

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
File .env -- Pengaturan HTTPS
# 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
Prasyarat HTTPS
Sebelum mengaktifkan 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://.

Prosedur Rotasi Kunci (Key Rotation)

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.

PERINGATAN: Operasi Berisiko Tinggi
Rotasi kunci adalah operasi yang sangat berisiko. Jika tidak dilakukan dengan benar, seluruh data terenkripsi akan hilang secara permanen. Pastikan Anda memiliki backup lengkap sebelum memulai dan lakukan di maintenance window.

Langkah-langkah Rotasi Kunci

Aktifkan Mode Maintenance

Nonaktifkan akses pengguna untuk mencegah penulisan data baru selama proses rotasi. Jalankan php artisan down pada server produksi.

Backup Database dan APP_KEY Lama

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.

Dekripsi Semua Data dengan Kunci Lama

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.

Generate APP_KEY Baru

Jalankan php artisan key:generate untuk membuat kunci baru. Kunci baru akan otomatis dituliskan ke file .env.

Re-enkripsi Semua Data dengan Kunci Baru

Jalankan script migrasi yang mengenkripsi ulang semua data plaintext menggunakan APP_KEY baru. Verifikasi setiap record berhasil dienkripsi ulang.

Verifikasi dan Nonaktifkan Maintenance

Uji dekripsi beberapa record sample untuk memastikan data dapat dibaca dengan benar. Jika berhasil, jalankan php artisan up untuk mengaktifkan kembali aplikasi.

Simpan APP_KEY Baru dan Hapus Plaintext Sementara

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.

Contoh Script Rotasi Kunci (Artisan Command)
// 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

Pertimbangan Backup

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.

Backup Database + APP_KEY

Selalu backup database bersamaan dengan APP_KEY yang digunakan saat backup dibuat. Simpan keduanya di lokasi yang berbeda untuk keamanan tambahan.

Backup APP_KEY Terpisah

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.

Verifikasi Restore

Secara berkala, uji proses restore backup di environment terpisah. Pastikan data terenkripsi dapat didekripsi dengan benar menggunakan APP_KEY yang di-backup.

Riwayat APP_KEY

Jika pernah melakukan rotasi kunci, simpan riwayat semua APP_KEY sebelumnya beserta tanggal penggunaannya. Ini diperlukan untuk mendekripsi backup lama.

Skenario Pemulihan Bencana
Dalam skenario pemulihan bencana (disaster recovery), Anda memerlukan: (1) Backup database, (2) 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

Keamanan File .env

File .env berisi semua konfigurasi sensitif aplikasi termasuk APP_KEY, kredensial database, dan API keys. Mengamankan file ini adalah prioritas utama.

Checklist Keamanan .env

# 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
Konfigurasi Nginx -- Blokir Akses ke .env
# 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;
}

Variabel Environment Terkait Keamanan

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

Ringkasan Konfigurasi Produksi

Checklist akhir sebelum men-deploy OnePlatform ke lingkungan produksi:

Checklist Keamanan 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
Butuh Bantuan?
Jika Anda memerlukan bantuan terkait konfigurasi keamanan, hubungi tim DevOps atau administrator sistem. Jangan pernah mencoba melakukan rotasi kunci atau mengubah konfigurasi keamanan di produksi tanpa pemahaman yang memadai dan backup yang lengkap.