使用 Azure MSI 访问 Azure 表存储
Posted
技术标签:
【中文标题】使用 Azure MSI 访问 Azure 表存储【英文标题】:Access Azure Table Storage with Azure MSI 【发布时间】:2019-05-03 00:49:37 【问题描述】:我最近设置了我的 .net 核心应用程序以使用 MSI(托管标识)与 Azure Blob 进行通信。
MSI 是否适用于 Azure 表存储?似乎找不到任何关于它的文档。
我正在尝试使用 MSI,因此我不必再管理我的密钥(无密钥)。
【问题讨论】:
【参考方案1】:Azure 表存储不支持 MSI。表存储确实支持 Active Directory 访问。您可以在以下链接中找到支持 MSI 的服务...
https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/services-support-msi
托管标识在 Azure AD 中为 Azure 服务提供自动托管标识。你可以使用该标识向任何支持 Azure AD 身份验证的服务(包括 Key Vault)进行身份验证,而无需在代码中添加任何凭据。
https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview
【讨论】:
但它在公共预览版下的列表中有“Azure 存储”。 Azure Storage下不是Azure表吗? 嗯对不起,我想我很困惑。可以打开托管标识并使用它来对您的应用程序进行身份验证以使用 blob 存储 docs.microsoft.com/en-us/azure/storage/common/…。这对于表存储来说是不可能的吗?There is also a role for queue, but I didn't found one for table
- 将 Azure Tables 移动到 Cosmos DB 下的原因。这就是您最近没有看到对 Azure Tables 进行任何增强的原因。 Azure 存储将继续支持 Azure Tables。
尝试使用 AD 帐户访问 Azure 表存储不幸地给出了错误:System.InvalidOperationException: '此服务不支持令牌凭据。 :(
@Rthomas529 我的意思是,至少目前对于很多应用程序来说,Cosmos DB 的 Table API 不能被视为现有 Azure 表存储的“一键式”替代品,因为存在很多不兼容性而且价格也更高。【参考方案2】:
现在使用最新版本的 https://www.nuget.org/packages/Azure.Data.Tables/ (12.2.1)
您现在可以使用类似的东西创建客户端
var tableServiceClient = new TableServiceClient(uri, new efaultAzureCredential());
确保您已在 Azure 中为用户分配了正确的权限以从资源中读取
【讨论】:
以上是关于使用 Azure MSI 访问 Azure 表存储的主要内容,如果未能解决你的问题,请参考以下文章
使用 MSI 从 Azure 函数将文件写入 Azure Data Lake 时出错
无法使用应用服务上的 Azure MSI 访问 Key Vault
“用户''登录失败。”使用 EF 代码优先实现通过 MSI 访问 Azure SQL DB 时出现 SqlException
Azure 存储表访问出现无法解释的异步/等待问题 - 可以使用 ConfigureAwait(false) 解决吗?可能不是
如何使用 Microsoft.WindowsAzure.Storage.Table.CloudTableClient 授权托管标识访问 Azure 表存储