【问题标题】:API Connection - username and password in ARM templateAPI 连接 - ARM 模板中的用户名和密码
【发布时间】:2021-03-18 21:19:33
【问题描述】:

我想在 ARM 模板中提供用户名和密码,以便它在 Azure 中部署和填充,并且可以在 Azure 门户的“编辑 API 连接”下看到。

这是 ARM 模板的一部分:

"resources": [
    {
      "type": "Microsoft.Web/connections",
      "apiVersion": "2016-06-01",
      "name": "[parameters('connections_sql_name')]",
      "location": "westeurope",
      "properties": {
        "displayName": "Test Connection Name",
        "parameterValues": {
          "server": "[parameters('sql_server')]",
          "database": "[parameters('sql_database')]",
          "authType": "[parameters('sql_authType')]",
          "userName": "[parameters('username')",
          "password": "[parameters('password')]"
        },
        "customParameterValues": {},
        "api": {
          "id": "[concat('/subscriptions/', subscription().subscriptionID, '/providers/Microsoft.Web/locations/westeurope/managedApis/sql')]"
        }
      }
    }

服务器、数据库和 AuthType 已填充,但我无法获取要在部署中填充的用户名和密码参数。

【问题讨论】:

  • 使用密钥库。
  • 这有什么帮助?

标签: azure api azure-resource-manager arm-template


【解决方案1】:

“编辑 API 连接”页面不会显示 UsernamePassword,因为它们的类型为 securestring

参考:https://docs.microsoft.com/en-us/connectors/sql/#creating-a-connection

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "connections_sql_name": {
      "type": "string",
      "defaultValue": "connections_sql_name"
    },
    "sql_server": {
      "type": "string",
      "defaultValue": "server201-dev-sql.database.windows.net"
    },
    "sql_database": {
      "type": "string",
      "defaultValue": "Incidents"
    },
    "sql_authType": {
      "type": "string",
      "defaultValue": "Windows"
    },
    "username": {
      "type": "securestring",
    },
    "password": {
      "type": "securestring"
    }
  },
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Web/connections",
      "apiVersion": "2016-06-01",
      "name": "[parameters('connections_sql_name')]",
      "location": "westeurope",
      "properties": {
        "displayName": "Test Connection Name",
        "parameterValues": {
          "server": "[parameters('sql_server')]",
          "database": "[parameters('sql_database')]",
          "authType": "[parameters('sql_authType')]",
          "userName": "[parameters('username')]",
          "password": "[parameters('password')]"
        },
        "customParameterValues": {},
        "api": {
          "id": "[concat('/subscriptions/', subscription().subscriptionID, '/providers/Microsoft.Web/locations/westeurope/managedApis/sql')]"
        }
      }
    }
  ]
}

【讨论】:

  • 嗨,谢谢你的回答。我明白了,那一定是 tupe securestring 的。如何在我上面的 ARM 模板中实现这一点?只需将用户名和密码的参数从当前类型字符串更改为securestring?
  • @OliverNilsen - 我用 ARM 模板更新了答案。是的,将类型从string 更改为securestring。正如我所拥有的,使用 New-AzResourceGroupDeployment 的 PowerShell 部署将提示输入这两个值,除非您将它们作为参数对象传递。这是您可以利用 Key Vault 存储用户名和密码、通过 PowerShell 命令从 Key Vault 检索这两个值并将它们传递给部署的地方。 Key Vault 可让您查看机密。 -- 您还可以创建更复杂的 ARM 模板来在内部引用 Key Vault 机密。
  • 嗨,谢谢你的提示。我现在已经从 ARM 模板尝试了这种方法:“sql_database”:{“reference”:{“keyVault”:{“id”:“/subscriptions/xxx/resourceGroups/azure-devops-key-vault/providers/Microsoft. KeyVault/vaults/myKV" }, "secretName": "API-SQL-Database" } }, "username": { "reference": { "keyVault": { "id": "/subscriptions/xxx/resourceGroups/azure -devops-key-vault/providers/Microsoft.KeyVault/vaults/myKV" }, "secretName": "API-SQL-UserName" } },
  • 从 KeyVault 获取值适用于 sql_database 参数,因为它是字符串类型的,我可以从我的 KeyVault 中很好地获取 Secret 值,并且它也填充在 Azure 门户的“编辑 API 连接”页面中. ARM 模板中的 parameter.json 文件中用于安全字符串类型的用户名的相同代码不起作用。在 Azure 门户的“编辑 API 连接”页面中,该值仍为空白。
  • 我还尝试在 Azure DevOps 的变量下创建一个秘密变量,并且厌倦了使用它而不是 KeyVault 并在任务的“覆盖模板参数”字段中使用它来进行 ARM 部署和传递像这样的“-password $(API-SQL-Password)”,但在这里它最终在 Azure 门户中成为空值。
猜你喜欢
  • 2020-12-09
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 2014-07-02
  • 2019-09-03
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
相关资源
最近更新 更多