チュートリアル: Azure Databricks と Azure Key Vault を使用して Azure Blob Storage にアクセスする

このチュートリアルでは、Azure Key Vaultに格納されているストレージ アカウント キーを使用して、Azure DatabricksからAzure Blob Storageにアクセスします。

Important

ストレージ アカウント キーのアクセスは従来のパターンです。 新しいワークロードの場合は、(Unity カタログの資格情報または OAuth を使用する ABFS マウントを使用して) Azure DatabricksでMicrosoft Entra ID承認を使用し、ストレージ アカウントで共有キーの承認を無効にします。 Entra ID承認により、ストレージ アカウント キーを格納またはローテーションする必要がなく、きめ細かい監査が提供されます。 この記事の手順は、共有キー アクセスを引き続き使用するストレージ アカウントに対して有効なままです。

このチュートリアルでは、次の操作を行います。

  • Azure CLIを使用してストレージ アカウントと BLOB コンテナーを作成します。
  • キー コンテナーを作成し、シークレットを設定します。
  • Azure Databricks ワークスペースを作成し、Key Vaultシークレット スコープを追加します。
  • Azure Databricks ワークスペースから BLOB コンテナーにアクセスします。

前提条件

Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

このチュートリアルを開始する前に、 Azure CLI をインストールします。

Azure CLI を使用してストレージ アカウントと BLOB コンテナーを作成する

BLOB を使用する汎用ストレージ アカウントを作成します。 リソース グループがない場合は、コマンドを実行する前に作成します。 次のコマンドは、ストレージ アカウントを作成し、そのメタデータを表示します。 ID 値をコピーします。

az storage account create --name <storage-account-name> --resource-group <resource-group> --location <location> --sku Standard_ZRS --encryption-services blob

上記のコマンドのコンソール出力。エンド ユーザーが表示できるように、ID が緑色で強調表示されています。

BLOB をアップロードするコンテナーを作成する前に、 ストレージ BLOB データ共同作成者 ロールを自分に割り当てます。 この例では、前に作成したストレージ アカウントにロールが割り当てられます。

az role assignment create --role "Storage Blob Data Contributor" --assignee <user-principal-name> --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>

ロールを割り当てたら、Blob 用のコンテナーを作成します。

az storage container create --account-name <storage-account-name> --name <container-name> --auth-mode login

コンテナーが作成されたら、BLOB (選択したファイル) をそれにアップロードします。 この例では、 helloworld を含む .txt ファイルがアップロードされます。

az storage blob upload --account-name <storage-account-name> --container-name <container-name> --name helloworld --file helloworld.txt --auth-mode login

確認するコンテナー内の BLOB を一覧表示します。

az storage blob list --account-name <storage-account-name> --container-name <container-name> --output table --auth-mode login

上記のコマンドのコンソール出力。コンテナーに格納されたファイルが表示されます。

次のコマンドを使用して、ストレージ アカウントの key1 値を取得します。 値をコピーします。

az storage account keys list -g <resource-group> -n <storage-account-name>

上記のコマンドのコンソール出力。key1 の値は緑色のボックスで強調表示されています。

キー コンテナーを作成してシークレットを設定する

次のコマンドを使用してキー コンテナーを作成します。 このコマンドは、キー コンテナーのメタデータも表示します。 IDvaultUri の値をコピーします。

az keyvault create --name <vault-name> --resource-group <resource-group> --location <location> --enable-rbac-authorization true --enable-purge-protection true

上記のコマンドのイメージ コンソール出力。ID と vaultUri の両方が緑色で強調表示され、ユーザーに表示されます。

シークレットを作成するには、次のコマンドを使用します。 シークレットの値をストレージ アカウントの key1 値に設定します。

az keyvault secret set --vault-name <vault-name> --name storageKey --value "value of your key1"

Azure Databricks ワークスペースを作成し、Key Vaultシークレット スコープを追加する

このセクションには、Azure ポータルが必要です。 これは次の目的で使用されます。

  1. Azure Databricks リソースを作成します。
  2. ワークスペースを起動します。
  3. Key Vaultに基づくシークレット スコープを作成します。

Azure Databricks ワークスペースから BLOB コンテナーにアクセスする

このセクションは、Azure Databricks ワークスペースで完了しています。 ワークスペースで次の手順を実行します。

  1. 新しい クラスターを作成します。
  2. 新しい ノートブックを作成します。
  3. Python スクリプトの対応するフィールドに入力します。
  4. Python スクリプトを実行します。
dbutils.fs.mount(
source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net",
mount_point = "/mnt/<mount-name>",
extra_configs = {"<conf-key>":dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")})

df = spark.read.text("/mnt/<mount-name>/<file-name>")

df.show()

次のステップ

Key Vault が回復可能であることを確認します。