You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过编程方式为Azure Front Door WAF策略添加自定义规则求助

问题

使用以下代码为Azure WAF策略添加自定义规则时,收到操作成功的提示,但自定义规则并未实际添加到策略中。同时发现缺少相关的官方文档,希望能补充这部分内容。

代码示例

// Authenticate using ClientSecretCredential
var credential = new ClientSecretCredential(_configuration["AzureAd:TenantId"], _configuration["WAFPolicy:ClientId"], _configuration["WAFPolicy:ClientSecret"]);
var client = new ArmClient(credential);

// Get the subscription resource
var subscription = client.GetSubscriptionResource(new ResourceIdentifier($"/subscriptions/{_configuration["WAFPolicy:SubscriptionId"]}"));

// Get the resource group
var resourceGroup = await subscription.GetResourceGroups().GetAsync(_configuration["WAFPolicy:ResourceGroupName"]);

_wafPolicyResource = await resourceGroup.Value.GetFrontDoorWebApplicationFirewallPolicies().GetAsync(_configuration["WAFPolicy:Name"]);

var ruleMatchCondition = new WebApplicationRuleMatchCondition
(
    WebApplicationRuleMatchVariable.RemoteAddr,
    WebApplicationRuleMatchOperator.Contains,
    firewallRule.Values
);

var customRule = new WebApplicationCustomRule(
        firewallRule.Priority,
        WebApplicationRuleType.MatchRule,
        new[] { ruleMatchCondition },
        RuleMatchActionType.Allow
    )
{
    Name = "Test"
};

_wafPolicyResource.Data.Rules.Add(customRule);

FrontDoorWebApplicationFirewallPolicyPatch patch = new FrontDoorWebApplicationFirewallPolicyPatch
{
    Tags =
    {
    ["key1"] = "value1",
    ["key2"] = "value2"
    }
};
ArmOperation<FrontDoorWebApplicationFirewallPolicyResource> lro = await _wafPolicyResource.UpdateAsync(Azure.WaitUntil.Completed, patch);

问题原因及解决方法

  • 核心问题:你直接修改了_wafPolicyResource.Data.Rules,但调用UpdateAsync时传入的FrontDoorWebApplicationFirewallPolicyPatch对象并未包含这个规则修改。UpdateAsync只会提交patch对象中定义的属性变更,Data对象的修改不会自动同步到patch里。
  • 修复步骤:
    1. 从现有WAF策略中获取已有的规则列表,添加新的自定义规则
    2. 将更新后的规则列表赋值给patch对象的Rules属性
    3. 执行更新操作

修改后的代码示例:

// ... 省略前面的认证和资源获取代码 ...

var customRule = new WebApplicationCustomRule(
        firewallRule.Priority,
        WebApplicationRuleType.MatchRule,
        new[] { ruleMatchCondition },
        RuleMatchActionType.Allow
    )
{
    Name = "Test"
};

// 获取现有规则并添加新规则
var updatedRules = _wafPolicyResource.Data.Rules.ToList();
updatedRules.Add(customRule);

FrontDoorWebApplicationFirewallPolicyPatch patch = new FrontDoorWebApplicationFirewallPolicyPatch
{
    Tags =
    {
        ["key1"] = "value1",
        ["key2"] = "value2"
    },
    // 将更新后的规则列表赋值给patch的Rules属性
    Rules = updatedRules
};

ArmOperation<FrontDoorWebApplicationFirewallPolicyResource> lro = await _wafPolicyResource.UpdateAsync(Azure.WaitUntil.Completed, patch);

另外,关于文档缺失的问题,你可以关注Azure官方文档的更新,或者在Azure SDK的GitHub仓库提交反馈需求。

内容的提问来源于stack exchange,提问作者shyambabu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:45:03