使用 PowerShell 为 Azure 认知搜索配置 IP 防火墙

Use PowerShell to configure the IP firewall for Azure Cognitive Search

我正在尝试使用脚本自动将 IP 地址添加到 Azure 认知搜索 IP 防火墙。

原因是该服务不允许在设置防火墙时管理某些功能(索引、数据源配置等),因此我发现自己删除了所有当前 IP 地址,进行了所需的更新到搜索服务,然后手动重新添加 IP 地址(遵循此 Microsoft 文档:Configure IP firewall for Azure Cognitive Search)。在项目的所有开发人员和 App Service 的 IP 地址之间,这是一个非常繁琐的重复执行过程。

即使我自己的 IP 地址包含在防火墙中,我也无法管理某些组件。

查看 PowerShell 命令我还没有看到任何自动添加 IP 地址的方法,甚至没有看到现有 IP 地址的列表

那么如何在 PowerShell 中执行此操作?

IP rules on your Azure Cognitive Search service can be configured using the Azure portal or the Management REST API version 2020-03-13.

目前,only support to configure with azure portal and management rest api。因此不支持使用PowerShell为Azure认知搜索配置IP防火墙

您可以向 Azure 搜索提供 voice 反馈,以促进此功能的实现。

搜索服务可以 changed/updated 通过 powershell Azure Search CLI 命令 az search service update

但是,az search service update 目前只支持更新以下属性:

  • 托管模式
  • id
  • 身份
  • 位置
  • 姓名
  • 分区数
  • 配置状态
  • 副本数
  • sku
  • 状态
  • 状态详细信息
  • 标签
  • 类型

正如 Joey Cai 提到的,您可以使用 REST API 来管理 IP 防火墙规则。

您可以从 Powershell 执行其余查询。下面的脚本将 IP 添加到搜索服务。

$searchservicename = "<SEARCH SERVICE NAME>"
$resourcegroup = "<RESOURCE GROUP>"
$subscription = "<YOUR SUBSCRIBRION>"

$access= $token.accessToken
$url = "https://management.azure.com/subscriptions/$subscription/resourceGroups/$resourcegroup/providers/Microsoft.Search/searchServices/$searchservicename" + "?api-version=2020-08-01"

$body = '{
  "location": "<YOUR REGION>",
  "tags": {
    "app-name": "<YOUR TAG>"
  },
  "sku": {
    "name": "standard"
  },
  "properties": {
    "replicaCount": 1,
    "partitionCount": 1,
    "networkRuleSet": {
      "ipRules": [
        {
          "value": "<CIDR IP>"
        },
        {
          "value": "<CIDR IP>"
        }
      ]
    },
    "hostingMode": "default"
  }
}'


$headers = @{'x-ms-client-request-id'=(New-Guid); 'Authorization' ="Bearer $access_t ";'Content-Type' ="application/json"}
Invoke-WebRequest -Uri $url -Body $body -Headers $headers  -Method Put

要删除 IPRules,请将正文更新为:

"networkRuleSet": {
      "ipRules": []
    }

查看 IP 列表。您可以使用 GET 方法而不是 PUT 方法并忽略正文。

在使用上述任何一项之前,您必须获得访问令牌 ($access_t)。您可以采用多种方式获取令牌。在 Powershell 中,我最简单的方法如下

az login
$token = az account get-access-token --subscription "<Your Subscription>"
$token = $token | ConvertFrom-Json 
$access_t= $token.accessToken

注:

在执行上述任何步骤之前,您的计算机中需要安装 Az Cli。

要安装和使用 AZ Cli,您可以参考此 article

这是为了获取令牌,以防您通过上述方法获取令牌