Azure角色分配- BadRequestFormat

tvmytwxo  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(149)

我想创建一个存储帐户,并向Azure devops管道服务连接的服务主体添加角色分配,以便它能够读取blob存储中的文件。
我已经在注册表中有一个bicep模块,用于创建存储帐户-这个模块使用得很好,所以这不是问题所在。
我的二头肌是:

var storageAccountName = 'st${baseResourceNameAlpha}'
module storageAccount 'br:urlhere.azurecr.io/bicep/modules/storageaccount:v22.10.03.02' = {
  name: 'storageAccountDeployment'
  params: {
    name: storageAccountName
  }
}

resource storageAc 'Microsoft.Storage/storageAccounts@2022-05-01' existing = {
  name: storageAccountName
}
//corrected blobReaderRole thanks to comment from Thomas
//    var blobReaderRole = '2a2b9908-6ea1-4ae2-8e65-a410df84e7d1'
var blobReaderRole =  subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '2a2b9908-6ea1-4ae2-8e65-a410df84e7d1')
var principalId = 'principal id of my dev ops svc conn'

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  scope: storageAc
  name: guid(storageAc.id, principalId, blobReaderRole)
  properties: {
    roleDefinitionId: blobReaderRole
    principalId: principalId
    principalType: 'ServicePrincipal'
  }
}

这会产生以下错误:

BadRequestFormat The request was incorrectly formatted

有人知道我哪里做错了吗?
此外,目前我从Azure门户的企业应用程序页面获取svc连接的主体ID。Get-AzADUser -UserPrincipalName似乎不适用于服务主体。是否有其他方法?

rxztt3cl

rxztt3cl1#

roleDefinitionId属性必须是角色定义的resourceId

roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '2a2b9908-6ea1-4ae2-8e65-a410df84e7d1')

此外,principalId属性需要是服务主体的objectId,而不是应用程序的objectId。您无法使用纯bicep/arm来获得它。关于这一点,存在一个未解决的问题:

在部署二头肌模板之前,您可以使用Az CLI或Az Powershell查找它,并将其作为模板的参数传递:

$appId = (az account show | ConvertFrom-Json).user.name
$principalId = (az ad sp show --id $appId | ConvertFrom-Json).id

相关问题