Как добавить IP-адрес в правило WFA белого списка в Azure с помощью Azure Cli?

Я попытался добавить, как показано ниже, но получил ошибку с синтаксисом, как показано ниже.

      az network application-gateway waf-policy custom-rule update
--resource-group rp-licaltcs-aks-prod --policy-name waf-licaltcs-prod-eastus --name WhitelistIP --set matchConditions[0].matchValues="20.80.71.229/24" "20.80.71.228/24"

Ожидаем <класс 'список'>, получили 20.80.71.229/24 (<класс 'str'>)

Сходным образом.

      az network application-gateway waf-policy custom-rule update --resource-group rp-licaltcs-aks-prod --policy-name waf-licaltcs-prod-eastus --name WhitelistIP --set matchConditions[0].matchValues="20.80.71.229,20.80.71.228"

Ожидаем <класс 'список'>, получили 20.80.71.229,20.80.71.228 (<класс 'str'>)

Этот рабочий.

      az network application-gateway waf-policy custom-rule update \
  --resource-group rp-licaltcs-aks-prod \
  --policy-name waf-licaltcs-prod-eastus \
  --name WhitelistIP \
  --set "matchConditions[0].matchValues=['20.80.71.229', '20.80.71.228']"

Но теперь есть еще одна проблема: существующие значения заменяются, а не добавляются.

Поэтому я подумал сначала получить предыдущие значения и передать их.

Когда я запускаю команду ниже.

      az network application-gateway waf-policy custom-rule show --resource-group rp-licaltcs-aks-prod --policy-name waf-licaltcs-prod-eastus --name WhitelistIP --query matchConditions[0].matchValues --output tsv

обеспечит вывод, как показано ниже

      20.80.71.229
20.80.71.228

Но если я назначу это переменной, она выберет только первое значение.

      existing_ips=$(az network application-gateway waf-policy custom-rule show --resource-group rp-licaltcs-aks-prod --policy-name waf-licaltcs-
prod-eastus --name WhitelistIP --query matchConditions[0].matchValues --output json | ./jq.exe -r '.[]')

Либо с помощью json, либо с tsv, он присваивает только первое значение ip.

общий сценарий:

      #!/bin/bash

# The IP address you want to add
new_ip="20.80.71.230"

# Get the current list of whitelisted IP addresses
existing_ips=$(az network application-gateway waf-policy custom-rule show --resource-group rp-licaltcs-aks-prod --policy-name waf-licaltcs-prod-eastus --name WhitelistIP --query matchConditions[0].matchValues --output tsv)

# Check if the new IP is already in the list
if echo "$existing_ips" | grep -q "$new_ip"; then
  echo "The IP address $new_ip is already in the whitelist."
else
  # If not, add it to the list
  updated_ips=$(echo -e "$existing_ips\n$new_ip" | tr '\n' ',' | sed 's/,$//')
  az network application-gateway waf-policy custom-rule update \
    --resource-group rp-licaltcs-aks-prod \
    --policy-name waf-licaltcs-prod-eastus \
    --name WhitelistIP \
    --set "matchConditions[0].matchValues=[$updated_ips]"
  echo "The IP address $new_ip has been added to the whitelist."
fi

1 ответ

Список PowerShell состоит из элементов, разделенных запятой.

"foo","bar"представляет собой список, состоящий из строк"foo"и"bar". это строка с содержимым"foo, bar".

Таким образом, вы должны использоватьmatchConditions[0].matchValues="20.80.71.229","20.80.71.228".

Другие вопросы по тегам