分享方式:


Linter 規則 - 沒有硬式編碼的環境 URL

此規則會尋找依雲端環境而有所不同的硬式編碼 URL。

Linter 規則程式碼

使用 Bicep 設定檔中的下列值來自訂規則設定:

no-hardcoded-env-urls

解決方案

與其使用 Bicep 檔案中的硬式編碼 URL,您可使用環境函式在部署期間動態取得這些 URL。 環境函式會根據要部署的雲端環境而傳回不同 URL。

下列範例會導致此測試失敗,因為 URL 為硬式編碼。

var managementURL = 'https://management.azure.com'

使用 concat 或 uri 時,測試也會失敗。

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

您可使用 environment() 函式來取代硬式編碼的 URL,以修正此問題。

var galleryURL = environment().gallery

在某些情況下,從已部署的資源取得屬性也可修正此問題。 例如,不是建立儲存體帳戶的端點,而是使用 .properties.primaryEndpoints 來擷取。

param storageAccountName string
param location string = resourceGroup().location

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

output endpoint string = sa.properties.primaryEndpoints.web

組態

依預設,此規則會使用下列設定來判斷不允許的 Url。

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

您可新增 bicepconfig.json 檔案並套用新的設定,以進行自訂。

下一步

如需 Linter 的詳細資訊,請參閱使用 Bicep Linter