You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AZ CLI创建服务主体时Key Vault未生成证书问题

问题描述

运行以下PowerShell脚本:

Write-Host "Creating KeyVault..."

az keyvault create --name mykeyvault --resource-group myrg --location polandcentral

Write-Host "Creating service principal..."

az ad sp create-for-rbac --name mysp --role contributor --scopes "/subscriptions/subscriptionid/resourceGroups/myrg" --create-cert --cert mycert --keyvault mykeyvault

执行后Key Vault和服务主体已创建,但az ad sp create-for-rbac命令的--create-cert、--cert、--keyvault三个参数未生效:

  • 在Azure门户查看Key Vault,发现其为空;
  • 服务主体创建命令输出如下,与预期的使用Key Vault生成证书的输出不符:
{
"appId": "...",
"displayName": "mysp",
"password": "...",
"tenant": "..."
}

补充输出信息
az ad sp create-for-rbac命令执行时返回:

Found an existing application instance: (id) <here goes the guid>. We will patch it.
Creating 'contributor' role assignment under scope '/subscriptions/<sub_guid>'
  Role assignment already exists.

请问哪里操作出错了?


问题原因与解决办法

核心原因

同名的服务主体(SP)和对应Azure AD应用已存在。使用az ad sp create-for-rbac指定已存在的--name时,命令仅会对现有应用做补丁更新,不会执行创建证书并存储到Key Vault的操作——这三个证书相关参数仅在首次创建新服务主体/应用时生效。

解决步骤

  1. 清理现有同名资源
    先删除已存在的服务主体和对应Azure AD应用,确保后续创建全新实例:

    # 获取现有服务主体ID
    az ad sp list --display-name mysp
    # 删除服务主体
    az ad sp delete --id <上述命令返回的appId>
    # 删除对应Azure AD应用
    az ad app delete --id <现有应用的guid>
    
  2. 重新执行脚本
    清理完成后,再次运行原脚本,此时命令会创建全新服务主体,同时触发证书生成逻辑,将mycert存入指定的Key Vault。

  3. 验证结果
    执行完成后:

    • 登录Azure门户查看Key Vault的「证书」列表,可找到mycert;
    • 服务主体的输出会包含证书相关字段,不再返回密码信息。

替代方案

如果不想删除现有服务主体,可改用全新的名称执行az ad sp create-for-rbac命令,创建一个带证书的新服务主体。


内容的提问来源于stack exchange,提问作者Marek M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:13:09