如何解决C#创建Azure Cognitive Service资源时返回Forbidden错误的问题
报错原因与解决步骤
你遇到的Forbidden报错核心是身份凭据没有足够权限执行认知服务资源创建操作,按以下步骤排查修复即可:
1 检查服务主体权限
你用于创建资源的服务主体,必须在目标资源组/订阅下拥有至少认知服务参与者或更高的「参与者」角色权限:
- 进入Azure门户,打开对应订阅/目标资源组的「访问控制(IAM)」页
- 点击「角色分配」,搜索你的服务主体名称,确认权限配置正确
- 如果没有对应权限,让订阅管理员为你添加角色分配
2 确认订阅已注册认知服务资源提供程序
未注册Microsoft.CognitiveServices资源提供程序也会触发403错误:
- 进入Azure门户订阅页,左侧菜单找到「资源提供程序」
- 搜索
Microsoft.CognitiveServices,若状态为未注册,点击「注册」,等待注册完成即可 - 也可以通过Azure CLI执行命令完成注册:
az provider register --namespace Microsoft.CognitiveServices
3 验证创建参数合法性
你当前使用的v7.0.0版本NuGet包对参数校验比较严格,需确认以下参数正确:
kind参数必须和你要创建的认知服务类型匹配,例如文本分析是TextAnalytics、计算机视觉是ComputerVision,非法的kind值会触发权限类报错sku参数需要和kind匹配,例如F0免费层、S0标准层,不存在的SKU会创建失败- 你指定的
location区域必须支持对应kind的认知服务,部分区域不支持特定服务类型
4 修正后的代码示例
// 初始化凭据 var credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal( ServicePrincipalApplicationId, ServicePrincipalSecret, TenantId, AzureEnvironment.AzureGlobalCloud); // 初始化认知服务管理客户端,显式指定管理端地址避免默认配置错误 var client = new CognitiveServicesManagementClient(new Uri("https://management.azure.com/"), credentials) { SubscriptionId = SubscriptionId }; // 构造创建参数 var properties = new CognitiveServicesAccountProperties(customSubDomainName: model.SubDomain); var sku = new Sku(accountTier); var parameters = new CognitiveServicesAccount( location: location, sku: sku, kind: kind, properties: properties); parameters.Validate(); // 优先使用异步创建方法,避免同步方法的潜在适配问题 var result = await client.Accounts.CreateAsync(ResourceGroupName, resourceName, parameters);
内容的提问来源于stack exchange,提问作者user3079834
相关产品推荐
相关产品推荐

