我已在 Azure DevOps 中创建了一个 YAML 管道,以使用以下任务部署 Azure 数据工厂:
- task: deploy-adf-json@2
inputs:
azureSubscription: '<subscription name>'
ResourceGroupName: '<rg name>'
DatafactoryName: '<adf name>'
ServicePath: '$(System.ArtifactsDirectory)/adf/linkedService'
PipelinePath: '$(System.ArtifactsDirectory)/adf/pipeline'
TriggerPath: '$(System.ArtifactsDirectory)/adf/trigger'
Sorting: 'ascending'
但是,除了一个触发器之外,所有内容都部署成功,为此我收到以下错误:
##[错误]部署“Storage_Account_Trigger”触发器时出错:对象 ID 为“对象 id”的客户端“客户端 id”有权在范围“/”上执行操作“Microsoft.DataFactory/factories/triggers/write”订阅/“订阅 ID”/resourceGroups/“rg 名称”/providers/Microsoft.DataFactory/factories/“adf 名称”/triggers/Storage_Account_Trigger';但是,它无权在链接范围 '/subscriptions/"subscription id"/resourceGroups/"rg name"/providers/Microsoft.Storage 上执行操作 'Microsoft.EventGrid/EventSubscriptions/Write' /storageAccounts/“存储帐户名称”(分别)或链接的范围无效。
触发器旨在每当在存储帐户中的特定文件路径创建新的 CSV 文件时运行特定管道。触发器的代码是:
{
"name": "Storage_Account_Trigger",
"properties": {
"annotations": [],
"runtimeState": "Started",
"pipelines": [
{
"pipelineReference": {
"referenceName": "PL_Ingest",
"type": "PipelineReference"
}
}
],
"type": "BlobEventsTrigger",
"typeProperties": {
"blobPathBeginsWith": "<file path>",
"blobPathEndsWith": ".csv",
"ignoreEmptyBlobs": true,
"scope": "/subscriptions/<subscription id>/resourceGroups/<rg name>/providers/Microsoft.Storage/storageAccounts/<storage account name>",
"events": [
"Microsoft.Storage.BlobCreated"
]
}
}
}
根据我(有限)的理解,触发器似乎需要写入权限才能工作,而存储帐户策略不允许。我无法更改此策略,也不理解这样做的必要性,因为我不想使用触发器向存储帐户写入任何内容。我只是想阅读并确定是否有任何新的 CSV 文件。
任何有关如何解决此错误或消除对写入权限的需要的帮助将不胜感激!
谢谢!
它无权在链接范围'/subscriptions/"subscription id"/resourceGroups/"rg name"/providers/Microsoft.Storage/上执行操作'Microsoft.EventGrid/EventSubscriptions/Write' storageAccounts/"存储帐户名称"'
从错误消息来看,服务主体似乎没有创建存储事件触发器的权限。
请参阅此文档:创建一个运行管道以响应存储事件的触发器
以下任何 RBAC 设置都适用于存储事件触发器:
1.存储帐户的所有者角色
2.存储帐户的贡献者角色
3.Microsoft.EventGrid/EventSubscriptions/存储帐户 /subscriptions/####/resourceGroups/####/providers/Microsoft.Storage/storageAccounts/storageAccountName 的写入权限
由于您不想设置存储帐户的写入权限,因此可以考虑将EventGrid EventSubscription Contributor和EventGrid Contributor角色授予资源组中的服务主体(使用的Azure DevOps服务连接)(资源位于哪里)-> 访问控制