次の方法で共有


チュートリアル: Azure Data Lake Storage に接続する

この記事では、Azure Data Lake Storage へのアクセスを構成するための従来のパターンについて説明します。 Databricks では、Unity Catalog を使用することをお勧めします。 Unity カタログを使用した Unity カタログメタストアの作成クラウド オブジェクト ストレージへの接続に関する情報を参照してください。

このチュートリアルでは、OAuth 2.0 と Microsoft Entra ID サービス プリンシパルを使用して Azure Databricks から Azure Data Lake Storage に接続するために必要なすべての手順について説明します。

要件

このチュートリアルを始める前に、以下のタスクを完了します。

手順 1: Microsoft Entra ID サービス プリンシパルを作成する

サービス プリンシパルを使用して Azure Data Lake Storage に接続するには、管理者ユーザーが新しい Microsoft Entra ID アプリケーションを作成する必要があります。 Microsoft Entra ID サービス プリンシパルを既に使用できる場合は、「手順 2: サービス プリンシパルのクライアント シークレットを作成する」に進んでください。

Microsoft Entra ID サービス プリンシパルを作成するには、次の手順に従います。

  1. Azure portal にサインインします。

    使用するポータルは、Microsoft Entra ID アプリケーションが Azure パブリック クラウド、各国のクラウドまたはソブリン クラウドのいずれで実行されるかによって異なります。 詳細については、各国のクラウドに関する記事をご覧ください。

  2. 複数のテナント、サブスクリプション、またはディレクトリにアクセスできる場合は、上部のメニューの [ディレクトリ + サブスクリプション] (フィルター付きのディレクトリ) アイコンをクリックして、サービス プリンシパルをプロビジョニングするディレクトリに切り替えます。

  3. <Microsoft Entra ID を検索して選択します。

  4. [管理] で、[アプリの登録] > [新規登録] の順にクリックします。

  5. [名前] にアプリケーションの名前を入力します。

  6. [サポートされているアカウントの種類] セクションで、[この組織ディレクトリのみに含まれるアカウント (シングル テナント)] を選択します。

  7. [登録] をクリックします。

手順 2: サービス プリンシパルのクライアント シークレットを作成する

  1. [管理] で、[証明書とシークレット] をクリックします。

  2. [クライアント シークレット] タブで、[新しいクライアント シークレット] をクリックします。

    新しいクライアント シークレット

  3. [クライアントシークレットの追加] ウィンドウの [説明] に、クライアント シークレットの説明を入力します。

  4. [有効期限] で、クライアント シークレットの有効期限の期間を選択して、[追加] をクリックします。

  5. このクライアント シークレットはアプリケーションのパスワードであるため、クライアント シークレットの をコピーして安全な場所に格納します。

  6. アプリケーション ページの [概要 ] ページの [ 要点 ] セクションで、次の値をコピーします。

    • アプリケーション (クライアント) ID
    • ディレクトリ (テナント) ID

手順 3: サービス プリンシパルに Azure Data Lake Storage へのアクセス権を付与する

ストレージ リソースへのアクセス権を付与するには、サービス プリンシパルにロールを割り当てます。 このチュートリアルでは、 ストレージ BLOB データ共同作成者 を Azure Data Lake Storage アカウントのサービス プリンシパルに割り当てます。 特定の要件に応じて、他のロールを割り当てる必要がある場合があります。

  1. Azure portal で、[ストレージ アカウント] サービスに移動します。
  2. 使用する Azure ストレージ アカウントを選択します。
  3. [アクセス制御 (IAM)] をクリックします。
  4. [+ 追加] をクリックし、ドロップダウン メニューから [ロールの割り当ての追加] を選択します。
  5. [選択] フィールドを Microsoft Entra ID アプリケーション名に設定し、手順 1 で作成した [ロール][Storage BLOB データ共同作成者] に設定します。
  6. [保存] をクリックします。

手順 4: クライアント シークレットを Azure Key Vault に追加する

