多くの組織では、さまざまなビジネス目的でデータを分析できるように、機密情報を保存するデータ ウェアハウスをデプロイしています。このドキュメントは、BigQuery を使用してデータ ウェアハウスのデプロイと保護を行うデータ エンジニアとセキュリティ管理者を対象としています。これは、次のものを含むセキュリティ ブループリントの一部です。
- 一連の Terraform の構成とスクリプトを含む GitHub リポジトリ。機密データを格納するデータ ウェアハウスをサポートする、Google Cloud の環境を設定する Terraform 構成。
- このブループリントを使用して実装するアーキテクチャ、設計、セキュリティ管理のガイド(このドキュメント)。
このドキュメントでは、次のトピックについて説明します。
- 本番環境でデータ ウェアハウスを保護するために使用できるアーキテクチャと Google Cloud サービス。
- オンプレミス環境などの外部ネットワークから BigQuery にデータをインポートするためのベスト プラクティス。
- 列レベルの暗号化、機密データの差分処理、列レベルのアクセス制御を含む、Google Cloud でデータ ウェアハウスを作成、デプロイ、運用する際のデータ ガバナンスのベスト プラクティス。
このドキュメントは、Google Cloud エンタープライズ基盤ブループリントで説明されているように、基本的なセキュリティ管理の構成が完了していることを前提としています。既存のセキュリティ管理にセキュリティ管理機能を追加して、データ ウェアハウス内の機密データを保護できます。
データ ウェアハウスのユースケース
このブループリントは、次のユースケースをサポートしています。
- オンプレミス環境または別のクラウドから BigQuery ウェアハウスにデータをインポート(このドキュメント)。
- Google Cloud から安全な BigQuery データ ウェアハウスにデータをインポート
概要
BigQuery などのデータ ウェアハウスでは、分析情報のためにビジネスデータを分析できます。アナリストは、データ ウェアハウスに保存されているビジネスデータにアクセスして分析情報を作成します。データ ウェアハウスに機密とみなされるデータが含まれている場合は、ビジネス データをインポートし保存している間、転送中、または分析中に、セキュリティ、機密性、整合性、可用性を維持するための措置を取る必要があります。このブループリントでは、以下のことを行います。
- Google Cloud の外部(オンプレミス環境など)にあるソースデータを暗号化し、BigQuery にインポートします。
- 機密データへの安全なアクセスに役立つ管理を構成します。
- データ パイプラインの保護に役立つ管理を構成します。
- ペルソナごとに職掌の分離を適切に構成します。
- 適切なセキュリティ管理とロギングを設定して、機密データを保護します。
- データ分類、ポリシータグ、動的データ マスキング、列レベルの暗号化を使用して、データ ウェアハウス内の特定の列へのアクセスを制限します。
アーキテクチャ
機密データ ウェアハウスを作成するには、データを安全にインポートしてから、VPC Service Controls の境界にそのデータを保存する必要があります。次の図は、データの取り込み方法と保存方法を示しています。
このアーキテクチャでは、次の Google Cloud のサービスと機能を組み合わせて使用します。
Dedicated Interconnect により、ネットワークと Google Cloud 間でデータを移動できます。Network Connectivity プロダクトの選択で説明されているように、別の接続オプションを使用することもできます。
Identity and Access Management(IAM)と Resource Manager で、アクセスとセグメント リソースを制限します。アクセス制御とリソース階層は、最小権限の原則に従います。
VPC Service Controls で、承認、アクセス制御、および安全なデータ交換を設定することで、サービスとリソースを分離するセキュリティ境界を作成します。境界は次のとおりです。
- 受信データ(バッチまたはストリームで)を受け入れるデータ取り込み境界。別の境界を設定すると、受信データから残りのワークロードを保護できます。
- 暗号化データを他のワークロードから分離するデータ境界。
- 暗号鍵を保管し、機密データとみなされるものを定義するガバナンス境界。
これらの境界は、追加のアクセス制御とモニタリングを設定して機密データを分離し、ウェアハウス内の実際のデータとガバナンスを分離するように設計されています。ガバナンスには、鍵管理、Data Catalog 管理、ロギングが含まれます。
Cloud Storage と Pub/Sub は、次のようにデータを受け取ります。
Cloud Storage: バッチデータを受信して保存します。デフォルトでは、Cloud Storage は TLS を使用して転送中のデータを暗号化し、AES-256 を使用してストレージ内のデータを暗号化します。暗号鍵は顧客管理の暗号鍵(CMEK)です。 暗号化の詳細については、データ暗号化オプションをご覧ください。
Identity and Access Management、アクセス制御リスト(ACL)、ポリシー ドキュメントなどのセキュリティ管理を使用して、Cloud Storage バケットへのアクセスを保護することができます。 サポートされているアクセス制御の詳細については、アクセス制御の概要をご覧ください。
Pub/Sub: ストリーミング データを受信して保存します。Pub/Sub では、CMEK で認証、アクセス制御、メッセージ レベルの暗号化を使用し、データを保護します。
Cloud Run 関数は Cloud Storage によってトリガーされ、Cloud Storage が取り込みバケットにアップロードするデータを BigQuery に書き込みます。
Dataflow パイプラインは、ストリーミング データを BigQuery に書き込みます。Dataflow では、データを保護するために一意のサービス アカウントとアクセス制御を使用します。バックエンド サービスに移動してパイプラインの実行を保護するため、Dataflow は Streaming Engine を使用します。 詳細については、Dataflow のセキュリティと権限をご覧ください。
Sensitive Data Protection は、BigQuery に保存されているデータをスキャンし、保護されていない機密データを検出します。詳細については、Sensitive Data Protection を使用した BigQuery データのスキャンをご覧ください。
Cloud HSM が鍵暗号鍵(KEK)をホストします。Cloud HSM は、クラウドベースのハードウェア セキュリティ モジュール(HSM)サービスです。Cloud HSM を使用して、Google Cloud に送信する前にネットワーク内のデータの暗号化に使用する暗号鍵を生成します。
Data Catalog は、機密データが BigQuery で検出されるときに、メタデータ(ポリシータグとも呼ばれます)を使用して自動的に分類します。Data Catalog は、メタデータを使用して機密データへのアクセスも管理します。詳細については、Data Catalog の概要をご覧ください。データ ウェアハウス内のデータへのアクセスを制御するには、機密データを含む列にポリシータグを適用します。
BigQuery では、暗号化されたデータとラップされた暗号鍵が別々のテーブルに保存されます。
BigQuery では、アクセス制御、列レベルの暗号化、列レベルのセキュリティ、データ暗号化など、さまざまなセキュリティ管理を使用してコンテンツを保護します。
Security Command Center は、Google Cloud 環境全体でのセキュリティ検出結果を 1 か所でモニタリングして確認します。
Cloud Logging は、Google Cloud サービスからすべてのログを収集し、分析ツールと調査ツールによって保存と取得を行います。
Cloud Monitoring は、Google Cloud サービスのパフォーマンス情報と指標を収集して保存します。
BigQuery 用データ プロファイラは、すべてのフォルダとプロジェクトを含む、組織全体のすべての BigQuery テーブルと列の機密データを自動的にスキャンします。
組織構造
組織のリソースをグループ化して管理できるようにし、テスト環境を本番環境から分離します。Resource Manager を使用すると、プロジェクト、フォルダ、組織ごとに論理的にリソースをグループ化できます。
次の図に、ブートストラップ、共通、本番、非本番(ステージング)、開発などのさまざまな環境を表すフォルダを持つリソース階層を示します。この階層は、エンタープライズ基盤ブループリントで使用される組織構造と一致します。ブループリント内のほとんどのプロジェクトを本番環境フォルダにデプロイし、データ ガバナンス プロジェクトをガバナンスに使用する共通フォルダにデプロイします。
代替のリソース階層については、Google Cloud ランディング ゾーンのリソース階層を決定するをご覧ください。
フォルダ
フォルダを使用して、本番環境とガバナンス サービスを非本番環境やテスト環境から分離します。次の表に、このブループリントで使用されるエンタープライズ基盤ブループリントのフォルダを示します。
フォルダ | 説明 |
---|---|
ブートストラップ | エンタープライズ基盤ブループリントをデプロイするために必要なリソースが含まれています。 |
共通 | データ ガバナンス プロジェクトなど、組織の一元化されたサービスが含まれます。 |
本番 | テスト済みですぐに使用できるクラウド リソースがあるプロジェクトが含まれます。このブループリントでは、本番環境フォルダにデータ取り込みプロジェクトとデータ プロジェクトが含まれています。 |
非本番環境 | テストとリリースのステージングが現在行われているクラウド リソースがあるプロジェクトが含まれます。このブループリントでは、非本番環境フォルダにデータ取り込みプロジェクトとデータ プロジェクトが含まれています。 |
開発 | 現在開発されているクラウド リソース存在するプロジェクトが含まれています。このブループリントでは、開発フォルダにデータ取り込みプロジェクトとデータ プロジェクトが含まれています。 |
これらのフォルダの名前は、組織のフォルダ構造に合わせて変更できますが、同様の構造を維持することをおすすめします。詳細については、Google Cloud エンタープライズ基盤ブループリントをご覧ください。
プロジェクト
プロジェクトを使用して環境の一部を分離します。次の表に、組織内で必要なプロジェクトを示します。Terraform コードの実行時にこれらのプロジェクトを作成します。これらのプロジェクトの名前は変更できますが、同様のプロジェクト構造を維持することをおすすめします。
プロジェクト | 説明 |
---|---|
データの取り込み | データを受信して BigQuery に書き込むために必要なサービスが含まれます。 |
データ ガバナンス | 鍵管理、ロギング、データカタログ化の機能を提供するサービスが含まれます。 |
データ | データを保存するために必要なサービスが含まれます。 |
これらのプロジェクトに加えて、環境には Dataflow Flex テンプレート ジョブをホストするプロジェクトも必要です。Flex テンプレート ジョブは、ストリーミング データ パイプラインに必要です。
ロールとグループをプロジェクトにマッピング
組織内のさまざまなユーザー グループに、機密データ ウェアハウスを構成するプロジェクトへのアクセス権を付与する必要があります。以降のセクションでは、作成するプロジェクトのユーザー グループとロールの割り当てに関するブループリントの推奨事項について説明します。組織の既存の構造に合わせてグループをカスタマイズできますが、同様の職務分掌とロール割り当てを維持することをおすすめします。
データ アナリスト グループ
データ アナリストは、ウェアハウス内のデータを表示して分析します。このグループは、データ ウェアハウスに読み込まれたデータを表示し、暗号化されたデータ閲覧者グループと同じオペレーションを実行できます。次の表に示すように、このグループにはさまざまなプロジェクトのロールが必要です。
割り当てのスコープ | ロール |
---|---|
データ取り込みプロジェクト | |
データ プロジェクト |
|
データポリシー レベル | マスクされた読み取り(roles/bigquerydatapolicy.maskedReader ) |
暗号化されたデータ閲覧者グループ
暗号化されたデータ閲覧者グループは、Cloud Looker Studio や SAP Business Objects などその他のレポートツールを使用して、BigQuery レポート テーブルから暗号化されたデータを表示できます。暗号化されたデータ閲覧者グループは、暗号化された列のクリアテキスト データを表示することはできません。
このグループには、データ プロジェクトでの BigQuery ユーザー(roles/bigquery.jobUser
)のロールが必要です。このグループには、データポリシー レベルでのマスクされた読み取り(roles/bigquerydatapolicy.maskedReader
)も必要です。
平文リーダー グループ
平文リーダー グループには、復号ユーザー定義関数(UDF)を呼び出して平文データを表示するために必要な権限と、マスクされていないデータを読み取るための追加の権限があります。次の表に示すように、このグループにはデータ プロジェクトのロールが必要です。
このグループには、データ プロジェクトで次のロールが必要です。
- BigQuery ユーザー(
roles/bigquery.user
) - BigQuery ジョブユーザー(
roles/bigquery.jobUser
) - Cloud KMS 閲覧者(
roles/cloudkms.viewer
)
また、このグループには、Data Catalog レベルでのきめ細かい読み取り(roles/datacatalog.categoryFineGrainedReader
)ロールが必要です。
データ エンジニア グループ
データ エンジニアは、データ パイプラインとデータ ウェアハウスを設定して維持します。次の表に示すように、このグループにはさまざまなプロジェクトのロールが必要です。
割り当てのスコープ | ロール |
---|---|
データ取り込みプロジェクト |
|
データ プロジェクト |
|
ネットワーク管理者グループ
ネットワーク管理者はネットワークを構成します。通常は、ネットワーキング チームのメンバーです。
ネットワーク管理者には、組織レベルで次のロールが必要です。
- Compute 管理者(
roles/compute.networkAdmin
) - ログビューア(
roles/logging.viewer
)
セキュリティ管理者グループ
セキュリティ管理者は、アクセス、鍵、ファイアウォール ルール、VPC Service Controls、Security Command Center などのセキュリティ制御を管理します。
セキュリティ管理者には、組織レベルで次のロールが必要です。
- Access Context Manager 管理者(
roles/accesscontextmanager.policyAdmin
) - Cloud Asset 閲覧者(
roles/cloudasset.viewer
) - Cloud KMS 管理者(
roles/cloudkms.admin
) - Compute セキュリティ管理者(
roles/compute.securityAdmin
) - Data Catalog 管理者(
roles/datacatalog.admin
) - DLP 管理者(
roles/dlp.admin
) - Logging 管理者(
roles/logging.admin
) - 組織管理者(
roles/orgpolicy.policyAdmin
) - セキュリティ管理者(
roles/iam.securityAdmin
)
セキュリティ アナリスト グループ
セキュリティ アナリストは、セキュリティ インシデントと Sensitive Data Protection の検出結果をモニタリングし、対処します。
セキュリティ アナリストには、組織レベルで次のロールが必要です。
- Access Context Manager 読み取り(
roles/accesscontextmanager.policyReader
) - Compute ネットワーク閲覧者(
roles/compute.networkViewer
) - Data Catalog 閲覧者(
roles/datacatalog.viewer
) - Cloud KMS 閲覧者(
roles/cloudkms.viewer
) - ログビューア(
roles/logging.viewer
) - 組織のポリシー閲覧者(
roles/orgpolicy.policyViewer
) - セキュリティ センター管理閲覧者(
roles/securitycenter.adminViewer
) - セキュリティ センターの検出編集者(
roles/securitycenter.findingsEditor
) - 次のいずれかの Security Command Center のロール:
グループのアクセスフローの例
以下のセクションでは、安全なデータ ウェアハウス ソリューション内の 2 つのグループのアクセスフローについて説明します。
暗号化されたデータ閲覧者グループのアクセスフロー
次の図は、暗号化されたデータ閲覧者グループのユーザーが BigQuery の暗号化されたデータにアクセスするとどうなるかを示しています。
BigQuery でデータにアクセスする手順は次のとおりです。
暗号化されたデータ閲覧者は、BigQuery で次のクエリを実行して機密データにアクセスします。
SELECT ssn, pan FROM cc_card_table
BigQuery では、次のようにアクセスを確認します。
- ユーザーが期限切れでない有効な Google Cloud 認証情報を使用して認証されている。
- ユーザー ID とリクエストの送信元 IP アドレスは、VPC Service Controls の境界のアクセスレベル / Ingress ルールの許可リストに含まれています。
- IAM により、ユーザーに適切なロールがあり、BigQuery テーブルで選択した暗号化された列へのアクセスが許可されていることが確認されている。
BigQuery は、機密データを暗号化された形式で返します。
平文リーダー グループのアクセスフロー
次の図は、平文リーダー グループのユーザーが、BigQuery の暗号化されたデータにアクセスしようとするとどうなるかを示しています。
BigQuery でデータにアクセスする手順は次のとおりです。
平文リーダーは、BigQuery で次のクエリを実行し、機密データに復号された形式でアクセスします。
SELECT decrypt_ssn(ssn) FROM cc_card_table
BigQuery は、クエリ内で復号ユーザー定義関数(UDF)を呼び出して、保護された列にアクセスします。
アクセス権は次のように検証されます。
- IAM は、ユーザーに適切なロールがあり、BigQuery の復号 UDF へのアクセスが許可されていることを確認します。
- UDF は、機密データ列の保護に使用されたラップされたデータ暗号鍵(DEK)を取得します。
復号 UDF は、Cloud HSM の鍵暗号鍵(KEK)を呼び出して DEK をラップ解除します。復号 UDF は、BigQuery AEAD 復号関数を使用して機密データ列を復号します。
ユーザーに、機密データ列の平文データへのアクセス権が付与されます。
必要なセキュリティ管理について
このセクションでは、データ ウェアハウスの保護に使用する Google Cloud 内のセキュリティ管理について説明します。考慮すべき主なセキュリティ原則は次のとおりです。
- 最小権限の原則を採用してアクセスを保護する。
- セグメンテーションの設計とポリシーでネットワーク接続を保護する。
- 各サービスの構成を保護する。
- リスクレベルに基づいてデータを分類、保護する
- データ ウェアハウスをホストする環境のセキュリティ要件を把握する。
- 検出、調査、レスポンスに十分なモニタリングとロギングを構成する。
データの取り込みに関するセキュリティ管理
データ ウェアハウスを作成するには、オンプレミス環境、別のクラウド、または別の Google Cloud ソース内の別のソースからデータを転送する必要があります。このドキュメントでは、オンプレミス環境または別のクラウドからのデータの転送について説明します。別の Google Cloud ソースからデータを転送する場合は、Google Cloud から安全な BigQuery データ ウェアハウスにデータをインポートするをご覧ください。
次のいずれかのオプションを使用して、データを BigQuery のデータ ウェアハウスに転送できます。
- Cloud Storage バケットにデータを読み込むバッチジョブ。
- Pub/Sub を使用するストリーミング ジョブ。
取り込み中にデータを保護するには、クライアントサイド暗号化、ファイアウォール ルール、アクセスレベル ポリシーを使用します。取り込みプロセスは、抽出、変換、読み込み(ETL)プロセスとも呼ばれます。
Google Cloud への暗号化された接続
Cloud VPN または Cloud Interconnect を使用すると、Google Cloud とご利用の環境の間を流れるすべてのデータを保護できます。大量のデータをストリーミングする場合は直接接続と高スループットを提供するため、このブループリントでは、Dedicated Interconnect を推奨します。
現在の環境から Google Cloud へのアクセスを許可するには、アクセスレベルのポリシールールで許可リストに登録された IP アドレスを定義する必要があります。
ネットワークとファイアウォールのルール
Virtual Private Cloud(VPC)ファイアウォール ルールによって、境界へのデータフローが制御されます。restricted.googleapis.com の特別なドメイン名からの特定の TCP ポート 443 接続を除き、すべての下り(外向き)を拒否するファイアウォール ルールを作成します。restricted.googleapis.com ドメインを使用するメリットとしては、次のようなものが挙げられます。
- ワークロードが Google API およびサービスと通信する際に限定公開の Google アクセスを使用することで、ネットワーク攻撃の可能性を低減できます。
- VPC Service Controls をサポートするサービスのみを使用するようになります。
詳細については、限定公開の Google アクセスの構成をご覧ください。
データ パイプラインでは、harness-projects モジュール リポジトリ内の dataflow_firewall.tf ファイルで定義されているように、ファイアウォールで TCP ポートを開く必要があります。詳細については、インターネット アクセスとファイアウォール ルールの構成をご覧ください。
リソースで外部 IP アドレスを使用する機能を拒否するために、VM インスタンスに対して許可されている外部 IP を定義する(compute.vmExternalIpAccess)組織ポリシーはすべて拒否に設定されています。
境界制御
アーキテクチャ図に示すように、機密データ ウェアハウスのリソースを個別の境界に配置します。異なる境界のサービス間でデータを共有できるようにするには、境界ブリッジを作成します。
境界ブリッジを使用すると、保護されたサービスが境界外のリソースをリクエストできます。これらのブリッジで行える接続は次のとおりです。
- データ取り込みプロジェクトをデータ プロジェクトに接続して、データを BigQuery に取り込むことができます。
- データ プロジェクトをデータ ガバナンス プロジェクトに接続して、Sensitive Data Protection が BigQuery で保護されていない機密データをスキャンできるようにします。
- ロギング、モニタリング、暗号鍵にアクセスするために、データ取り込みプロジェクトをデータ ガバナンス プロジェクトに接続します。
境界ブリッジに加えて、下り(外向き)ルールを使用して、境界で保護されているリソースが境界外のリソースにアクセスできるようにします。このソリューションでは、下り(外向き)ルールを構成して、外部プロジェクトの Cloud Storage にある外部 Dataflow Flex テンプレート ジョブを取得します。詳細については、境界外の Google Cloud リソースにアクセスするをご覧ください。
アクセス ポリシー
特定の ID(ユーザーまたはサービス)のみがリソースとデータにアクセスできるようにするには、IAM のグループとロールを有効にします。
特定のソースのみがプロジェクトにアクセスできるように、Google 組織でアクセス ポリシーを有効にします。オンプレミス環境から送信されるリクエストに対して許可される IP アドレス範囲を指定し、特定のユーザーまたはサービス アカウントからのリクエストのみを許可するアクセス ポリシーを作成することをおすすめします。詳しくは、アクセスレベル属性をご覧ください。
クライアントサイド暗号化
機密データを Google Cloud に移動する前に、保存中と転送中のデータを保護するため、ローカルでデータを暗号化します。Tink 暗号化ライブラリまたは他の暗号化ライブラリを使用できます。Tink 暗号化ライブラリは BigQuery AEAD 暗号化と互換性があります。このブループリントでは、データのインポート後に列レベルの暗号化データを復号するためにこれを使用します。
Tink 暗号化ライブラリは、ローカルに、または Cloud HSM から生成できる DEK を使用します。DEK をラップまたは保護するには、Cloud HSM で生成された KEK を使用します。KEK は対称 CMEK 暗号鍵セットで、Cloud HSM に安全に保存され、IAM のロールと権限を使用して管理されます。
取り込み時に、ラップされた DEK とデータの両方が BigQuery に保存されます。BigQuery には、データ用とラップされた DEK 用の 2 つのテーブルがあります。アナリストが機密データを表示する必要がある場合、BigQuery は AEAD 復号を使用して、KEK で DEK をラップ解除し、保護された列を復号できます。
また、Tink を使用したクライアント側の暗号化は、BigQuery の機密データ列を暗号化することでデータをさらに保護します。ブループリントでは、次の Cloud HSM 暗号鍵を使用します。
- 取り込みプロセス用の CMEK 鍵。Pub/Sub、ストリーミング用の Dataflow パイプライン、Cloud Storage の一括アップロード、後続の一括アップロード用の Cloud Run 関数のアーティファクトでも使用されます。
- Tink を使用してネットワークで暗号化されたデータ用に、Cloud HSM によってラップされた暗号鍵。
- データ プロジェクト内の BigQuery ウェアハウスの CMEK 鍵。
CMEK のロケーションを指定します。これにより、鍵が保存され、アクセスできるようになる地理的位置が決まります。CMEK がリソースと同じロケーションに存在するようにする必要があります。デフォルトでは、CMEK は 30 日ごとにローテーションされます。
組織のコンプライアンス義務により、独自の鍵を Google Cloud から外部で管理する必要がある場合は、Cloud External Key Manager を有効にできます。外部鍵を使用する場合、鍵のローテーションを含む鍵管理アクティビティは、ユーザーの責任で行う必要があります。
サービス アカウントとアクセス制御
サービス アカウントは、Google Cloud がユーザーに代わって API リクエストを実行するために使用できる ID です。サービス アカウントにより、ユーザー ID がサービスに直接アクセスできなくなります。職務分掌を許可するために、特定の目的のために異なるロールを持つサービス アカウントを作成します。これらのサービス アカウントは、data-ingestion-sa モジュールと data-governance-sa モジュールで定義されています。
サービス アカウントは次のとおりです。
- Cloud Storage サービス アカウントは、取り込みストレージ バケットへのバッチデータの自動アップロード プロセスを実行します。
- Pub/Sub サービス アカウントを使用すると、Pub/Sub サービスへのデータのストリーミングが可能になります。
- Dataflow コントローラ サービス アカウントは、Dataflow パイプラインで Pub/Sub から BigQuery へのデータの変換と書き込みに使用されます。
- Cloud Run 関数のサービス アカウントは、Cloud Storage から BigQuery にアップロードされた後続のバッチデータを書き込みます。
- Storage Upload サービス アカウントを使用すると、ETL パイプラインでオブジェクトを作成できます。
- Pub/Sub 書き込みサービス アカウントを使用すると、ETL パイプラインで Pub/Sub にデータを書き込むことができます。
次の表に、各サービス アカウントに割り当てられているロールを示します。
名前 | ロール | 割り当てのスコープ |
---|---|---|
Dataflow コントローラ サービス アカウント |
|
データ取り込みプロジェクト |
|
データ プロジェクト | |
データ ガバナンス | ||
Cloud Run 関数のサービス アカウント |
|
データ取り込みプロジェクト |
|
データ プロジェクト | |
Storage Upload サービス アカウント |
|
データ取り込みプロジェクト |
Pub/Sub 書き込みサービス アカウント | データ取り込みプロジェクト |
データ ストレージのセキュリティ管理
BigQuery ウェアハウスでデータを保護するため、次のセキュリティ管理を構成します。
- 列レベルのアクセス制御
- ロールが制限されたサービス アカウント
- 機密フィールドの動的データ マスキング
- 組織のポリシー
- 機密データの保護の自動スキャンとデータ プロファイラ
- 適切な境界ブリッジを使用した、データ取り込みプロジェクトとデータ プロジェクトの間の VPC Service Controls 境界
- 暗号化と鍵管理:
- Cloud HSM に保存されている CMEK 鍵での保存データの暗号化
- Tink と BigQuery の AEAD 暗号化を使用した列レベルの暗号化
動的データのマスキング
大規模なデータアクセス ポリシーの共有と適用に役立たせるために、動的データのマスキングを設定できます。動的データ マスキングを使用すると、次の基準を使用して、既存のクエリによって列データを自動的にマスキングできます。
- クエリ実行時に列に適用されるマスキング ルール。
- クエリを実行しているユーザーに割り当てられているロール。マスクされていない列データにアクセスするには、データ アナリストにきめ細かい読み取りロールが必要です。
BigQuery で列のアクセス権を定義するには、ポリシータグを作成します。たとえば、スタンドアロンの例で作成した分類は、クレジット上限など、公開できないデータを含む列用の 1_Sensitive
ポリシータグを作成します。これらの列にはデフォルトのデータ マスキング ルールが適用され、列の値が非表示になります。
タグのないものはすべて、データ ウェアハウスにアクセスできるすべてのユーザーが利用できます。このアクセス制御により、データが BigQuery に書き込まれた後でも、ユーザーにアクセス権が明示的に付与されるまで、機密性の高いフィールドのデータを読み取ることはできません。
列レベルの暗号化と復号
列レベルの暗号化を使用すると、BigQuery 内のデータをより詳細なレベルで暗号化できます。テーブル全体を暗号化するのではなく、BigQuery 内の機密データを含む列を選択すると、それらの列のみが暗号化されます。BigQuery は、AEAD 暗号化と復号関数を使用して、暗号化と復号の鍵を含む鍵セットを作成します。その後、これらの鍵を使用して、テーブル内の個々の値を暗号化および復号し、鍵セット内の鍵をローテーションします。列レベルの暗号化では、BigQuery 内の暗号化されたデータに対するデュアル アクセス制御が実現されます。これは、クリアテキストでデータを読み取るには、ユーザーがテーブルと暗号鍵の両方に対する権限を持っている必要があるためです。
Cloud DLP を使用した BigQuery 用データ プロファイラ
データ プロファイラを使用すると、BigQuery テーブル内の機密データと高リスクのデータの場所を特定できます。データ プロファイラは、すべてのフォルダとプロジェクトを含む組織全体のすべての BigQuery テーブルと列を自動的にスキャンして分析します。データ プロファイラは、予測された infoType、評価されたデータリスクと機密性レベルなどの指標、およびテーブルのメタデータを出力します。これらの分析情報を使用すると、データを保護、共有、使用する方法に関して十分な情報に基づいた意思決定を行うことができます。
ロールが制限されたサービス アカウント
承認されたユーザーのみが機密データ フィールドを表示できるように、データ プロジェクトへのアクセスを制限する必要があります。そのためには、承認されたユーザーが権限を借用する必要がある roles/iam.serviceAccountUser
ロールを持つサービス アカウントを作成します。サービス アカウントの権限借用は、ユーザーがサービス アカウント キーをダウンロードせずにサービス アカウントを使用するため、プロジェクトの全体的なセキュリティが向上します。権限借用は、roles/iam.serviceAccountTokenCreator
ロールを持つ承認されたユーザーがダウンロードできる短期間のトークンを作成します。
組織のポリシー
このブループリントには、エンタープライズ基盤ブループリントで使用されている組織のポリシーの制約が含まれており、制約が追加されています。エンタープライズ基盤ブループリントで使用する制約の詳細については、組織のポリシーの制約をご覧ください。
次の表は、organization-policies モジュールで定義されている追加の組織のポリシーの制約を示しています。
ポリシー | 制約名 | 推奨値 |
---|---|---|
リソースのデプロイを特定の物理的な場所に制限する | gcp.resourceLocations
|
次のいずれかになります。in:us-locations
in:eu-locations
in:asia-locations
|
CMEK 保護を要求する |
gcp.restrictNonCmekServices
|
bigquery.googleapis.com
|
サービス アカウント作成を無効にする |
iam.disableServiceAccountCreation
|
true |
サービス アカウント キー作成を無効にする |
disableServiceAccountKeyCreation
|
true |
プロジェクトで作成した VM で OS Login を有効にする |
compute.requireOsLogin
|
true |
デフォルトのサービス アカウントへの自動的なロール付与を無効にする |
automaticIamGrantsForDefaultServiceAccounts
|
true |
許可される上り(内向き)設定(Cloud Run 関数) |
cloudfunctions.allowedIngressSettings
|
ALLOW_INTERNAL_AND_GCLB
|
IP アドレスに基づいて、新しい転送ルールを内部専用に制限する |
compute.restrictProtocolForwardingCreationForTypes
|
INTERNAL
|
Cloud Logging へのシリアルポート出力ロギングを無効にする |
compute.disableSerialPortLogging
|
true
|
Compute Engine リソースで使用できる一連の共有 VPC サブネットワークを定義します。 |
compute.restrictSharedVpcSubnetworks
|
projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK-NAME
|
運用管理機能
ロギングと、Security Command Center のプレミアム ティアの機能(Security Health Analytics、Event Threat Detection など)を有効にできます。こうした制御により、次のことを実現できます。
- データにアクセスするユーザーをモニタリングする。
- 適切な監査を確実に実施する。
- クラウド リソースの構成ミスに関する検出結果を生成する。
- 発生する可能性のある問題への、インシデント管理チームと運用チームの対応能力をサポートする。
アクセスの透明性
アクセスの透明性により、Google サポート担当者がデータにアクセスする必要がある場合、リアルタイム通知を提供します。アクセスの透明性ログは、人間がコンテンツにアクセスするたびに生成され、ビジネス上の正当な理由(サポートケースなど)がある Google の担当者のみがアクセス権を取得できます。アクセスの透明性を有効にすることをおすすめします。
ロギング
監査要件を満たしてプロジェクトの分析情報を得るには、追跡するサービスのデータログを使用して、Google Cloud Observability を構成します。harness-logging モジュールは、次のベスト プラクティスを構成します。
- すべてのプロジェクトにまたがる集約ログシンクの作成を行う。
- 適切なリージョンにログを保存する。
- CMEK 鍵をログシンクに追加する。
プロジェクト内のすべてのサービスに関して、データの読み取りと書き込みに関する情報と、管理者が読み取る内容に関する情報がログに含まれている必要があります。ロギングに関するその他のベスト プラクティスについては、エンタープライズ基盤ブループリントの検出制御をご覧ください。
アラートとモニタリング
ブループリントをデプロイした後、セキュリティ インシデントが発生している可能性があることをセキュリティ オペレーション センター(SOC)に通知するアラートを設定できます。たとえば、アラートを使用して、IAM 権限が変更されたことをセキュリティ アナリストに知らせることができます。Security Command Center のアラートの構成の詳細については、検出通知の設定をご覧ください。Security Command Center で公開されていない追加のアラートについては、Cloud Monitoring でアラートを設定できます。
その他のセキュリティ上の考慮事項
このソリューションで説明したセキュリティ管理に加えて、このソリューションの使用と重複し相互に影響し合う主要領域でもセキュリティとリスクを確認して管理する必要があります。セキュリティ上の考慮事項としては、次のようなものがあります。
- Dataflow ジョブと Cloud Run 関数の構成、デプロイ、実行に使用するコードのセキュリティ。
- このソリューションで使用するデータ分類タクソノミー。
- 暗号鍵の生成と管理。
- データ ウェアハウスに保存して分析するデータセットのコンテンツ、品質、セキュリティ。
- 以下を含む、ソリューションをデプロイする全体的な環境。
- このソリューションに接続するネットワークの設計、セグメンテーション、セキュリティ。
- 組織の IAM コントロールのセキュリティとガバナンス。
- このソリューションの一部であるインフラストラクチャへのアクセス権を持ち、そのインフラストラクチャで保存と管理がされているデータにアクセスできるアクターに対する認証と承認の設定。
まとめ
このドキュメントで説明されたアーキテクチャを実装する方法は次のとおりです。
- ブループリントを単独でデプロイするか、エンタープライズ基盤ブループリントとともにデプロイするかを決定します。エンタープライズ基盤ブループリントをデプロイしない場合は、同様のセキュリティ ベースラインを環境に設定するようにしてください。
- ネットワークとの Dedicated Interconnect 接続を設定します。
- ブループリントの README を確認し、すべての前提条件を満たしていることを確認します。
- 組織構造で説明されているとおり、組織の開発フォルダに対する
iam.serviceAccountUser
ロールとiam.serviceAccountTokenCreator
ロールがユーザー ID に設定されていることを確認します。テストに使用するフォルダがない場合は、フォルダを作成してアクセス権を構成します。 - 請求先アカウント ID、組織の表示名、テストフォルダまたはデモフォルダのフォルダ ID、次のユーザー グループのメールアドレスを記録します。
- データ アナリスト
- 暗号化されたデータ閲覧者
- 平文リーダー
- データ エンジニア
- ネットワーク管理者
- セキュリティ管理者
- セキュリティ アナリスト
- データ、データ ガバナンス、データ・インジェスト、Flex テンプレート プロジェクトを作成します。有効にする必要がある API のリストについては、README をご覧ください。
- Terraform のサービス アカウントを作成し、すべてのプロジェクトに適切なロールを割り当てます。
- アクセス制御ポリシーを設定します。
テスト環境にソリューションをデプロイします。
- Terraform スクリプトのクローンを作成して実行し、Google Cloud で環境を設定します。
- ネットワークに Tink 暗号化ライブラリをインストールします。
- アプリケーションのデフォルト認証情報を設定して、ネットワークで Tink ライブラリを実行できるようにします。
- Cloud KMS で暗号鍵を作成します。
- Tink を使用して暗号化された鍵セットを生成します。
次のいずれかの方法を使用して、Tink でデータを暗号化します。
- 確定的暗号化を使用する。
- サンプルデータを伴うヘルパー スクリプトを使用する。
ストリーミングまたは一括アップロードを使用して、暗号化されたデータを BigQuery にアップロードします。
承認済みユーザーが BigQuery AEAD 復号関数を使用して、BigQuery から暗号化されていないデータを読み取ることができることを確認します。たとえば、次の create 復号関数を実行します。
CREATE OR REPLACE FUNCTION `{project_id}.{bigquery_dataset}.decrypt`(encodedText STRING) RETURNS STRING AS ( AEAD.DECRYPT_STRING( KEYS.KEYSET_CHAIN('gcp-kms://projects/myProject/locations/us/keyRings/myKeyRing/cryptoKeys/myKeyName', b'\012\044\000\321\054\306\036\026…..'), FROM_BASE64(encodedText), "") );
create view クエリを実行します。
CREATE OR REPLACE VIEW `{project_id}.{bigquery_dataset}.decryption_view` AS SELECT Card_Type_Code, Issuing_Bank, Card_Number, `bigquery_dataset.decrypt`(Card_Number) AS Card_Number_Decrypted FROM `project_id.dataset.table_name`
ビューから select クエリを実行します。
SELECT Card_Type_Code, Issuing_Bank, Card_Number, Card_Number_Decrypted FROM `{project_id}.{bigquery_dataset}.decrypted_view`
その他のクエリとユースケースについては、Cloud KMS による列レベルの暗号化をご覧ください。
Security Command Center を使用して、コンプライアンス要件を基に新しく作成したプロジェクトをスキャンします。
ブループリントを本番環境にデプロイする。
次のステップ
- ベースラインの安全な環境について、Google Cloud エンタープライズ基盤ブループリントで確認する。
- ブループリントの詳細について、Terraform 構成の README を読む。
Google Cloud に保存されているデータを BigQuery データ ウェアハウスに取り込むには、Google Cloud から安全な BigQuery データ ウェアハウスにデータをインポートするをご覧ください。
その他のベスト プラクティスとブループリントについては、セキュリティ ベスト プラクティス センターをご確認ください。