AES-256 GCM 暗号化への移行

Looker は AES-256 Galois/Counter Mode(GCM)の暗号化を使用して、内部に保存された機密データを暗号化します。たとえば次のようなデータです。

  • Looker の内部データベースのバックアップ
  • データベースとサービスの接続情報
  • ユーザー認証情報
  • ユーザー属性値
  • キャッシュに保存された顧客データ、または配信の準備が整った顧客データ

Looker が暗号化するデータの詳細なリストについては、サポート リクエストを開いてください。

データは一意のデータ鍵を使用して暗号化され、検証を保証するために署名およびバージョニングされた暗号化エンベロープが含まれます。このモードでは、外部の顧客マスター鍵(CMK)を使用する必要があります。CMK は鍵暗号鍵(KEK)の導出、暗号化、復号に使用され、KEK はデータ鍵の導出、暗号化、復号に使用されます。

暗号化は Looker の内部データベースとキャッシュにのみ使用されます。お客様のデータベースは Looker の暗号化の影響を受けません。また、この方法で暗号化されるのは静的データ(ディスクに保存されているデータ)のみです。

セルフホスト型のインストール環境では、独自の AWS KMS アカウントまたは独自のカスタム鍵管理システムを使用できます。すべてのデータ鍵と KEK は暗号化され、セルフホスト型の Looker インストール環境で内部で使用されます。AWS KMS を使用しない場合は、外部 CMK を安全に保持する必要があります。

既存のセルフホスト型インストール環境で GCM 暗号化の使用を希望する場合は、以前の暗号化から新しい GCM 暗号化に移行する必要があります。新しいセルフホスト型インストール環境では、GCM 暗号化の追加構成が必要です。

以降のセクションの手順を順番に実行します。

Looker の停止と完全バックアップの作成

既存の Looker インスタンスから GCM 暗号化への移行では、暗号化の移行で問題が発生した場合に備えて必ず完全バックアップを作成してください。新しい Looker インスタンスをインストールする場合は、このセクションをスキップしてください。

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

Looker のアプリケーション データを保存する外部 MySQL データベースを実行している場合は、データベースを個別にバックアップします。データベースが MySQL インスタンスの場合は、スナップショットを作成します。このデータベースは比較的小さいので、数分で完了します。次に、Looker を停止します。

Looker がクラスタ化されている場合は、続行する前にすべてのノードを停止してください。

cd looker
./looker stop

後で移行コマンドを発行するときにノードが実行されていると、このコマンドは失敗し、「このバックエンド Looker データベースに接続されている他のライブノードがあります。Looker が過去 1 分以内にシャットダウンされた場合は、しばらくしてからもう一度お試しください。それ以外の場合は、クラスタ内のすべてのノードがシャットダウンしていることを確認してください」というエラー メッセージが表示されます。

CMK の生成

AWS KMS を使用している場合は、AWS マネジメント コンソールまたは API を使用して CMK を作成します。

AWS KMS を使用していない場合は、Base64、32 バイトの CMK を生成します。CMK は、環境変数またはファイル内のどちらにも保存できます。

  • CMK を生成して環境変数に保存するには、次のコマンドを使用して CMK を生成します。

    openssl rand -base64 32
    

    CMK を生成したらコピーし、次のコマンドを使用して CMK を LKR_MASTER_KEY_ENV 環境変数に保存します(<CMK_value> は前のコマンドで生成した CMK)。

    export LKR_MASTER_KEY_ENV=<CMK_value>
    

    Looker がクラスタ化されている場合は、クラスタ内のすべてのノードで上記のコマンドを実行します。

  • CMK を生成してファイルに保存するには、次のコマンドを使用します(<path_to_CMK_file> は、CMK を保存するパスとファイル名)。

    openssl rand -base64 32 > <path_to_key_file>
    

CMK ファイルを生成したら、鍵ファイルの権限を現在のユーザーの読み取り専用に設定します。

chmod 0400 <path_to_key_file>

CMK を生成したら、安全で永続的な場所に保管してから続行してください。内部データベースの暗号化後に CMK が失われると、インスタンスが失われる可能性があります。

AWS IAM ロールの作成

AWS KMS を使用していない場合は、このセクションをスキップしてください。

AWS KMS を使用している場合は、CMK に固有の新しい IAM ロールを作成し、Looker インスタンスに接続することをおすすめします。

以下は、CMK に必要な最小限の権限を含む IAM のロールの例です。

{
    "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/*"
        }
    ]
}

環境変数の設定

AWS KMS を使用している場合は、AWS_REGION 環境変数を AWS リージョンに設定し、LKR_AWS_CMK 環境変数を CMK のエイリアスに設定します。

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

必要に応じて、LKR_AWS_CMK_EC 環境変数を設定し、カスタムの AWS 暗号化コンテキストを設定することもできます。この環境変数を設定しない場合、デフォルトの暗号化コンテキストである文字列 Looker_Encryption_Context が使用されます。

export LKR_AWS_CMK_EC=<My_Encryption_Context>

AWS KMS を使用せず、CMK をファイルに保存する場合は、LKR_MASTER_KEY_FILE 環境変数を CMK ファイルのパスに設定します。

export LKR_MASTER_KEY_FILE=<path_to_key_file>

AWS KMS を使用せず、CMK を環境変数に保存する場合は、LKR_MASTER_KEY_ENV 環境変数を CMK の値に設定します。

export LKR_MASTER_KEY_ENV=<CMK_value>

Looker がクラスタ化されている場合は、クラスタ内のすべてのノードで上記のコマンドを実行します。

内部データベースの暗号化

既存の Looker インスタンスを GCM 暗号化に移行する場合は、Looker の内部データベースを移行して Looker を起動します。

java -jar looker.jar migrate_encryption
./looker  start

Looker インスタンスが -d <db.yaml> または --internal-db-creds=<db.yaml> 起動オプションで起動し、データベース認証情報が含まれる YAML ファイルへのパスが指定されている場合は、java -jar looker.jar migrate_encryption コマンドに同じオプションを指定する必要があります。

例: java -jar looker.jar migrate_encryption -d /path/file

新しい Looker インスタンスをインストールする場合、新しい Looker インスタンスを起動すると暗号化プロセスが開始されます。

通常、暗号化プロセスは 1 分未満で完了します。Looker が起動したら、Looker ログ内で GCM を検索することで、新しい暗号化を確認できます。

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

トラブルシューティング

このセクションでは、一般的なエラーとその解決策を示します。

  • タスク「migrate_encryption」が見つかりません: Looker インスタンスを Looker 6.4 に更新します。

  • バッキング キーストアがないため Looker を起動できません: Looker で CMK が見つかりません。LKR_MASTER_KEY_FILE 環境変数の CMK パスが正しいことを確認します。

  • マスター鍵のサイズが無効なため Looker を起動できません。マスター鍵は 32 バイトである必要がありますが X になっています: CMK の長さを 32 バイトにしてください。

  • 鍵ファイルをバックアップする権限は 0400 である必要がありますが、XXX になっているため、Looker を起動できません: chmod の値を 0400 に設定し、CMK ファイルを読み取り専用にしてください。