Azure DatabricksにおけるAzureデータソースへのセキュアなアクセス

[Securely Accessing Azure Data Sources from Azure Databricks](https://databricks.com/blog/2020/02/28/securely-accessing-azure-data-sources-from-azure-databricks.html)の翻訳です。

[Azure Databricks](https://azure.microsoft.com/en-us/free/databricks/)は、Microsoft Azure Cloudの一部である統合データ分析プラットフォームです。[Delta Lake](https://delta.io/)、[MLFlow](https://mlflow.org/)、[Koalas](http://koalas.readthedocs.io/)、[Apache Spark](https://spark.apache.org/)の上に構築されたAzure Databricksは、Microsoft Azureクラウドのファーストパーティーサービスであり、小規模から大規模なグローバルのお客様に対しるデータ、AIのユースケースをサポートするエンタープライズレベルのセキュリティ、インタラクティブなワークスペース、他のAzureサービスとのネイティブ統合、ワンクリックのセットアップを提供します。このプラットフォームは、企業におけるデータエンジニア、データサイエンティスト、データアナリスト、SecOps/クラウドエンジニアのように異なるデータペルソナ間の真のコラボレーションを実現します。

2つのシリーズの最初の記事では、Azure Databricksアーキテクチャの概要と、お客様がどのようにして自身が管理するAzureデータサービスのインスタンスにセキュアに接続できるのかを説明します。

# Azure Databricksのアーキテクチャ概要

Azure DatabricksはAzureクラウドにおける[マネージドアプリケーション](https://docs.microsoft.com/en-us/azure/azure-resource-manager/managed-applications/overview)です。ハイレベルにおいては、アーキテクチャはコントロール/管理プレーンとデータプレーンから構成されます。コントロールプレーンはMicrosoftが管理するサブスクリプションに存在し、ウェブアプリケーション、クラスターマネージャ、ジョブサービスなどを提供します。デフォルトのデプロイメントでは、データプレーンは完全にお客様のサブスクリプションで管理されるコンポーネントとなります。これには、[VNET](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-overview)、[NSG](https://docs.microsoft.com/en-us/azure/virtual-network/security-overview)、そして、[DBFS](https://docs.microsoft.com/en-us/azure/databricks/data/databricks-file-system)として知られるルートストレージアカウントが含まれます。

データプレーンをお客様管理VNETにデプロイすることも可能であり、SecOpsやクラウドエンジニアリングチームは、自身の会社のガバナンスポリシーに沿って、サービスのセキュリティ&ネットワークアーキテクチャを構築することができます。この機能は、[Bring Your Own VNETあるいはVNET Injection](https://databricks.com/blog/2019/03/20/azure-databricks-bring-your-own-vnet.html)と呼ばれるものです。以下の図では、そのようなお客様のアーキテクチャの概要を表現しています。
![](https://databricks.com/wp-content/uploads/2020/02/db-vnet-arch.png)

# Azureデータサービスへのセキュアな接続

エンタープライズセキュリティは、DatabricksとMicrosoft両方にとってソフトウェア開発を行う際のコアとなる教義となっており、Azure Databricksにおける第一市民として考えられています。

## オプション1: Azure Private Link

Azure DatabricksからAzureデータにアクセスする最もセキュアな方法は、[Private Link](https://azure.microsoft.com/en-us/services/private-link/)を設定するというものです。Azureのドキュメントによると、*Private Linkを用いることで、お使いのバーチャルネットワークにおいて、[プライベートエンドポイント](https://docs.microsoft.com/en-us/azure/private-link/private-endpoint-overview)経由でAzure PaaSサービス(例えば、Azure Storage、Azure Cosmos DB、SQL Database)、Azureがホストするカスタマー/パートナーサービスにアクセスできるようになります。お使いのバーチャルネットワークとサービス間のトラフィックは、Microsoftのネットワークバックボーン経由で転送され、公衆インターネットに公開されません。お使いのバーチャルネットワーク(VNet)にご自身の[Private Link Service](https://docs.microsoft.com/en-us/azure/private-link/private-link-service-overview)を作成することができ、皆様のお客様に対してプライベートでデリバリーすることができます。Azure Private Linkを用いたセットアップと利用体験は、Azure PaaS、顧客管理、パートナー共有サービスで一貫性のあるものとなっています。*

Azure DatabricksとPrivate Linkをどのように活用できるのかを以下の図で示しています。
![](https://databricks.com/wp-content/uploads/2020/02/private-link-4.png)
*別のVNETで動作するAzure DatabricksとAzureデータサービス*

![](https://databricks.com/wp-content/uploads/2020/02/private-link-2.png)
*同じVNETで動作するAzure DatabricksとAzureデータサービス*

**プライベートエンドポイントに対する検討**

プライベートエンドポイントを実装する前に以下の点を検討してください。

- デフォルトでデータ流出に対する保護を提供します。Azure Databricksの場合、お客様がコントロールプレーンの特定サービスへのアクセスをホワイトリスト化した際に、これは適用されます。
- トラフィックはAzureのネットワークバックボーンに限定されるので、あらゆるデータフローで公衆ネットワークは使用されません。
- プライベートネットワークアドレス空間をAzureデータサービスに拡張します。Azureデータサービスはお使いのVNETのプライベートIPを効率的に取得し、あなたの広大なプライベートネットワークの一部となります。
- 別のリージョンのAzureデータサービスにプライベートに接続しますので、リージョンAのVNETはプライベートリンクを介してリージョンBのエンドポイントに接続できます。
- プライベートリンクは、他のセキュアアクセス機構に比べて若干セットアップが複雑です。
- プライベートリンクのメリットとサービス固有の可用性の詳細なリストに関しては[ドキュメント](https://docs.microsoft.com/en-us/azure/private-link/private-link-overview#key-benefits)を参照ください。

プライベートリンクを使用するユースケースとして、お客様が本番環境でAzure Databricksと、Blob Storage、ADLS Gen2、SQL DBなどわずかのAzureデータサービスを使っている場合があります。ビジネス側は、ユーザーがマスクされた集計データをADLS Gen2からクエリーさせたいと考えますが、他のデータソースにあるマスクされていない秘密データへのアクセスは禁止したいと考えたとします。この場合、プライベートエンドポイントを、上で述べたサブオプションを用いて、ADLS Gen2に対してのみ構築します。

このような環境の構築手順を以下に示します。

1. [Setup Private Link for ADLS Gen2](https://docs.microsoft.com/en-us/azure/private-link/create-private-endpoint-storage-portal)
1. [Deploy Azure Databricks in your VNET](https://docs.microsoft.com/en-us/azure/databricks/administration-guide/cloud-configurations/azure/vnet-inject)

Azureデータサービスに対して1つ以上のプライベートリンクを設定可能であることに注意してください。これにより、皆様の企業のガバナンス要件に合わせたアーキテクチャの構築が可能となります。

## オプション2: Azureバーチャルネットワークサービスエンドポイント

Azureのドキュメントによれば、*バーチャルネットワーク(VNET)サービスエンドポイントはお使いのバーチャルネットワークのプライベートアドレス空間を拡張します。また、このエンドポイントはお使いのVNetのアイデンティティを、直接接続を介してAzureサービスに拡張します。エンドポイントを用いることで、重要なAzureサービスのリソースをお使いのバーチャルネットワークのみに限定することが可能となります。お使いのVNetからAzureサービスへのトラフィックは常に、Microsoft Azureのネットワークバックボーンに限定されます。*

## サービスエンドポイントが提供するメリット([ソース](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-service-endpoints-overview#key-benefits))

**お使いのAzureサービスリソースのセキュリティ改善**

異なるバーチャルネットワークに対するプライベートアドレス空間はお互いにオーバーラップできます。特定のVNETから発生したトラフィックをユニークに識別するために、オーバーラップしたネットワーク空間を使用することはできません。お使いのVNETのサブネットに対してサービスエンドポイントを有効化すれば、お使いのVNETのIDをAzureデータサービスに拡張することで、Azureデータサービスに対する制限をかけるためのバーチャルネットワークファイアウォールルールを追加することができます。

**お使いのバーチャルネットワークからのAzureデータサービストラフィックの最適ルーティング**

現時点では、お使いのクラウド・オンプレミスベースのバーチャルアプライアンスを経由して公衆ネットワークに向かうVNETのあらゆるルートは、Azureデータサービスのトラフィックにも使用されます。サービスエンドポイントを用いることで、Azureのトラフィックの最適なルートを提供できます。

**Azureネットワークバックボーンにトラフィックを限定**

サービスエンドポイントは常に、Azureデータソーストラフィックをお使いのVNETからMicrosoft Azureネットワークバックボーンのリソースへと直接割り振ります。Azureネットワークバックボーンにトラフィックを限定することで、強制トンネリングを通じて、データサービスのトラフィックにインパクトを与えることなしに、お使いのバーチャルネットワークからインターネットへのアウトバウンドトラフィックの監査、モニタリングの継続が可能となります。ユーザー定義ルートと強制トンネリングに関しては、[Azure virtual network traffic routing](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-udr-overview)を参照ください。

**管理オーバーヘッドなしにシンプルにセットアップ**

IPファイアウォールを通じたAzureデータサービスリソースへのアクセスをセキュアにするために、もはやバーチャルネットワークのパブリックIPを予約する必要はありません。サービスエンドポイントをセットアップするのに必要なNAT(Network Address Translation)やゲートウェイデバイスは不要です。サブネットに対してシンプルなセットアップを通じてサービスエンドポイントを設定することができます。エンドポイントを維持するための追加のオーバーヘッドはありません。
![](https://databricks.com/wp-content/uploads/2020/02/azure-service-endpoints.png)
*Azure DatabricksにおけるAzureサービスエンドポイント*

**Azureサービスエンドポイントに対する検討**

サービスエンドポイントを実装する前に以下を検討してください。

- デフォルトではデータ流出に対する保護は提供しません。
- Azureネットワークバックボーンにトラフィックを限定するので、あらゆるデータフローで公衆ネットワークは使用されません。
- お使いのプライベートネットワークアドレス空間をAzureデータサービスには拡張しません。
- 別のリージョンのAzureデータサービスにプライベート接続はできません([paired region](https://docs.microsoft.com/en-us/azure/best-practices-availability-paired-regions)は除く)。
- Azureサービスエンドポイントのメリットと制限に関しては[ドキュメント](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-service-endpoints-overview#key-benefits)を参照ください。

プライベートで述べたのと同じ例をサービスエンドポイントではどのようになるのかを考えます。この場合、Azureストレージサービスエンドポイントは、Azure Databricksサブネットで設定され、同じサブネットがADLS Gen2のファイアウォールルールでホワイトリスト化されます。

以下に、この環境の構築手順を示します。

1. [Setup Service Endpoint for ADLS Gen2](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-service-endpoints-overview)
1. [Deploy Azure Databricks in your VNET](https://docs.microsoft.com/en-us/azure/databricks/administration-guide/cloud-configurations/azure/vnet-inject)
1. [Configure IP firewall rules on ADLS Gen2](https://docs.microsoft.com/en-us/azure/storage/common/storage-network-security?toc=%2fazure%2fstorage%2fblobs%2ftoc.json)

# セキュアなAzureデータアクセスを使ってみる

Azure Databricks環境からAzureデータサービスにセキュアにアクセスするための選択肢を議論しました。ビジネス要件に基づいて、Azure Private Linkあるいはバーチャルネットワークサービスエンドポイントを使用することができます。ネットワーク接続に関するアプローチを決定したら、これらのリソースに接続するためにセキュアな認証アプローチを活用することができます。

- [特定のデータソース](https://docs.microsoft.com/en-us/azure/databricks/data/data-sources/)に関してはAzure Databrikcsのドキュメントを参照してください。
- あらゆる認証情報を隠蔽するために[シークレット](https://docs.microsoft.com/en-us/azure/databricks/security/secrets/)を使用することを検討してください。
- 可能であれば、[Azure AD credential passthroughを使ってADLS Gen2にアクセス](https://databricks.com/blog/2019/10/24/simplify-data-lake-access-with-azure-ad-credential-passthrough.html)してください。

シリーズの次の記事では、データ流出を防ぐためのボトムアップのロックダウン環境の構築方法(言い換えると、*データ損失防御*アーキテクチャの実装です)についてご説明します。ここでは、上で議論した選択肢と[Azure Firewall](https://docs.microsoft.com/en-us/azure/firewall/overview)を組み合わせて活用します。ご質問があれば、MicrosoftあるいはDatabricksのアカウントチームにコンタクトしてください。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)