データメッシュ ユーザーガイド
Cortex Framework 用のデータメッシュは、BigQuery メタデータと Dataplex Universal Catalog を介してデータ ガバナンス、検出可能性、アクセス制御を可能にするようにデータ基盤を拡張します。これは、カスタマイズ可能で、必要に応じてデータ基盤とともにデプロイできるメタデータ リソースと BigQuery アセット アノテーションの基本セットを提供することで実装されます。これらの基本仕様は、Cortex Framework Data Foundation を補完するメタデータ基盤となるカスタマイズされた構成を提供します。このガイドに進む前に、データ メッシュのコンセプトをご覧ください。
このページで説明する手順は、Cortex Framework 用にデータ メッシュを構成するために特別に設計されています。データ メッシュ ディレクトリのセクションで、各ワークロードに固有のフォルダ内のデータ メッシュ構成ファイルを見つけます。
デザイン
Cortex のデータ メッシュは、データ基盤全体と同様に設計されており、Cortex またはユーザーが管理するさまざまなサブコンポーネントを含む 3 つのフェーズで構成されています。
- ベースリソースの仕様の更新: リリースごとに、Cortex はベースリソースの仕様を更新し、データ メッシュの標準化されたメタデータ基盤を提供します。
- リソース仕様のカスタマイズ: デプロイ前に、ユーザーは特定の使用例や要件に合わせてリソース仕様を調整できます。
- データ メッシュのデプロイと更新: ユーザーは、Cortex 構成ファイルでデータ メッシュを有効にできます。Cortex のデプロイ時にデータ アセットの後にデプロイされます。また、ユーザーは Data Mesh を個別にデプロイして、さらに更新することもできます。
データメッシュ ディレクトリ
各ワークロードとデータソースのデータ メッシュの基本構成ファイルは、次の場所にあります。ディレクトリには異なるファイル構造が含まれていますが、すべての仕様は同様に config
フォルダの下にあります。
ワークロード | データソース | ディレクトリ パス |
運用 | SAP ECC | src/SAP/SAP_REPORTING/config/ecc |
SAP S/4 HANA | src/SAP/SAP_REPORTING/config/s4 |
|
Salesforce Sales Cloud(SFDC) | src/SFDC/config
|
|
Oracle EBS | src/OracleEBS/config
|
|
マーケティング | CM360 | src/marketing/src/CM360/config |
Google 広告 | src/marketing/src/GoogleAds/config
|
|
Meta | src/marketing/src/Meta/config
|
|
Salesforce Marketing Cloud(SFMC) | src/marketing/src/SFMC/config
|
|
TikTok | src/marketing/src/TikTok/config
|
|
YouTube(ディスプレイ&ビデオ 360) | src/marketing/src/DV360/config
|
|
Google アナリティクス 4 | src/marketing/src/GA4/config
|
メタデータ リソースは、データソース レベルで定義され、 Google Cloud プロジェクトごとに 1 つの YAML ファイルがあり、すべてのリソースのリストが含まれています。必要に応じて、ユーザーは既存のファイルを拡張するか、そのディレクトリ内にリソース仕様を追加した YAML ファイルを作成できます。
アセット アノテーションはアセットレベルで定義され、ディレクトリ内の多くの YAML ファイルを含みます。各ファイルには 1 つのアノテーションが含まれます。
API を有効にして権限を確認する
Data Mesh のデフォルト値を変更すると、説明以外の機能を実装できます。説明以外の機能を実装するために config.json
で Data Mesh のデフォルト値を変更する必要がある場合は、次の表に示すように、必要な API と権限が設定されていることを確認してください。データ基盤を使用してデータ メッシュをデプロイする場合は、デプロイするユーザーまたは Cloud Build アカウントに権限を付与します。デプロイに異なる移行元プロジェクトと移行先プロジェクトが含まれる場合は、これらの API と権限が、これらの機能が使用される両方のプロジェクトで有効になっていることを確認します。
機能 | 権限ロール | ドキュメント |
BigQuery アセットと行アクセス | BigQuery データオーナー | 詳細については、アセットロールの必要なロールと、行ロールの必要な権限をご覧ください。 |
BigQuery 列へのアクセス | ポリシータグ管理者 | 詳細については、列レベルのアクセス制御で使用するロールと列レベルのアクセス制御によるアクセス制限のドキュメントをご覧ください。 |
カタログタグ | Data Catalog TagTemplate オーナー | 詳細については、Data Catalog を使用して BigQuery テーブルにタグ付けすると Data Catalog IAM のドキュメントをご覧ください。 |
Dataplex Universal Catalog レイク | Dataplex Universal Catalog 編集者 | 詳細については、レイクを作成するのドキュメントをご覧ください。 |
ベースリソースの仕様について
Cortex のデータ メッシュを構成するための主なインターフェースは、ベースリソース仕様です。これは、すぐに使用できる一連の YAML ファイルで、デプロイされるメタデータ リソースとアノテーションを定義します。基本仕様には、初期の推奨事項と構文の例が記載されていますが、ユーザーのニーズに合わせてさらにカスタマイズすることを目的としています。これらの仕様は次の 2 つのカテゴリに分類されます。
- さまざまなデータアセットに適用できるメタデータ リソース。たとえば、アセットにビジネス ドメインのタグを付ける方法を定義するカタログ タグ テンプレートなどです。
- 特定のデータアセットにメタデータ リソースを適用する方法を指定するアノテーション。たとえば、特定のテーブルを Sales ドメインに関連付けるカタログタグなどです。
以降のセクションでは、各仕様タイプの基本的な例を示し、それらをカスタマイズする方法について説明します。ベース仕様には、関連するデプロイ オプションが有効になっている場合にデプロイに合わせて変更する必要がある箇所に ## CORTEX-CUSTOMER
のタグが付けられています。高度な使用方法については、src/common/data_mesh/src/data_mesh_types.py
のこれらの仕様スキーマの正規定義をご覧ください。
メタデータ リソース
メタデータ リソースは、プロジェクト内に存在する共有エンティティであり、多くのデータアセットに適用できます。ほとんどの仕様には、次の条件を満たす display_name
フィールドが含まれています。
- Unicode 文字、数字(0 ~ 9)、アンダースコア(_)、ダッシュ(-)、スペース( )のみが含まれています。
- 先頭または末尾にスペースは使用できません。
- 最大文字数は 200 文字です。
場合によっては、display_name
が ID としても使用されるため、追加の要件が発生する可能性があります。その場合は、正規ドキュメントへのリンクが含まれます。
デプロイで異なるソース プロジェクトとターゲット プロジェクトのメタデータ リソースを参照する場合は、各プロジェクトに仕様を定義する必要があります。たとえば、Cortex Salesforce(SFDC)には 2 つの Lake 仕様が含まれています。1 つは raw ゾーンと CDC ゾーン用、もう 1 つはレポート用です。
Dataplex Universal Catalog レイク
Dataplex Universal Catalog のレイク、ゾーン、アセットは、エンジニアリングの観点からデータを整理するために使用されます。レイクには region
があり、ゾーンには location_type
があります。これらは両方とも Cortex のロケーション(config.json
> location
)に関連しています。Cortex のロケーションは、BigQuery データセットが保存される場所を定義し、単一リージョンまたはマルチリージョンにすることができます。ゾーン location_type
は、それに合わせて SINGLE_REGION | MULTI_REGION
に設定する必要があります。ただし、Lake リージョンは常に単一のリージョンである必要があります。Cortex のロケーションとゾーン location_type
がマルチリージョンの場合は、そのグループ内の単一リージョンを Lake リージョンとして選択します。
- 要件
- 制限事項
- Dataplex Universal Catalog は、個々のテーブルではなく、BigQuery データセットを Dataplex Universal Catalog アセットとして登録することのみをサポートしています。
- アセットは 1 つのゾーンにのみ登録される場合があります。
- Dataplex Universal Catalog は、特定のロケーションでのみサポートされています。詳細については、Dataplex Universal Catalog のロケーションをご覧ください。
lakes.yaml
の次の例をご覧ください。
これらのリソースは、data_mesh_types.Lakes
を指定する YAML ファイルで定義されます。
カタログ タグ テンプレート
Data Catalog タグ テンプレートを使用して、BigQuery テーブルまたは個々の列にコンテキストを追加できます。これらは、Dataplex Universal Catalog 検索ツールと統合された方法で、技術的な観点とビジネスの観点の両方からデータを分類して理解するのに役立ちます。データにラベルを付けるために使用できる特定のフィールドと、各フィールドに保持できる情報の種類(テキスト、数値、日付など)を定義します。カタログタグは、実際のフィールド値を含むテンプレートのインスタンスです。
テンプレート フィールド display_name
はフィールド ID として使用され、クラス TagTemplate で指定された TagTemplate.fields
の要件を満たす必要があります。サポートされているフィールド タイプの詳細については、Data Catalog のフィールド タイプをご覧ください。
Cortex Data Mesh は、すべてのタグ テンプレートを一般公開として作成します。また、タグ テンプレート仕様に level
という新しいコンセプトが導入されました。これは、タグをアセット全体、アセット内の個々のフィールド、またはその両方に適用するかどうかを定義するもので、可能な値は ASSET | FIELD | ANY
です。現時点では厳密に適用されていませんが、将来の検証チェックでは、デプロイ時にタグが適切なレベルで適用されるようにする可能性があります。
次の例をご覧ください。
テンプレートは、data_mesh_types.CatalogTagTemplates
を指定する YAML ファイルで定義されます。
カタログタグはテンプレートのインスタンスです。これについては、以下のアセット アノテーションで説明します。
タグ テンプレートを使用したアセットと列レベルのアクセス制御
Cortex Framework では、カタログタグ テンプレートに関連付けられているすべてのアーティファクトに対して、アセットまたは列レベルのアクセス制御を有効にできます。たとえば、ユーザーが事業部門に基づいてアセットへのアクセス権を付与したい場合は、各ビジネス ドメインに異なるプリンシパルを指定して、line_of_business
カタログ タグ テンプレートの asset_policies
を作成できます。各ポリシーは、特定の値を持つタグのみを照合するために使用できる filters
を受け入れます。この場合、domain
の値を照合できます。これらの filters
は等価性の照合のみをサポートし、他の演算子はサポートしていません。複数のフィルタがリストされている場合、結果はすべてのフィルタを満たす必要があります(例: filter_a AND filter_b
)。アセット ポリシーの最終的なセットは、アノテーションで直接定義されたものと、テンプレート ポリシーのものの和集合です。
カタログタグを使用した列レベルのアクセス制御も同様に、一致するフィールドにポリシータグを適用します。ただし、1 つの列に適用できるポリシータグは 1 つのみであるため、優先順位は次のようになります。
- 直接ポリシータグ: ポリシータグが列のアノテーションで直接定義されている場合、そのポリシータグが優先されます。
- 一致するタグ テンプレート ポリシー: それ以外の場合、アクセスは、関連付けられたカタログ タグ テンプレート内のフィールドで定義された最初の一致するポリシーによって決定されます。
この機能を使用する場合は、カタログタグとアクセス制御リスト(ACL)のデプロイを同時に有効または無効にすることを強くおすすめします。これにより、ACL が適切にデプロイされます。
この高度な機能の仕様については、data_mesh_types.CatalogTagTemplate
の asset_policies
パラメータと field_policies
パラメータの定義をご覧ください。
カタログの用語集
用語集は、データアセット内の特定の列で使用される用語の辞書を提供するツールです。これらの用語は、一般に理解されていない可能性があります。ユーザーはコンソールで用語を手動で追加できますが、リソース仕様によるサポートはありません。
ポリシーの分類とタグ
ポリシーの分類とタグを使用すると、機密データアセットに対する列レベルのアクセス制御を標準化された方法で実現できます。たとえば、特定の事業部門の PII データを制御するタグの分類体系があり、特定のグループのみがマスクされたデータやマスクされていないデータを読み取ることができ、読み取りアクセス権がないグループもあります。
ポリシー分類とタグの詳細については、列データ マスキングの概要のドキュメントをご覧ください。次のセクションが特に重要です。
Cortex Framework には、ポリシータグの指定方法と潜在的な用途を示すサンプル ポリシータグが用意されていますが、アクセス制御に影響するリソースは、Data Mesh デプロイではデフォルトで有効になっていません。
次の例をご覧ください。
ポリシー分類は、data_mesh_types.PolicyTaxonomies
を指定する YAML ファイルで定義されます。
アセット アノテーション
アノテーションは、特定のアセットに適用可能なメタデータを指定し、定義された共有メタデータ リソースを参照できます。アノテーションには次のものがあります。
- アセットの説明
- フィールドの説明
- カタログタグ
- アセット、行、列レベルのアクセス制御
Cortex Framework Data Foundation は、次のワークロード用に事前構成されたアノテーション(説明)を提供します。
- SAP ECC(未加工、CDC、レポート)
- SAP S4 HANA(未加工、CDC、レポート)
- SFDC(レポート専用)
- Oracle EBS(レポートのみ)
- CM360(レポートのみ)
- Google 広告(レポートのみ)
- Meta(レポート専用)
- SFMC(レポート専用)
- TikTok(レポート専用)
- YouTube(ディスプレイ&ビデオ 360 を使用)(レポートのみ)
- Google アナリティクス 4(レポートのみ)
次の例をご覧ください。
アノテーションは、data_mesh_types.BqAssetAnnotation
を指定する YAML ファイルで定義します。
カタログタグ
カタログタグは、特定の資産に適用されるフィールド値が割り当てられた、定義済みのテンプレートのインスタンスです。関連付けられたテンプレートで宣言されているフィールド タイプと一致する値を割り当てるようにしてください。
TIMESTAMP
値は、次のいずれかの形式にする必要があります。
"%Y-%m-%d %H:%M:%S%z"
"%Y-%m-%d %H:%M:%S"
"%Y-%m-%d"
次の例をご覧ください。
Spec の定義については、data_mesh_types.CatalogTag
をご覧ください。
アクセス ポリシーの閲覧者とプリンシパルを指定する
アクセス ポリシーを使用して、Cortex Framework で BigQuery データへのアクセスを制御します。これらのポリシーは、特定のデータアセット、アセット内の行、さらには個々の列にアクセスできるユーザー(プリンシパル)を定義します。プリンシパルは、IAM ポリシー バインディング メンバーで定義された特定の形式に従う必要があります。
アセットレベルのアクセス
さまざまな権限を使用して、BigQuery アセット全体へのアクセス権を付与できます。
READER
: アセット内のデータを表示します。WRITER
: アセットのデータを変更して追加します。OWNER
: アクセスの管理など、アセットに対する完全な制御。
これらの権限は、SQL の GRANT DCL
ステートメントと同等です。
ほとんどのリソースとアノテーションの動作とは異なり、上書きフラグは OWNERS
ロールを持つ既存のプリンシパルを削除しません。上書きを有効にして新しい所有者を追加すると、既存の所有者にのみ追加されます。これは、意図しないアクセス権の喪失を防ぐための保護機能です。アセット オーナーを削除するには、コンソールを使用します。上書きすると、READER
または WRITER
ロールを持つ既存のプリンシパルが削除されます。
次の例をご覧ください。
Spec の定義については、data_mesh_types.BqAssetPolicy
をご覧ください。
行レベルのアクセス
特定の列値フィルタに基づいて、行のセットに対するアクセス権を付与できます。行アクセス ポリシーを指定すると、指定したフィルタ文字列が CREATE DDL statement
に挿入されます。overwrite フラグが有効になっている場合、新しい行アクセス ポリシーを適用する前に、既存のすべての行アクセス ポリシーが削除されます。
行レベルのアクセスについて、次の点を考慮してください。
- 行アクセス ポリシーを追加すると、そのポリシーで指定されていないユーザーはどの行にもアクセスできなくなります。
- 行ポリシーはテーブルでのみ機能し、ビューでは機能しません。
- 行アクセス ポリシーのフィルタでパーティション分割列を使用しないでください。アセットタイプとパーティション分割された列については、関連するレポート設定の YAML ファイルをご覧ください。
行レベルのアクセス ポリシーの詳細については、行レベルのセキュリティのベスト プラクティスをご覧ください。
次の例をご覧ください。
Spec の定義については、data_mesh_types.BqRowPolicy
をご覧ください。
列レベルのアクセス
列レベルのアクセスを有効にするには、ポリシータグ名と分類名で識別されるポリシータグを使用して、個々のフィールドにアノテーションを付けます。ポリシータグのメタデータ リソースを更新して、アクセス制御を構成します。
次の例をご覧ください。
Spec の定義については、data_mesh_types.PolicyTagId
をご覧ください。
データメッシュのデプロイ
データ メッシュは、データ基盤のデプロイの一部としてデプロイすることも、単独でデプロイすることもできます。いずれの場合も、Cortex config.json
ファイルを使用して、BigQuery データセット名やデプロイ オプションなどの関連する変数を特定します。デフォルトでは、Data Mesh をデプロイしても、既存のリソースやアノテーションは削除または上書きされません。これは、意図しない損失を防ぐためです。ただし、単独でデプロイする場合は、既存のリソースを上書きすることもできます。
導入オプション
次のデプロイ オプションは、config.json
> DataMesh
でユーザーのニーズと費用の制約に基づいて有効または無効にできます。
オプション | 注 |
deployDescriptions
|
これはデフォルトで有効になっている唯一のオプションで、アセットと列の説明を含む BigQuery アノテーションをデプロイします。追加の API や権限を有効にする必要はありません。 |
deployLakes
|
レイクとゾーンをデプロイします。 |
deployCatalog
|
アセット アノテーションにカタログ テンプレート リソースとその関連タグをデプロイします。 |
deployACLs
|
アセット アノテーションを使用して、Policy Taxonomy リソースと、アセット、行、列レベルのアクセス制御ポリシーをデプロイします。ログには、アクセス ポリシーがどのように変更されたかを示すメッセージが含まれています。 |
Data Foundation を使用したデプロイ
デフォルトでは、config.json
> deployDataMesh
を有効にすると、各ワークロード ビルドステップの最後にデータ メッシュ アセットの説明をデプロイできます。このデフォルト構成では、追加の API やロールを有効にする必要はありません。データ メッシュの追加機能は、デプロイ オプション、必要な API とロールを有効にし、関連するリソース仕様を変更することで、データ基盤とともにデプロイできます。
単独でデプロイする
データメッシュのみをデプロイするには、common/data_mesh/deploy_data_mesh.py
ファイルを使用します。このユーティリティは、ビルドプロセスでデータ メッシュのワークロードを一度に 1 つずつデプロイするために使用されますが、直接呼び出すと、複数のワークロードを一度にデプロイするために使用されることもあります。デプロイする仕様のワークロードは、config.json
ファイルで有効にする必要があります。たとえば、SAP 用 Data Mesh をデプロイする場合は、deploySAP=true
を確認します。
必要なパッケージとバージョンでデプロイしていることを確認するには、Cortex デプロイ プロセスで使用される同じイメージから、次のコマンドを使用してユーティリティを実行します。
# Run container interactively
docker container run -it gcr.io/kittycorn-public/deploy-kittycorn:v2.0
# Clone the repo
git clone https://github.com/GoogleCloudPlatform/cortex-data-foundation
# Navigate into the repo
cd cortex-data-foundation
使用可能なパラメータとその使用方法については、次のコマンドを実行してください。
python src/common/data_mesh/deploy_data_mesh.py -h
SAP ECC の呼び出しの例を次に示します。
python src/common/data_mesh/deploy_data_mesh.py \
--config-file config/config.json \
--lake-directories \
src/SAP/SAP_REPORTING/config/ecc/lakes \
--tag-template-directories \
src/SAP/SAP_REPORTING/config/ecc/tag_templates \
--policy-directories \
src/SAP/SAP_REPORTING/config/ecc/policy_taxonomies \
--annotation-directories \
src/SAP/SAP_REPORTING/config/ecc/annotations
ディレクトリのロケーションについては、データ メッシュ ディレクトリをご覧ください。
上書き
デフォルトでは、Data Mesh をデプロイしても、既存のリソースやアノテーションは上書きされません。ただし、Data Mesh のみをデプロイするときに --overwrite
フラグを有効にすると、デプロイを次の方法で変更できます。
Lake、カタログタグ テンプレート、ポリシータグなどのメタデータ リソースを上書きすると、同じ名前を共有する既存のリソースは削除されますが、名前が異なる既存のリソースは変更されません。つまり、リソース仕様が YAML ファイルから完全に削除され、上書きが有効な状態で Data Mesh が再デプロイされた場合、名前の競合が発生しないため、そのリソース仕様は削除されません。これは、Cortex Data Mesh のデプロイが使用中の既存のリソースに影響しないようにするためです。
Lake や Zone などのネストされたリソースの場合、リソースを上書きすると、そのすべての子が削除されます。たとえば、レイクを上書きすると、既存のゾーンとアセット参照も削除されます。上書きされたカタログ タグ テンプレートとポリシータグの場合、既存の関連付けられたアノテーション参照もアセットから削除されます。アセット アノテーションでカタログタグを上書きすると、同じテンプレートを共有するカタログタグの既存のインスタンスのみが上書きされます。
アセットとフィールドの説明の上書きは、既存の説明と競合する有効な空でない新しい説明が提供されている場合にのみ有効になります。
一方、ACL の動作は異なります。ACL を上書きすると、既存のプリンシパル(アセットレベルのオーナーを除く)がすべて削除されます。これは、アクセス ポリシーから除外されるプリンシパルが、アクセス権が付与されるプリンシパルと同じくらい重要であるためです。
データメッシュの探索
データ メッシュをデプロイすると、ユーザーは Data Catalog でデータアセットを検索して表示できます。これには、適用されたカタログタグの値に基づいてアセットを検出する機能が含まれます。必要に応じて、カタログ用語を手動で作成して適用することもできます。
デプロイされたアクセス ポリシーは、BigQuery の [スキーマ] ページで確認できます。このページでは、各レベルの特定のアセットに適用されたポリシーを確認できます。
データリネージ
BigQuery アセット間のリネージを有効にして可視化すると、ユーザーにとって便利です。リネージュには、API を介してプログラムでアクセスすることもできます。データ リネージはアセットレベルのリネージのみをサポートしています。Data Lineage は Cortex Data Mesh と密接に関連していませんが、今後、Lineage を利用する新機能が導入される可能性があります。
Cortex Data Mesh または Cortex Framework のリクエストについては、サポート セクションをご覧ください。