手順 1 のクライアント シークレットを Azure Key Vault に保存できます。

  1. Azure portal で、[キー コンテナー] サービスにアクセスします。
  2. 使用する Azure Key Vault を選択します。
  3. Key Vault の設定ページで、[シークレット] を選択します。
  4. [生成/インポート] をクリックします。
  5. [アップロード オプション][手動] を選択します。
  6. [名前] に、シークレットの名前を入力します。 シークレットの名前は、キー コンテナー内で一意である必要があります。
  7. [値] に、手順 1 で保存したクライアント シークレットを貼り付けます。
  8. Create をクリックしてください。

手順 5: Azure Databricks 用に Azure Key Vault インスタンスを構成する

  1. Azure Portal で、Azure Key Vault インスタンスに移動します。

    1. [ Settings で、 Access 構成 タブを選択します。

    2. [アクセス許可モデル][Vault アクセス ポリシー] に設定します。

      Azure Key Vault がサポートするシークレット スコープ ロールを作成すると、キー コンテナー アクセス ポリシーを使用して、Azure Databricks サービスのリソース ID に Get および List アクセス許可が付与されます。 Azure ロールベースのアクセス制御アクセス許可モデルは、Azure Databricks ではサポートされていません。

    3. [設定][ネットワーク] を選択します。

    4. [ファイアウォールと仮想ネットワーク] で、[次からのアクセスを許可する:][特定の仮想ネットワークと IP アドレスからのパブリック アクセスを許可する] に設定します。

      [例外] で、[信頼された Microsoft サービスがこのファイアウォールをバイパスすることを許可します] を選択します。

      次からのアクセスを許可する:すべてのネットワークからのパブリック アクセスを許可する に設定することもできます。

手順 6: Azure Databricks ワークスペースで Azure Key Vault に基づくシークレット スコープを作成する

Azure Key Vault に格納されているシークレットを参照するために、Azure Key Vault でサポートされるシークレットのスコープを Azure Databricks に作成できます。

  1. https://<databricks-instance>#secrets/createScope にアクセスします。 この URL では大文字と小文字が区別されます。createScope のスコープは大文字にする必要があります。

    スコープの作成

  2. シークレットのスコープの名前を入力します。 シークレットのスコープの名前は大文字と小文字が区別されません。

  3. [プリンシパルの管理] ドロップダウンを使用して、"すべてのユーザー" にこのシークレットのスコープの アクセス許可を付与するか、シークレットのスコープの "作成者" (つまり、あなた) のみにするかを指定します。MANAGE

  4. [DNS 名] (例: https://databrickskv.vault.azure.net/) と [リソース ID] (次の例) を入力します。

    /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/databricks-rg/providers/Microsoft.KeyVault/vaults/databricksKV
    

    これらのプロパティは、Azure portal の Azure Key Vault の [設定] > [プロパティ ] タブから使用できます。

  5. [Create] ボタンをクリックします。

手順 7: Python を使用して Azure Data Lake Storage に接続する

これで、Microsoft Entra ID アプリケーション サービス プリンシパルで OAuth 2.0 を認証に使用して、Azure Databricks ノートブックから Azure ストレージ アカウント内のデータに安全にアクセスできるようになりました。

  1. Azure Databricks ワークスペースに移動して新しい Python ノートブックを作成します。

  2. Azure Data Lake Storage に接続するには、次の Python コードを次の代わりに実行します。

    service_credential = dbutils.secrets.get(scope="<scope>",key="<service-credential-key>")
    
    spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
    spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
    spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>")
    spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential)
    spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")
    

    • <scope> を手順 5 のシークレット スコープ名と置き換えます。
    • <service-credential-key> をクライアント シークレットを含むキーの名前に置き換えます。
    • <storage-account> は Azure ストレージ アカウントの名前に置き換えます。
    • <application-id> を Microsoft Entra ID アプリケーションのアプリケーション (クライアント) ID に置き換えます。
    • <directory-id> を Microsoft Entra ID アプリケーションのディレクトリ (テナント) ID に置き換えます。

    これで、Azure Databricks ワークスペースが Azure Data Lake Storage アカウントに正常に接続されました。

Azure Databricks ワークスペースに Azure Data Lake Storage へのアクセス権を付与する

Azure Data Lake Storage でファイアウォールを構成する場合は、Azure Databricks ワークスペースが Azure Data Lake Storage に接続できるようにネットワーク設定を構成する必要があります。 まず、「Azure 仮想ネットワークに Azure Databricks をデプロイする (VNet インジェクション)」に従って、Azure Databricks ワークスペースが独自の仮想ネットワークにデプロイされていることを確認します。 その後、 プライベート エンドポイント または 仮想ネットワークからのアクセスを 構成して、サブネットから Azure Data Lake Storage アカウントへの接続を許可できます。

サーバーレス SQL ウェアハウスなどのサーバーレス コンピューティングを使用している場合は、サーバーレス コンピューティング プレーンから Azure Data Lake Storage へのアクセスを許可する必要があります。 「サーバーレス コンピューティング プレーン ネットワーク」をご覧ください。

プライベート エンドポイントを使用してアクセス権を付与する

Azure Data Lake Storage アカウントの プライベート エンドポイント を使用して、Azure Databricks ワークスペースが プライベート リンク経由でデータに安全にアクセスできるようにします。

Azure portal を使用してプライベート エンドポイントを作成するには、「チュートリアル: Azure プライベート エンドポイントを使用してストレージ アカウントに接続する」を参照してください。 プライベート エンドポイントは、Azure Databricks ワークスペースがデプロイされているのと同じ仮想ネットワークに作成するようにしてください。

仮想ネットワークからアクセス権を付与する

Azure 仮想ネットワーク サービス エンドポイントを使用すると、重要な Azure サービス リソースをユーザーの仮想ネットワーク専用にして保護できます。 Azure Databricks ワークスペースに使用した VNet 内で、Azure Storage のサービス エンドポイントを有効にできます。

Azure CLI や PowerShell の手順などの詳細については、「仮想ネットワークからアクセスの許可」を参照してください。

  1. Azure Data Lake Storage アカウントのストレージ アカウント共同作成者ロールを持つユーザーとして、Azure Portal にログインします。
  2. Azure Storage アカウントに移動し、[ネットワーク] タブに移動します。
  3. 選択した仮想ネットワークと IP アドレスからのアクセスを許可するように選択していることを確認します。
  4. [仮想ネットワーク] で、[既存の仮想ネットワークを追加する] を選択します。
  5. サイド パネルの [サブスクリプション] で、仮想ネットワークが存在するサブスクリプションを選択します。
  6. [仮想ネットワーク] で、Azure Databricks ワークスペースがデプロイされている仮想ネットワークを選択します。
  7. [サブネット] で、[すべて選択] を選択します。
  8. [有効化] をクリックします。
  9. [保存] を選択して変更を保存します。

トラブルシューティング

エラー: IllegalArgumentException: スコープがあるシークレットが存在しません: KeyVaultScope と key

このエラーは、おそらく次のことを意味します。

  • コードで参照される Databricks でサポートされるスコープが無効です。

この記事の手順 4 でシークレットの名前を確認します。

エラー: com.databricks.common.client.DatabricksServiceHttpClientException: INVALID_STATE: Databricks が keyvault にアクセスできませんでした

このエラーは、おそらく次のことを意味します。

  • コードで参照される Databricks でサポートされるスコープが無効です。 または、キー コンテナーに格納されているシークレットの有効期限が切れています。

手順 3 を調べて、Azure Key Vault シークレットが有効であることを確認します。 この記事の手順 4 でシークレットの名前を確認します。

エラー: ADAuthenticator$HttpException: HTTP Error 401: トークンが AzureAD 応答からトークンを取得できませんでした

このエラーは、おそらく次のことを意味します。

  • サービス プリンシパルのクライアント シークレット キーの有効期限が切れています。

この記事の手順 2 に従って新しいクライアント シークレットを作成し、Azure Key Vault 内のシークレットを更新します。

リソース