【Azure环境】使用ARM Template部署Policy模板时候报错不支持filed函数: The template function 'field' is not valid.

简介: 在ARM模板中部署Azure Policy时,若策略使用`field()`函数会报错:“模板函数'field'无效”。解决方法是将`[field('name')]`改为`[[field('name')]`,通过双重中括号避免ARM引擎解析,交由Policy引擎在评估时处理,从而成功部署。

问题描述

Azure Policy可以帮助治理Azure上的资源, 也可以通过ARM 模板部署。只是当Policy中包含了field 函数的时候,会出现错误!

"parameters": {
    "keyVaultName": {
        "value": "[field('name')]"
    }
    }

错误信息:

Unable to process template language expressions for resource '/subscriptions/xx-x-x-xxx/providers/Microsoft.Authorization/policyDefinitions/xxxxxxxx' at line '38' and column '9'. 'The template function 'field' is not valid. Please see https://aka.ms/arm-functions for usage details.'. Click here for details

 

部署错误截图:

但是Policy Rule中又必须使用field 方法,如果通过ARM Template来部署Policy,是否又办法使得ARM模板部署成功呢?

 

问题解答

当然可以解决这个问题。 为 [field('name')] 添加一个嵌套的中括号 [ 就可以解决这个问题。

在ARM Template的正确使用方式为:

"KeyVaultName": {
    "value": "[[field('name')]"
}

这样做的原理是:

  • field() 函数是 Azure Policy 的专用函数,用于引用正在评估的资源的属性(如名称、类型、标签等)。
  • 在 ARM 模板中,field() 并不是一个有效的函数,因此直接写 [field('name')] 会导致部署失败,提示 “The template function 'field' is not valid”。

为什么 [[field('name')] 能生效呢?

  • 如果写的是 [[field('name')],ARM 模板引擎会识别这是一个嵌套表达式,不会尝试解析它,而是将其原样传递给 Azure Policy 引擎。
  • Azure Policy 引擎在策略评估阶段才会解析 field(),此时它是合法的。

 

参考资料

GitHub ARM Template Example : https://github.com/Azure/Azure-Lighthouse-samples/blob/master/templates/policy-enforce-keyvault-monitoring/enforceAzureMonitoredKeyVault.json

 


当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
API C++
【Azure 环境】VS Code登录China Azure(Function)报错 An error occurred while signing in: invalid_request - AADSTS65002
An error occurred while signing in: invalid_request - AADSTS65002: Consent between first party application 'c27c220f-ce2f-4904-927d-333864217eeb' and first party resource '797f4846-ba00-4fd7-ba43-dac1f8f63013' must be configured via preauthorization - applications owned and operated by Microsoft mus
540 13
|
存储 安全 数据安全/隐私保护
【Azure Function App】在Function App中使用System Managed Identity访问Storage Account
本文介绍了如何在Azure Function中使用托管身份(Managed Identity)替代AzureWebJobsStorage连接函数应用到存储账户,以提高安全性并减少Access Key的使用。具体步骤包括:1) 启用系统分配的身份;2) 为函数应用授予存储访问权限,添加必要角色(如Storage Blob Data Contributor);3) 配置`AzureWebJobsStorage__blobServiceUri`参数指定Blob Service Uri。完成后删除旧配置,即可通过Managed Identity访问Storage Account。
482 20
|
11月前
|
数据安全/隐私保护
【Azure Function App】PowerShell Function 执行 Get-AzAccessToken 的返回值类型问题:System.String 与 System.Security.SecureString
将PowerShell Function部署到Azure Function App后,Get-AzAccessToken返回值类型在不同环境中有差异。正常为SecureString类型,但部分情况下为System.String类型,导致后续处理出错。解决方法是在profile.ps1中设置环境变量$env:AZUREPS_OUTPUT_PLAINTEXT_AZACCESSTOKEN=false,以禁用明文输出。
269 1
|
JSON 数据格式
【Azure 环境】当一个Azure Function资源创建很久了,是否可以获取到它的创建时间呢?
用户在尝试获取 Azure Function App 的创建时间时发现,资源 JSON 中缺少 `createdTime` 字段,仅能查看到 `lastModifiedTime`。同时,活动日志和 Azure Resource Graph 查询也未能提供创建时间信息。经解答,Azure 并未为所有资源类型记录创建时间,建议在部署时将创建时间作为标签记录。若创建时间在 90 天内,可通过部署日志间接获取。
334 7
|
Kubernetes 应用服务中间件 nginx
鲲鹏Arm+麒麟V10,国产化信创 K8s 离线部署保姆级教程
Rainbond V6 国产化部署教程,针对鲲鹏 CPU + 麒麟 V10 的离线环境,手把手教你从环境准备到应用上线,所有依赖包提前打包好,步骤写成**傻瓜式**操作指南。别说技术团队了,照着文档一步步来,让你领导来都能独立完成部署。
鲲鹏Arm+麒麟V10,国产化信创 K8s 离线部署保姆级教程
|
前端开发 iOS开发 MacOS
macOS 13+ ARM版电脑零接触部署问题解决方法
macOS 13+ ARM版电脑使用MDM工具零接触部署
|
网络协议 API 网络安全
【Azure Function App】发现部分请求Function App遇见 403.72 报错(请求Body>100KB)
在调用Azure Function的HTTP Trigger时,发送POST请求偶尔出现403错误,且响应为空、Header信息少。经排查发现,当请求Body大于100KB时会触发403.72错误,原因是启用了“Client Certificate mode”为“Optional Interactive User”。解决方法是将该模式设置为“Ignore”。由于TLS重新协商机制限制,大请求体无法正常处理,导致此问题。
375 1
|
安全 Linux 开发工具
【Azure Function】分享把Function App从.NET 6.0升级到.NET 8.0 Isolated的步骤
本文介绍了将Azure Function App从.NET 6.0升级到.NET 8.0 Isolated的步骤。.NET 6.0作为长期支持版本,生命周期至2024年11月结束。为确保持续支持,建议升级至更新版本。升级步骤包括安装.NET 8 SDK、更新Azure Functions Core Tools、修改项目文件目标框架为net8.0、更新兼容的NuGet包、本地测试以及重新发布到Azure。更多详细信息可参考官方文档。
539 9
|
消息中间件 数据可视化 Kafka
docker arm架构部署kafka要点
本内容介绍了基于 Docker 的容器化解决方案,包含以下部分: 1. **Docker 容器管理**:通过 Portainer 可视化管理工具实现对主节点和代理节点的统一管理。 2. **Kafka 可视化工具**:部署 Kafka-UI 以图形化方式监控和管理 Kafka 集群,支持动态配置功能, 3. **Kafka 安装与配置**:基于 Bitnami Kafka 镜像,提供完整的 Kafka 集群配置示例,涵盖 KRaft 模式、性能调优参数及数据持久化设置,适用于高可用生产环境。 以上方案适合 ARM64 架构,为用户提供了一站式的容器化管理和消息队列解决方案。
1279 10
|
存储 网络协议 网络安全
【Azure 环境】部署ARM Linked Template时候 Blob SAS Token不能正常工作
Unable to retrieve url https://<stroage account name>.blob.core.chinacloudapi.cn/arm/azuredeploy.json?sp=r 'st' is not recognized as an internal or external command, operable program or batch file. 'se' is not recognized as an internal or external command, operable program or batch file. 'spr' is no
315 1