Я создаю инфраструктуру в Azure, используя BICEP для нашего корпоративного приложения. Наше приложение использует хранилища ключей для хранения и вызова секретов с помощью субъекта-службы (приложения).
Когда я создаю KV в BICEP и связываю с ним субъект-службу, он создается как составное удостоверение в политиках доступа KV. Мне нужно добавить его как «приложение», что и происходит, когда я добавляю его вручную через портал Azure.
Как добавить субъект-службу как приложение, а не как составное удостоверение?
resource accessPolicydev 'Microsoft.KeyVault/vaults/accessPolicies@2023-07-01' = {
parent: keyvaultExisting
name: 'add'
properties: {
accessPolicies: [
{
tenantId: tenantId
objectId: objectId
applicationId: applicationId
permissions: {
secrets: [
'all'
]
certificates: [
'all'
]
keys: [
'all'
]
}
}
]
}
}
согласно документации, applicationid предназначен для потока от имени: Learn.microsoft.com/en-us/azure/templates/microsoft.keyvault/…. это не идентификатор приложения вашего субъекта-службы
удалить applicationId
@Thomas, если я удалю идентификатор приложения, субъект-служба вообще не будет добавлен.
это должен быть объектный идентификатор субъекта-службы, а не идентификатор объекта регистрации приложения.
ApplicationId должен быть указан для потока от имени согласно документации, поэтому вам не следует указывать его в политике доступа.
Кроме того, идентификатор объекта должен быть идентификатором объекта службы, а не идентификатором объекта регистрации приложения.
это должно работать:
provider microsoftGraph
param applicationId string
param keyVaulName string
param tenantId string = subscription().tenantId
// Reference to the service principal
resource servicePrincipal 'Microsoft.Graph/[email protected]' existing = {
appId: applicationId
}
// Reference to key vault
resource keyVault 'Microsoft.KeyVault/vaults@2023-02-01' existing = {
name: keyVaulName
}
// Create access policy
resource accessPolicy 'Microsoft.KeyVault/vaults/accessPolicies@2023-07-01' = {
parent: keyVault
name: 'add'
properties: {
accessPolicies: [
{
tenantId: tenantId
objectId: servicePrincipal.id
permissions: {
secrets: [
'all'
]
certificates: [
'all'
]
keys: [
'all'
]
}
}
]
}
}
Вы были правы, я добавлял неправильный идентификатор объекта.
Приятно слышать, что это работает для вас
вам просто нужно указать идентификатор объекта соответствующего субъекта-службы. удалить свойство applicationId