#azure #powershell #claims-based-identity #azure-bicep
Вопрос:
У меня есть ниже в качестве шаблона бицепса, я хочу использовать соединение на основе идентификации, как я могу построить шаблон соответствующим образом.
Я использовал руководство здесь https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/quickstart-create-bicep-use-visual-studio-code?tabs=PowerShell , для развертывания.
New-AzResourceGroup -Name exampleRG -Location eastus
New-AzResourceGroupDeployment -ResourceGroupName exampleRG -TemplateFile ./main.bicep -storageName "{your-unique-name}"
Но я получаю ошибку при обращении к файлу шаблона — Код=Недопустимое развертывание; Сообщение=Развертывание шаблона «бицепс»
недопустимо в соответствии с процедурой проверки
var baseName = uniqueString('identityRepro', subscription().id)
var location = 'uksouth'
resource stg 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: baseName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
resource asp 'Microsoft.Web/serverfarms@2019-08-01' = {
name: baseName
location: location
sku: {
name: 'Y1'
tier: 'Dynamic'
}
}
resource ai 'Microsoft.Insights/components@2015-05-01' = {
name: baseName
location: location
kind: 'web'
properties: {
Application_Type: 'web'
}
}
resource fa 'Microsoft.Web/sites@2019-08-01' = {
name: baseName
location: location
identity: {
type: 'SystemAssigned'
}
properties: {
serverFarmId: asp.id
}
kind: 'functionapp'
resource appSettings 'config@2018-11-01' = {
name: 'appsettings'
properties: {
'AzureWebJobsStorage__accountName': stg.name
'FUNCTIONS_WORKER_RUNTIME': 'powershell'
'FUNCTIONS_WORKER_RUNTIME_VERSION': '~7'
'APPINSIGHTS_INSTRUMENTATIONKEY': ai.properties.InstrumentationKey
}
}
}
resource blobContrib 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
name: guid(fa.name, stg.name, 'ba92f.........d-a403-e96b0029c9fe')
properties: {
principalId: fa.identity.principalId
roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', 'ba92f.......-a403-e96b0029c9fe')
principalType: 'ServicePrincipal'
}
scope: stg
}
Комментарии:
1. Вы проверили вкладку Развертывания в группе ресурсов? Обычно в нем есть более подробные ошибки.
2. Ошибки проверки находятся на вкладке Журнал доступа, проверьте там.
3. Я не могу развернуть его из кода visual studio. Ошибка: Код=Недопустимое развертывание; Сообщение=Развертывание шаблона «бицепс» недопустимо в соответствии с процедурой проверки.
4. Не имеет значения, откуда вы развертываетесь. На портале Azure в журнале действий вы увидите свою попытку проверки, и там может быть более подробная ошибка, объясняющая, почему проверка не удалась.
Ответ №1:
Я думаю, что ваша проблема заключается в идентификаторе роли. Роли определяются на уровне подписки, а не в группе ресурсов. В вашем коде вместо функции resourceId используйте subscriptionResourceId.
Обновление: поскольку вы подробнее разъяснили проблему с github, ваша дополнительная проблема заключалась в том, как создается имя. uniqueString
функция генерирует псевдослучайную строку (хэш) на основе начального значения — параметров, которые вы предоставляете функции. когда вы даете точно такие же значения — вы получите тот же результат.
Приведенный ниже код работает для меня
var baseName = uniqueString(resourceGroup().id)
var location = 'uksouth'
resource stg 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: baseName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
resource asp 'Microsoft.Web/serverfarms@2019-08-01' = {
name: baseName
location: location
sku: {
name: 'Y1'
tier: 'Dynamic'
}
}
resource ai 'Microsoft.Insights/components@2015-05-01' = {
name: baseName
location: location
kind: 'web'
properties: {
Application_Type: 'web'
}
}
resource fa 'Microsoft.Web/sites@2019-08-01' = {
name: baseName
location: location
identity: {
type: 'SystemAssigned'
}
properties: {
serverFarmId: asp.id
}
kind: 'functionapp'
resource appSettings 'config@2018-11-01' = {
name: 'appsettings'
properties: {
'AzureWebJobsStorage__accountName': stg.name
'FUNCTIONS_WORKER_RUNTIME': 'powershell'
'FUNCTIONS_WORKER_RUNTIME_VERSION': '~7'
'APPINSIGHTS_INSTRUMENTATIONKEY': ai.properties.InstrumentationKey
}
}
}
resource blobContrib 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
name: guid(fa.name, stg.name, 'ba92f5b4-2d11-453d-a403-e96b0029c9fe')
properties: {
principalId: fa.identity.principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe')
principalType: 'ServicePrincipal'
}
scope: stg
}
В вашем коде используйте resourceGroup().id
в качестве uniqueString
параметра — поскольку он содержит уникальный идентификатор guid вашей подписки и имя группы ресурсов, которое должно быть уникальным в подписке — ваш хэш также должен быть уникальным. предоставление только subscription().id
создаст одну и ту же строку для всех развертываний в этой подписке и группе ресурсов в ней.
Комментарии:
1. Спасибо вам за комментарий. Но я все еще получаю те же ошибки.
2. Я взял ваш код и развернул его в RG — и все прошло нормально. Однако — вы развертываетесь в группе чистых ресурсов или у вас есть какие-то ресурсы в ней?
3. Я перехожу на новый RG
4. смотрите мой обновленный ответ, основанный на вводе, который вы предоставили на github.
5. Я не уверен в шаблонах, я обратился к пользователям по поводу предупреждения, мне нужно будет найти способ понять, что такое пользовательская роль. здесь идентификатор, который я использую, — это идентификатор подписки