コンテンツに移動
データ分析

Tink をデプロイして、オンプレミスまたはクラウドで BigQuery 暗号化を適用する方法

2023年1月24日
Google Cloud Japan Team

※この投稿は米国時間 2023 年 1 月 19 日に、Google Cloud blog に投稿されたものの抄訳です。

オンプレミスのデータ ウェアハウスから、BigQuery などのクラウド ファーストのシステムに移行する組織にとって、データ セキュリティは重要な課題です。BigQuery は、ストレージ レベルの暗号化(Google 管理または顧客管理の鍵を使用可能)と列レベルの暗号化に対応しています。具体的には、BigQuery の SQL AEAD 関数を使うことで、暗号化をきめ細かく適用し、顧客の機密データ(公的な身分証明書やクレジット カード番号など)を保護するとともに、セキュリティ要件を満たすことができます。

BigQuery はクラウド環境で列レベルの暗号化に対応していますが、多くの組織はハイブリッド クラウド環境を採用しています。データが別のロケーションに移動するたびに復号化、再暗号化しなければならないような事態を避けるため、Google Cloud では一貫した暗号化メカニズムを提供し、相互運用性を確保しています。そのため、確定的に暗号化されたデータ(参照整合性が維持される)をオンプレミスのテーブルに直接結合し、匿名性を保ちながら分析を行うことが可能です。

オンプレミスで BigQuery 互換の暗号化を適用するには、Google が開発したオープンソースの暗号ライブラリ Tink を使用します。BigQuery の SQL AEAD 関数の実装には、Tink が使用されています。この Tink ライブラリを直接呼び出すことで、クラウドで BigQuery SQL を使って復号化できるような方法でオンプレミスのデータを暗号化したり、BigQuery で列レベルで暗号化したデータを BigQuery の外で復号化したりできます。

Tink と BigQuery の使用を希望するお客様のために、便利な Python のユーティリティやサンプルを GitHub リポジトリの BigQuery Tink Toolkit にまとめました。ここではまず、Tink を直接使って、BigQuery と同じ鍵セットでオンプレミスのデータを暗号化または復号化する手順を紹介します。次に、BigQuery Tink Toolkit によってどのように Tink の処理を効率化できるのかを見ていきます。

最初に Tink 鍵セットを取得する必要があります。ここでは、KMS でラップされた鍵セットが使用されているものとします。これらの鍵セットを BigQuery に保存して、BigQuery SQL で使用できるようにする必要があります。必要な場合は、この鍵セットをオンプレミスのセカンダリ ストアに複製することもできます。

読み込んでいます...

ここまでで、暗号化された鍵セットを取得しました。次にラップを解除して、使用可能な状態の Tink 鍵セットを取り出します。Cloud KMS にオンプレミスからアクセスできない場合は、ラップを解除した鍵セットをオンプレミスの安全なキーストアに保存しておく必要があります。

読み込んでいます...

これで、鍵セットを使って Tink プリミティブを生成する準備が整いました。このプリミティブを使うことで、関連付けられた鍵セットでデータを暗号化または復号化することができます。なお、鍵セットが確定的または非確定的であるかによって、使用するプリミティブは異なります。

読み込んでいます...

暗号を取得したら、データの暗号化、復号化を必要に応じて行います。

読み込んでいます...

この手順を簡略化するため、以下の 4 つの処理を行う CipherManager クラスを提供しています。

  1. BigQuery テーブルから必要な鍵セットを取得する

  2. 取得した鍵セットのラップを解除する

  3. 各列の Tink 暗号を作成する

  4. 暗号化および復号化の呼び出し用の一貫性のあるインターフェースを提供する

CipherManager を使って特定のテーブルの列を暗号化または復号化する Spark ジョブのサンプルも用意しました。これらを参考にして、Tink をご活用いただければ幸いです。


- データ分析担当戦略的クラウド エンジニア Daryus Medora
- データ分析担当戦略的クラウド エンジニア Oscar Pulido

投稿先