如何创建Azure策略以阻止Azure存储账户中队列(Queue)的创建?
如何创建Azure策略以阻止Azure存储账户中队列(Queue)的创建?
我明白你现在遇到的困扰——明明写了策略却拦不住队列的创建,这确实挺让人头疼的。咱们来一步步解决这个问题:
首先,你之前的策略没生效的核心原因是资源类型匹配错了:
你用的Microsoft.Storage/storageAccounts/queueServices其实是存储账户里的「队列服务」基础资源(每个存储账户默认会附带这个服务框架),而不是你实际要阻止的「具体队列实例」。当你创建新队列时,对应的资源类型是Microsoft.Storage/storageAccounts/queueServices/queues,这才是你需要精准匹配的目标。
给你调整后的完整策略定义,直接用这个应该就能生效:
resource policyBlockResourceTypes 'Microsoft.Authorization/policyDefinitions@2020-09-01' = { name: '${policyConfigurations.policyBlockResourceTypes.name} - block-storage-queues' properties: { displayName: '[${policyConfigurations.policyBlockResourceTypes.name}] Block Storage Account Queues' policyType: 'Custom' mode: 'All' description: 'Policy to allow Storage Accounts but deny creation of Queues within them; Blob and File resources are permitted.' metadata: policyConfigurations.policyBlockResourceTypes.metadata policyRule: { if: { field: 'type' equals: 'Microsoft.Storage/storageAccounts/queueServices/queues' } then: { effect: 'deny' } } } }
另外还有几个需要注意的细节:
- 策略分配后别着急测试,通常需要等待5-10分钟让策略在Azure中完全生效;
- 确保策略分配的范围覆盖了你要管控的存储账户所在的订阅/资源组;
- 如果你还想同时阻止创建队列服务本身(不过默认存储账户创建时不会自动生成这个服务,只有第一次使用队列时才会触发创建),可以把匹配规则改成
like: 'Microsoft.Storage/storageAccounts/queueServices*',这样就能覆盖队列服务和所有队列实例。
如果还是有问题,可以检查一下策略分配的合规性报告,看看有没有相关的资源被标记出来,或者确认创建队列的操作是否真的触发了策略评估。
备注:内容来源于stack exchange,提问作者FerdiS
相关产品推荐
相关产品推荐

