OneLake と Azure Data Lake Storage Gen 2の差について

## はじめに

Azure Data Lake Storage Gen 2(以下、ADLS) と OneLake は互換性がありますが、どういった差異があるのかリンク集的に
確認してみました。

## それぞれのサービス概要

- **OneLake**
    - >OneLake は、組織全体で 1 つに統合された論理データ レイクです。 データ レイクは、さまざまなソースからの大量のデータを処理します。 OneDrive と同様、OneLake はすべての Microsoft Fabric テナントに付属し、すべての分析データの単一の場所になるように設計されています。
    - https://learn.microsoft.com/ja-jp/fabric/onelake/onelake-overview
- **ADLS Gen2**
    - >Azure Data Lake Storage は、Azure Blob Storage を基にして構築された、ビッグ データ分析専用の一連の機能です
Azure Data Lake Storage は、Azure Data Lake Storage Gen1 と Azure Blob Storage の機能を集約したものです。 たとえば、Data Lake Storage では、ファイル システムのセマンティクス、ファイル レベルのセキュリティ、スケーリングが提供されます。 これらの機能は BLOB ストレージに基づいて構築されているため、高可用性およびディザスター リカバリー機能を備えた低コストの階層型ストレージも利用できます。
    - https://learn.microsoft.com/ja-jp/azure/storage/blobs/data-lake-storage-introduction

## 基本機能による比較

### 保存可能なデータ

- **OneLake** : 構造化データと非構造化データの両方をサポートします。
    - 構造化データは Delta Parquet が採用されています。
    - https://learn.microsoft.com/ja-jp/fabric/onelake/onelake-overview#open-at-every-level
- **ADLS Gen2** : 同様に、構造化データと非構造化データをサポートします。

### データ容量

