如何使用 azure cli 将 ip 地址添加到 azure 中的白名单 wfa 规则?

如何使用 azure cli 将 ip 地址添加到 azure 中的白名单 wfa 规则?

我尝试添加如下所示的内容但出现如下语法错误。

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"

预期 <class 'list'>,得到 20.80.71.229/24 (<class '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"

预期 <class 'list'>,得到 20.80.71.229,20.80.71.228 (<class '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"是一个内容为的字符串"foo, bar"

因此您应该使用matchConditions[0].matchValues="20.80.71.229","20.80.71.228"

相关内容