如何在Azure Key Vault中自动续订Service Principals密钥?
在Azure Key Vault中自动续订Service Principal密钥的解决方案
方案1:Azure Automation Runbook 脚本实现
前置准备
- 创建Azure Automation账户,启用系统分配托管标识,为该标识分配:
- Azure Key Vault的
Secret Get、Secret Set权限 - Azure AD的
Application.ReadWrite.OwnedBy权限(针对目标Service Principal)
- Azure Key Vault的
核心步骤
- 编写PowerShell Runbook,实现密钥轮换逻辑:
# 通过托管标识登录Azure Connect-AzAccount -Identity # 配置参数 $targetSpClientId = "替换为你的Service Principal Client ID" $keyVaultName = "替换为你的Key Vault名称" $secretName = "存储Service Principal密钥的Secret名称" $secretValidityMonths = 6 # 生成新的客户端密钥 $newCredential = New-AzADAppCredential -ApplicationId $targetSpClientId -EndDate (Get-Date).AddMonths($secretValidityMonths) # 将新密钥存入Key Vault Set-AzKeyVaultSecret -VaultName $keyVaultName -Name $secretName -SecretValue (ConvertTo-SecureString $newCredential.SecretText -AsPlainText -Force) # 清理过期密钥(可选) $oldCredentials = Get-AzADAppCredential -ApplicationId $targetSpClientId | Where-Object { $_.EndDate -lt (Get-Date).AddDays(7) } foreach ($cred in $oldCredentials) { Remove-AzADAppCredential -ApplicationId $targetSpClientId -KeyId $cred.KeyId -Force }
- 为Runbook设置定时触发器,比如在密钥过期前30天执行。
方案2:Azure Logic Apps 无代码实现
步骤
- 创建Logic App,添加
Recurrence触发器,设置触发频率(如每月1次)。 - 添加Azure AD操作
Create application password,指定目标Service Principal,设置密钥有效期。 - 添加Azure Key Vault操作
Set secret,将新生成的密钥存入指定Secret。 - (可选)添加Azure AD操作
Delete application password,清理即将过期的旧密钥。 - 为Logic App的系统分配托管标识配置对应Azure AD和Key Vault权限。
方案3:Azure AD 托管标识自动轮换(预览)
如果你的Service Principal使用系统分配/用户分配托管标识,可直接启用Azure AD的自动密钥轮换功能:
- 托管标识的密钥由Azure后台自动轮换(每60天一次)
- Key Vault中引用托管标识凭据的Secret会自动同步最新密钥,无需额外操作
- 注意:该功能目前仅针对托管标识,非托管Service Principal暂不支持原生自动轮换。
关键注意事项
- 最小权限原则:仅给执行轮换的主体分配必要权限,避免过度授权。
- 版本管理:Key Vault默认保留Secret历史版本,可配置版本保留策略以便回滚。
- 通知:可在轮换流程中添加邮件/Teams通知,确保运维人员知晓密钥更新。
内容的提问来源于stack exchange,提问作者Dimitar Grigorov
相关产品推荐
相关产品推荐

