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

时间:2020-09-23 18:57:49

标签: azure powershell azure-cognitive-search

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

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

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

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

那么如何在PowerShell中做到这一点?

2 个答案:

答案 0 :(得分:0)

可以使用Azure门户或Management REST API版本2020-03-13 配置Azure认知搜索服务上的IP规则

现在,它Error opening the downloaded file on Adobe Acrobat PDF。因此,它不支持使用PowerShell为Azure认知搜索配置IP防火墙

您可以将only support to configure with azure portal and management rest api给予天蓝色搜索反馈,以促进此功能的实现。

答案 1 :(得分:0)

可以通过Powershell Azure Search CLI命令az search service update

更改/更新Search Service。

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

  • hostingMode
  • id
  • 身份
  • 位置
  • 名称
  • partitionCount
  • provisioningState
  • replicaCount
  • sku
  • 状态
  • statusDetails
  • 标签
  • 类型

就像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

这是为了在您通过上述方法获取令牌的情况下获取令牌