我想创建一个存储帐户,并向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似乎不适用于服务主体。是否有其他方法?
1条答案
按热度按时间rxztt3cl1#
roleDefinitionId
属性必须是角色定义的resourceId
:此外,
principalId
属性需要是服务主体的objectId,而不是应用程序的objectId。您无法使用纯bicep/arm来获得它。关于这一点,存在一个未解决的问题:在部署二头肌模板之前,您可以使用Az CLI或Az Powershell查找它,并将其作为模板的参数传递: