Bermigrasi ke enkripsi AES-256 GCM

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

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

Untuk melihat 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 memperoleh, mengenkripsi, dan mendekripsi Kunci Enkripsi Kunci (KEK), yang kemudian digunakan untuk memperoleh, 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 atau sistem pengelolaan kunci kustom mereka sendiri. Semua kunci data dan KEK dienkripsi dan digunakan secara internal pada penginstalan Looker yang dihosting oleh pelanggan. Jika tidak menggunakan AWS KMS, CMK eksternal harus disimpan dengan aman.

Penginstalan yang dihosting oleh pelanggan dan ingin menggunakan enkripsi GCM perlu bermigrasi dari enkripsi lama ke enkripsi GCM baru. Penginstalan baru yang dihosting oleh 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 penuh 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 perlu waktu beberapa menit. Kemudian hentikan Looker.

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

cd looker
./looker stop

Jika node masih berjalan saat Anda mengeluarkan perintah migrasi di lain waktu, perintah tersebut akan gagal dengan pesan, "There are live node connected to this backend Looker database. Jika Looker dihentikan dalam satu menit terakhir, coba segera lagi, jika tidak, pastikan semua node dalam cluster telah dimatikan."

Membuat CMK

Jika Anda menggunakan AWS KMS, buat CMK menggunakan Konsol Pengelolaan AWS atau API.

Jika Anda tidak menggunakan AWS KMS, buat CMK 32 byte Base64. 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 CMK tersebut, lalu 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 pada 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, setel izin file kunci ke akses hanya baca 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 mengakibatkan hilangnya instance Anda.

Membuat peran IAM AWS

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 ke 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 Anda, dan variabel lingkungan LKR_AWS_CMK ke alias CMK Anda:

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

Atau, 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 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 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 pada setiap node dalam cluster.

Mengenkripsi {i>database<i} 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 menyediakan jalur ke file YAML dengan kredensial database, 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 solusi untuk error tersebut:

  • Tidak dapat menemukan tugas "migration_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, tetapi harus 32 byte, tetapi X: CMK harus memiliki panjang tepat 32 byte.

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