Azure DatabricksでKey Vaultにアクセスしようとすると「com.databricks.common.client.DatabricksServiceHttpClientException: PERMISSION_DENIED」エラーが発生する

こんにちは。

問題

DatabricksからAzure Data Lake Storage Gen2のデータを読み取るために、以下のチュートリアルに沿って、アクセス許可の構成を進めていたところ、DatabricksからKey VaultにPermission Deniedで接続できない事象が発生。

https://learn.microsoft.com/ja-jp/azure/databricks/getting-started/connect-to-azure-storage

com.databricks.common.client.DatabricksServiceHttpClientException: PERMISSION_DENIED: Invalid permissions on the specified KeyVault https://keyvault013.vault.azure.net/. Wrapped Message: Status code 403, "{"error":{"code":"Forbidden","message":"Caller is not authorized to perform action on resource.\r\nIf role assignments, deny assignments or role definitions were changed recently, please observe propagation time.....

Key Vault側のアクセス許可も問題なさそうなのに・・・

原因と解決方法

別の記事にこんな記載があった。

https://learn.microsoft.com/ja-jp/azure/databricks/security/secrets/secret-scopes#configure-your-azure-key-vault-instance-for-azure-databricks

 Azure ロールベースのアクセス制御アクセス許可モデルは、現在 Azure Databricks ではサポートされていません。

Key Vault側のアクセス制御は、RBACベースのものと、ACLベースのものが選択できますが、Databricksでは現在ACLベースのアクセス制御のみサポートしているとのこと。

チュートリアルのページにも書いてて欲しかった・・・笑 地味に時間くった・・・

Key Vaultのアクセス制御をACLベースに変更すると、Databricks側でスコープを作成したことによって自動的に追加されたアクセスポリシーの設定が確認できるようになり、

KeyVaultシークレットの参照も成功するようになった・・

Key Vaultの推奨は現在RBACベースのアクセス制御でもあるので、Databricksの方も対応して欲しいな・・とはいえ、Databricksから外部ストレージへの接続は、Unity Catalog経由が推奨され始めているので、このサービスプリンシパル経由の接続もそのうち使う必要がなくなっていくかもですが・・

同じ問題にぶち当たっていた方の助けになれば幸いです。

おしまい

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。