Linter 规则 - 嵌套部署中的安全参数
外部嵌套部署资源不应用于安全参数或 list* 函数。 可以在部署历史记录中公开安全值。
Linter 规则代码
请在 Bicep 配置文件中使用以下值自定义规则设置:
secure-params-in-nested-deploy
解决方案
将部署的 properties.expressionEvaluationOptions.scope 设置为 inner
,或者改为使用 Bicep 模块。
以下示例未通过此测试,因为在外部嵌套部署资源中引用了安全参数。
@secure()
param secureValue string
resource nested 'Microsoft.Resources/deployments@2021-04-01' = {
name: 'nested'
properties: {
mode: 'Incremental'
template: {
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
contentVersion: '1.0.0.0'
variables: {}
resources: [
{
name: 'outerImplicit'
type: 'Microsoft.Network/networkSecurityGroups'
apiVersion: '2019-11-01'
location: '[resourceGroup().location]'
properties: {
securityRules: [
{
name: 'outerImplicit'
properties: {
description: format('{0}', secureValue)
protocol: 'Tcp'
}
}
]
}
}
]
}
}
}
可以通过将部署的 properties.expressionEvaluationOptions.scope 设置为“inner”来解决此问题:
@secure()
param secureValue string
resource nested 'Microsoft.Resources/deployments@2021-04-01' = {
name: 'nested'
properties: {
mode: 'Incremental'
expressionEvaluationOptions: {
scope: 'Inner' // Set to inner scope
}
template: {
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
contentVersion: '1.0.0.0'
variables: {}
resources: [
{
name: 'outerImplicit'
type: 'Microsoft.Network/networkSecurityGroups'
apiVersion: '2019-11-01'
location: '[resourceGroup().location]'
properties: {
securityRules: [
{
name: 'outerImplicit'
properties: {
description: format('{0}', secureValue)
protocol: 'Tcp'
}
}
]
}
}
]
}
}
}
后续步骤
有关 Linter 的详细信息,请参阅使用 Bicep Linter。