Linter 规则 - 没有硬编码的环境 URL

此规则查找因云环境而异的任何硬编码 URL。

Linter 规则代码

请在 Bicep 配置文件中使用以下值自定义规则设置:

no-hardcoded-env-urls

解决方案

使用环境函数在部署期间动态获取这些 URL,而不是在 Bicep 文件中硬编码 URL。 环境函数根据要部署到的云环境返回不同的 URL。

下面的示例未通过此测试,因为 URL 已进行硬编码。

var managementURL = 'https://management.chinacloudapi.cn'

与 concat 或 uri 一起使用时,此测试也会失败。

var galleryURL1 = concat('https://','gallery.azure.com')
var galleryURL2 = uri('gallery.azure.com','test')

可以通过将硬编码 URL 替换为 environment() 函数来修复此问题。

var galleryURL = environment().gallery

在某些情况下,可以通过从已部署的资源获取属性来修复此问题。 例如,使用 .properties.primaryEndpoints 检索终结点,而不是为存储帐户构造终结点。

param storageAccountName string

resource sa 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: storageAccountName
  location: 'chinanorth'
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

output endpoint string = sa.properties.primaryEndpoints.web

配置

默认情况下,此规则使用以下设置来确定 Azure 中国云中不允许使用哪些 URL。

"analyzers": {
  "core": {
    "verbose": false,
    "enabled": true,
    "rules": {
      "no-hardcoded-env-urls": {
        "level": "warning",
        "disallowedhosts": [
          "gallery.azure.com",
          "management.core.chinacloudapi.cn",
          "management.chinacloudapi.cn",
          "database.chinacloudapi.cn",
          "core.chinacloudapi.cn",
          "login.chinacloudapi.cn",
          "microsoftgraph.chinacloudapi.cn",
          "trafficmanager.cn",
          "datalake.chinacloudapi.cn",
          "azuredatalakestore.net",
          "azuredatalakeanalytics.net",
          "vault.azure.cn",
          "api.loganalytics.io",
          "asazure.chinacloudapi.cn",
          "region.asazure.chinacloudapi.cn",
          "batch.core.chinacloudapi.cn"
        ],
        "excludedhosts": [
          "schema.management.azure.com"
        ]
      }
    }
  }
}

可以通过添加 bicepconfig.json 文件并应用新设置来自定义它。

后续步骤

有关 Linter 的详细信息,请参阅使用 Bicep Linter