如何通过服务主体通过 Azure Key Vault 访问 Azure 存储帐户
Posted
技术标签:
【中文标题】如何通过服务主体通过 Azure Key Vault 访问 Azure 存储帐户【英文标题】:How to access Azure storage account Via Azure Key Vault by service principal 【发布时间】:2022-01-03 20:28:43 【问题描述】:我有一个外部 Web 应用程序,它可以选择使用服务主体访问存储帐户。
我想通过外部应用程序将数据直接加载到 datalake 帐户中来访问 Azure 存储帐户/blob。
这就是我想要做的:
设置服务主体(使用 Azure AD 应用注册) 创建存储帐户并将访问密钥存储在 Azure Key Vault 中。 将服务主体机密添加到同一个密钥保管库。 在 Key Vault 中创建一个策略,让服务主体有权读取 Key Vault 中的密钥和机密。 还要在 Key Vault 中创建一个策略,让服务主体拥有访问存储帐户的参与者角色。 还将对存储帐户容器的访问权限授予服务主体。但我无法连接,也无法授权连接。
我很困惑我缺少哪些步骤来解决这个问题。
【问题讨论】:
您的外部 Web 应用程序(我假设您在这里谈论的是应用服务)是在托管标识下运行还是使用服务主体? 据我了解,您希望您的外部应用程序从您的密钥保管库中获取存储访问密钥。您的应用程序使用什么秘密来访问密钥保管库?为此,您必须与应用程序共享秘密。如果您这样做,您不妨共享该密钥并直接授予服务主体访问存储帐户的权限。这里不需要密钥库。如果您的应用程序托管在与您的存储帐户相同的 azure 租户下,那么情况就不同了。 @kane 应用程序是 'Adverity',作为使用服务原则将目标配置为 Azure blob 的选项。 @AnupamChand 我的应用程序是 SAS 产品“Adverity”,它希望将数据加载到 Azure blob,这意味着它没有托管在同一个 Azure 租户上。因此,如果这是真的,那么我已经为服务原则赋予了读取/写入存储帐户的角色......所以,他们不需要将存储访问密钥存储在密钥库中,然后从他们的服务原则中读取? 然后他们应该将服务主体机密存储在他们的应用程序中,并使用它直接访问存储帐户。无需对其进行密钥保管。他们将需要使用密钥从您的 AAD 中获取不记名令牌,然后访问存储帐户。 【参考方案1】:由于您要使用服务主体访问存储帐户,因此无需将存储帐户访问权限存储在密钥保管库中。
您可以按照服务主体访问存储帐户的步骤:
-
创建服务主体(Azure AD 应用注册)
创建存储帐户
将存储 Blob 数据参与者角色分配给服务主体
现在您将能够使用您的服务主体访问 Azure 存储 Blob 数据
注意:您不需要将服务主体客户端机密存储在密钥保管库中。因为您需要再次使用客户端密码才能首先访问密钥保管库。
【讨论】:
【参考方案2】:感谢@RamaraoAdapa-MT 这行得通
最后,我按照你说的设置, SAS -> 服务原理 -> 存储帐户权限 -> 存储帐户。
在这种情况下,不需要 Key Vault。
谢谢你们, Anupam Chand, RamaraoAdapa-MT
【讨论】:
以上是关于如何通过服务主体通过 Azure Key Vault 访问 Azure 存储帐户的主要内容,如果未能解决你的问题,请参考以下文章
Azure Databricks 通过服务主体访问 Azure Data Lake Storage Gen2