Bermigrasi ke enkripsi AES-256 GCM

Looker menggunakan enkripsi Galois/Counter Mode (GCM) AES-256 untuk mengenkripsi data sensitif yang disimpan secara internal, termasuk:

  • Pencadangan database internal Looker
  • Informasi koneksi database dan layanan
  • Informasi autentikasi pengguna
  • Nilai atribut pengguna
  • Data pelanggan yang di-cache atau disiapkan untuk dikirim

Untuk mengetahui daftar mendetail data yang dienkripsi Looker, buka permintaan dukungan.

Data dienkripsi menggunakan kunci data unik dan berisi amplop enkripsi yang ditandatangani dan diberi versi untuk menjamin verifikasi. Mode ini memerlukan penggunaan Kunci Master Pelanggan (CMK) eksternal. CMK digunakan untuk mendapatkan, mengenkripsi, dan mendekripsi Kunci Enkripsi Kunci (KEK), yang kemudian digunakan untuk mendapatkan, mengenkripsi, dan mendekripsi kunci data.

Enkripsi hanya digunakan untuk database dan cache internal Looker. Database pelanggan tidak terpengaruh oleh enkripsi Looker dengan cara apa pun. Selain itu, hanya data statis (data yang disimpan di disk) yang dienkripsi dengan cara ini.

Penginstalan yang dihosting pelanggan dapat menggunakan akun AWS KMS mereka sendiri atau sistem pengelolaan kunci kustom mereka sendiri. Semua kunci data dan KEK dienkripsi dan digunakan secara internal di penginstalan Looker yang dihosting pelanggan. Jika tidak menggunakan AWS KMS, CMK eksternal harus disimpan dengan aman.

Penginstalan yang dihosting pelanggan yang sudah ada dan ingin menggunakan enkripsi GCM harus dimigrasikan dari enkripsi lama ke enkripsi GCM baru. Penginstalan baru yang dihosting pelanggan memerlukan konfigurasi tambahan untuk enkripsi GCM.

Ikuti prosedur di bagian berikut secara berurutan.

Menghentikan Looker dan membuat cadangan penuh

Jika Anda bermigrasi ke enkripsi GCM dari instance Looker yang ada, pastikan untuk membuat cadangan lengkap jika terjadi masalah dengan migrasi enkripsi. Jika Anda menginstal instance Looker baru, lewati bagian ini.

Jika Anda menggunakan database internal Looker:

cd looker
./looker stop
tar -zcvf /tmp/looker-pre-encrypt.tar.gz  /home/lookerops/looker --exclude=.cache --exclude=log --exclude=.tmp --exclude=.snapshots --exclude=looker.jar --exclude=authorized_keys --exclude=dr-log --exclude=core

Jika Anda menjalankan database MySQL eksternal untuk menyimpan data aplikasi Looker, cadangkan database secara terpisah. Jika database adalah instance MySQL, ambil snapshot. Database ini relatif kecil, sehingga hanya memerlukan waktu beberapa menit. Kemudian, hentikan Looker.

Jika Looker dikelompokkan, pastikan untuk menghentikan setiap node sebelum melanjutkan:

cd looker
./looker stop

Jika ada node yang masih berjalan saat Anda nanti mengeluarkan perintah migrasi, perintah tersebut akan gagal dengan pesan, "Ada node aktif lainnya yang terhubung ke database Looker backend ini. Jika Looker dinonaktifkan dalam satu menit terakhir, coba lagi dalam waktu dekat. Jika tidak, pastikan semua node di cluster dinonaktifkan."

Membuat CMK

Jika Anda menggunakan AWS KMS, buat CMK menggunakan AWS Management Console atau API.

Jika Anda tidak menggunakan AWS KMS, buat CMK Base64 32 byte. Anda dapat menyimpan CMK dalam variabel lingkungan atau dalam file.

  • Untuk membuat CMK dan menyimpannya dalam variabel lingkungan, Anda dapat menggunakan perintah berikut untuk membuat CMK:

    openssl rand -base64 32
    

    Setelah membuat CMK, salin, dan gunakan perintah berikut untuk menyimpan CMK di variabel lingkungan LKR_MASTER_KEY_ENV (dengan <CMK_value> adalah CMK yang Anda buat dengan perintah sebelumnya):

    export LKR_MASTER_KEY_ENV=<CMK_value>
    

    Jika Looker dikelompokkan, jalankan perintah sebelumnya di setiap node dalam cluster.

  • Untuk membuat dan menyimpan CMK dalam file, Anda dapat menggunakan perintah berikut (dengan <path_to_CMK_file> adalah jalur dan nama file untuk menyimpan CMK):

    openssl rand -base64 32 > <path_to_key_file>
    

