azure - 使用 DefaultAzureCredential 访问具有系统托管标识的 Azure AppConfiguration
问题描述
我有一个 functionApp (V3) 正在尝试使用 DefaultAzureCredential 访问应用程序配置。我的系统管理用户已打开并具有“应用程序配置数据阅读器”角色。我在调试中本地运行它,因此需要默认凭据。我也有多个租户,所以我必须在 DefaultAzureCredentialOptions 上设置 VisualStudioTenantId 和 SharedTokenCacheTenantId。
该凭证在访问 Key vault 以获取机密时有效,但需要设置 SharedTokenCacheTenantId。
连接到应用程序配置时,我收到“服务请求失败。状态:403(禁止)。
请参见下面的代码:
public override async void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
var credOptions = new DefaultAzureCredentialOptions();
var tenantId = Environment.GetEnvironmentVariable("Tenant_Id");
credOptions.VisualStudioTenantId = tenantId;
credOptions.SharedTokenCacheTenantId = tenantId;
var cred = new DefaultAzureCredential(credOptions);
/*Works but requires SharedTokenCacheTenantId*/
var secretClient = new SecretClient(new Uri(vaultURI), cred);
var secret = await secretClient.GetSecretAsync("<secret name>");
/*Does not work - forbidden*/
builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
{
options.Connect(new Uri(appConfigURI), cred);
}).Build();
}
谢谢!
解决方案
感谢zhenlan在这里回答我的问题。我的本地 Visual Studio 用户也需要被授予“应用程序配置数据阅读器”,才能在本地调试我的代码。
推荐阅读
- sql - SQLSTATE [23000]:违反完整性约束:1048 列 'cuAddress' 不能为空
- android - 单击文本视图时加载网络视图
- haskell - 了解流媒体库中的类型
- spring-boot - EmbeddedServletContainerCustomizer 在 Spring Boot 2 中无法用于配置会话超时
- docker - 在 Windows 中,Docker 部署 .net 核心并没有正确执行
- javascript - 将 json 对象的键和值填充到动态创建的输入字段中
- ios - 定义运行 iPad 的 iPhone 应用程序的纵横比
- php - How to dynamically update my drivers/etc/hosts file using PHP script for windows?
- jenkins - Raise Abort in Jenkins Job from Batch script
- android - Android System log when cellular data is on and off