Azure托管应用部署中,如何在App Service使用Key Vault证书?
解决方案
要在ARM模板中动态获取Microsoft Azure App Service资源提供商服务主体的ObjectId,可通过以下方式实现:
- 利用ARM模板的
tenantResourceId函数构造服务主体的租户级资源ID,结合reference函数查询其ObjectId。该方法会在部署时自动适配当前客户租户的环境,无需硬编码固定值。
修改后的Key Vault资源模板如下:
resource keyVault 'Microsoft.KeyVault/vaults@2023-02-01' = { name: keyVaultName location: location properties: { enabledForDeployment: false enabledForDiskEncryption: false enabledForTemplateDeployment: true enableRbacAuthorization: false tenantId: tenantId enableSoftDelete: true softDeleteRetentionInDays: 90 sku: keyVaultSku networkAcls: { defaultAction: 'Allow' bypass: 'AzureServices' } accessPolicies:[ { objectId: keyVaultReferenceIdentity.properties.principalId permissions: { certificates: [ 'get', 'list', 'getissuers', 'listissuers', 'update', 'create', 'import' ] keys: [ 'get', 'list', 'decrypt', 'unwrapKey', 'verify', 'getrotationpolicy', 'update', 'create', 'import' ] secrets: [ 'get', 'list', 'set' ] } tenantId: tenantId } { objectId: reference(tenantResourceId('Microsoft.AAD/servicePrincipals', 'abfa0a7c-a6b6-4736-8310-5855508787cd'), '2022-09-01').id permissions:{ certificates: ['get'] secrets:['get'] } tenantId: tenantId } ] } } resource keyVaultReferenceIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = { name: keyVaultReferenceIdentityName location: location }
关键说明
tenantResourceId函数:用于生成租户级资源(服务主体)的唯一ID,格式为tenantResourceId('资源类型', '资源标识符'),这里资源类型是Microsoft.AAD/servicePrincipals,资源标识符是已知的App Service RP的applicationId。reference函数:通过服务主体的资源ID查询其属性,id字段即为所需的ObjectId。需指定对应的API版本(如2022-09-01),确保查询有效。- 权限适配:此方法会在客户租户部署时自动获取对应服务主体的ObjectId,完美适配不同租户的差异。
内容的提问来源于stack exchange,提问作者renrutsirhc
相关产品推荐
相关产品推荐