- **OneLake** : 記載なし（Blobあたりのサイズは ADLS Gen 2 と同様と考えるのが妥当
- **ADLS Gen2** :
    - ストレージアカウントあたり 既定で5PiB (※引き上げ可能。また、複数のストレージアカウントを作成することで実質無制限
        - https://learn.microsoft.com/ja-jp/azure/storage/common/scalability-targets-standard-account
    - Blob あたり　50,000 x 4,000 MiB (約 190.7 TiB)
        - https://learn.microsoft.com/ja-jp/azure/storage/blobs/scalability-targets

### 接続エンドポイント


- **OneLake** : https: //onelake.dfs.fabric.microsoft.com/ワークスペースコンテナ名(GUID)/...
    - https://learn.microsoft.com/ja-jp/fabric/onelake/onelake-access-api
- **ADLS Gen2** : https: //アカウント名.dfs.core.windows.net/コンテナ名/…
    - https://learn.microsoft.com/ja-jp/azure/storage/blobs/data-lake-storage-introduction-abfs-uri#uri-syntax


## セキュリティ、コンプライアンス観点による比較

### 冗長性
- **OneLake** :　基本はZRS。BCDRを有効化した場合にのみRA-GZRS化
    - https://learn.microsoft.com/ja-jp/fabric/onelake/onelake-disaster-recovery
- **ADLS Gen2** :  様々な冗長化形式をサポート
    - https://learn.microsoft.com/ja-jp/azure/storage/common/storage-redundancy#geo-redundant-storage


### データ復旧

- **OneLake** : 7日間の論理的な削除が既定で有効
    - https://learn.microsoft.com/ja-jp/fabric/onelake/onelake-disaster-recovery
- **ADLS Gen2** : 1 日から 365 日の間で論理削除を設定可能
    - https://learn.microsoft.com/ja-jp/azure/storage/blobs/soft-delete-blob-overview

### 認証方式

- **OneLake** :Entra ID 認証が大原則
    - EntraID（既定） 
        - https://learn.microsoft.com/ja-jp/fabric/onelake/security/fabric-onelake-security#authentication
    - OneLake SAS（テナント設定が必要。最大1時間の有効期間）
        - https://learn.microsoft.com/ja-jp/fabric/onelake/onelake-shared-access-signature-overview
- **ADLS Gen2** : 様々な方式が可能
    - アカウントキー
    - SASトークン
    - Entra ID
        - https://learn.microsoft.com/ja-jp/azure/storage/blobs/data-lake-storage-access-control-model

### 認可

- **OneLake** : 読み取りは詳細に可能。書き込みはワークスペース単位
    - 書き込み権限：ワークスペースロールに準拠
        - https://learn.microsoft.com/ja-jp/fabric/onelake/security/get-started-security
        - ※ウェアハウスのデータはウェアハウスのアクセス制御により詳細に制御可能。
            - https://blog.engineer-memo.com/2024/05/06/adf-%e3%82%92%e4%bd%bf%e7%94%a8%e3%81%97%e3%81%a6-fabric-data-warehouse-%e3%81%ab%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e6%8a%95%e5%85%a5%e3%81%99%e3%82%8b%e9%9a%9b%e3%81%ab%e5%bf%85%e8%a6%81%e3%81%a8/
    - 読み取り権限：OneLake データアクセスロール(Preview)によりフォルダレベルで制御可能
        - https://learn.microsoft.com/ja-jp/fabric/onelake/security/get-started-data-access-roles
- **ADLS Gen2** : ACL、RBAC、ABACによる詳細なアクセス制御
    - https://learn.microsoft.com/ja-jp/azure/storage/blobs/data-lake-storage-access-control

### 監査ログ

- **OneLake** : 既定で Purview 監査ログ上に記録(ただし、対象ファイル名などの詳細情報は現状で未提供の模様
    - https://learn.microsoft.com/ja-jp/fabric/onelake/security/fabric-onelake-security#audit-logs
    - https://learn.microsoft.com/ja-jp/fabric/admin/operation-list
- **ADLS Gen2** : AzureMonitor の設定を有効化することで記録
    - https://learn.microsoft.com/ja-jp/azure/storage/blobs/monitor-blob-storage?tabs=azure-portal

### Defender 対応

- **OneLake** :記載なし
    - Power BI データに関しては Defender for Cloud apps に記載あり
        - https://learn.microsoft.com/ja-jp/fabric/governance/service-security-using-defender-for-cloud-apps-controls 
- **ADLS Gen2** : Defender for Storage を構成してマルウェア検出などが可能
        - https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/defender-for-storage-introduction

### ネットワークセキュリティ


- **OneLake** :
    - 受信アクセス:
        - プライベートエンドポイントに対応
            - https://learn.microsoft.com/ja-jp/fabric/security/security-private-links-overview
            - ワークスペース単位でのプライベートエンドポイントは予定あり
                - https://learn.microsoft.com/ja-jp/fabric/release-plan/admin-governance#private-link-support-workspace-level
        - IPファイアウォール設定は現時点でなしだが予定あり
            - https://learn.microsoft.com/ja-jp/fabric/release-plan/admin-governance#workspace-public-ip-firewall
    - 送信アクセス: 記載なし
        - Spark について、データ漏洩保護機能が予定あり
            - https://learn.microsoft.com/ja-jp/fabric/release-plan/admin-governance#data-exfiltration-protection-spark


- **ADLS Gen2** : 
    - 受信アクセス
        - https://learn.microsoft.com/ja-jp/azure/storage/common/storage-network-security?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json&tabs=azure-portal
        - Vnet サービスエンドポイント
        - プライベートエンドポイント
        - IPファイアウォール
        - 信頼されたリソースアクセス
    - 送信アクセス
        - コピー操作のスコープによりコピー先アカウントを限定可能
            - https://learn.microsoft.com/ja-jp/azure/storage/common/security-restrict-copy-operations?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&tabs=portal

※双方、Entra ID で認証をする際には条件付きアクセスによるネットワークアクセス制御が可能

### 暗号化

- **OneLake** :
    - https://learn.microsoft.com/ja-jp/fabric/onelake/security/fabric-onelake-security#encryption-and-networking
    - 保存時
        - 既定でMicrosoft 管理キーにより暗号化
    - 転送時
        - 常に TLS 暗号化
- **ADLS Gen2** : 
    - https://learn.microsoft.com/ja-jp/azure/storage/common/storage-service-encryption?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json
    - 保存時
        - 既定でMicrosoft 管理キーにより暗号化
        - カスタママネージドキー対応可能
            - https://learn.microsoft.com/ja-jp/azure/storage/common/customer-managed-keys-overview
        - インフラレベルの暗号化を追加した二重暗号化も構成可能
            - https://learn.microsoft.com/ja-jp/azure/storage/common/infrastructure-encryption-enable?tabs=portal
    - 転送時
        - 既定で TLS 暗号化
            - https://learn.microsoft.com/ja-jp/azure/storage/common/transport-layer-security-configure-minimum-version?tabs=portal


### データの保管リージョン

- **OneLake** : Fabric容量を作成したリージョンに依存
    - https://learn.microsoft.com/ja-jp/fabric/security/security-overview#understand-tenants-in-multiple-geographies
    - https://learn.microsoft.com/ja-jp/fabric/admin/service-admin-premium-multi-geo?tabs=power-bi-premium
    - 試用版や、Fabric 容量に紐づかないデータはホームリージョンに依存
        - https://learn.microsoft.com/ja-jp/azure/reliability/reliability-fabric#home-region-and-capacity-functionality
- **ADLS Gen2** : ストレージアカウントを作成したリージョンに依存

### 不変ストレージ

- **OneLake** : 構成不可
- **ADLS Gen2** : 構成可能
    - https://learn.microsoft.com/ja-jp/azure/storage/blobs/immutable-storage-overview


## コスト観点の比較

### コスト計算方法

- **OneLake** :
    - 保管コスト：Fabric 容量のコストとは別に発生（スタンダード領域の場合、ZRS程度に相当
        - https://learn.microsoft.com/ja-jp/fabric/onelake/onelake-consumption#storage
    - トランザクションコスト：Fabric 容量の CUを消費することで課金。
        - https://learn.microsoft.com/ja-jp/fabric/onelake/onelake-consumption#transactions
- **ADLS Gen2** : 
    - https://azure.microsoft.com/ja-jp/pricing/details/storage/data-lake/?msockid=26e65972aa38684b2b8a4d9aab1a694e
    - 保管コスト：アクセス層により変動
    - トランザクションコスト：アクセス層により変動

### アクセス層およびライフサイクル管理

- **OneLake** :
    - アクセス層なし
    - ライフサイクル管理機能なし
- **ADLS Gen2** : 
    - アクセス層：ホット、クール、コールド、アーカイブ
        - https://learn.microsoft.com/ja-jp/azure/storage/blobs/access-tiers-overview
    - ライフサイクル管理機能を構成して、アクセス層の遷移設定と削除の自動化を構成可能
        - https://learn.microsoft.com/ja-jp/azure/storage/blobs/lifecycle-management-overview