Setelah membuat file CMK, tetapkan izin file kunci ke hanya baca untuk pengguna saat ini:

chmod 0400 <path_to_key_file>

Setelah membuat CMK, pastikan untuk menyimpannya di lokasi yang aman dan permanen sebelum melanjutkan. Kehilangan CMK setelah mengenkripsi database internal dapat menyebabkan hilangnya instance Anda.

Membuat peran AWS IAM

Jika Anda tidak menggunakan AWS KMS, lewati bagian ini.

Jika Anda menggunakan AWS KMS, Looker merekomendasikan agar Anda membuat peran IAM baru yang unik untuk CMK dan melampirkannya dengan instance Looker.

Berikut adalah contoh peran IAM yang berisi izin minimum yang diperlukan untuk CMK Anda:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "kms:GenerateRandom",
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:Generate*",
            ],
            "Resource": "arn:aws:kms:*:*:key/*"
        }
    ]
}

Menyetel variabel lingkungan

Jika Anda menggunakan AWS KMS, tetapkan variabel lingkungan AWS_REGION ke region AWS, dan variabel lingkungan LKR_AWS_CMK ke alias CMK Anda:

export AWS_REGION=<AWS_region>
export LKR_AWS_CMK=alias/<CMK_alias>

Secara opsional, Anda juga dapat menetapkan variabel lingkungan LKR_AWS_CMK_EC untuk menetapkan konteks enkripsi AWS kustom. Jika Anda tidak menetapkan variabel lingkungan ini, Looker akan menggunakan konteks enkripsi default, string Looker_Encryption_Context.

export LKR_AWS_CMK_EC=<My_Encryption_Context>

Jika Anda tidak menggunakan AWS KMS, dan Anda menyimpan CMK dalam file, tetapkan variabel lingkungan LKR_MASTER_KEY_FILE ke jalur file CMK:

export LKR_MASTER_KEY_FILE=<path_to_key_file>

Jika Anda tidak menggunakan AWS KMS, dan Anda menyimpan CMK dalam variabel lingkungan, tetapkan variabel lingkungan LKR_MASTER_KEY_ENV ke nilai CMK:

export LKR_MASTER_KEY_ENV=<CMK_value>

Jika Looker dikelompokkan, jalankan perintah sebelumnya di setiap node dalam cluster.

Mengenkripsi database internal

Jika Anda memigrasikan instance Looker yang ada ke enkripsi GCM, migrasikan database internal Looker dan mulai Looker:

java -jar looker.jar migrate_encryption
./looker  start

Jika instance Looker Anda dimulai dengan opsi startup -d <db.yaml> atau --internal-db-creds=<db.yaml>, yang memberikan jalur ke file YAML dengan kredensial database Anda, Anda harus menyertakan opsi yang sama dengan perintah java -jar looker.jar migrate_encryption.

Misalnya, java -jar looker.jar migrate_encryption -d /path/file.

Jika Anda menginstal instance Looker baru, proses enkripsi akan dimulai saat Anda memulai instance Looker baru.

Proses enkripsi biasanya memerlukan waktu kurang dari satu menit. Setelah Looker dimulai, Anda dapat memverifikasi enkripsi baru dengan menelusuri GCM di log Looker:

grep GCM log/looker.log

2018-10-29 22:42:20.279 +0000 [INFO|007d0|crypt] :: Starting migration from AES-128-CBC Legacy to AES-GCM-256
2018-10-29 22:42:20.468 +0000 [INFO|007d0|db:looker] :: (0.000152s) INSERT INTO "SETTING" ("KEY", "VALUE") VALUES

Pemecahan masalah

Bagian ini mencantumkan beberapa error umum dan resolusi untuk error tersebut:

  • Tidak dapat menemukan tugas "migrate_encryption": Update instance Looker Anda ke Looker 6.4.

  • Looker tidak dapat dimulai karena: Keystore pendukung tidak ada: Looker tidak dapat menemukan CMK. Pastikan jalur CMK di variabel lingkungan LKR_MASTER_KEY_FILE sudah benar.

  • Looker tidak dapat dimulai karena: Ukuran Kunci Master tidak valid, harus 32 byte, tetapi X: Panjang CMK harus tepat 32 byte.

  • Looker tidak dapat dimulai karena: Izin untuk file kunci cadangan harus 0400, tetapi XXX: File CMK harus hanya baca dengan nilai chmod 0400.