无法通过编程方式为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里。 - 修复步骤:
- 从现有WAF策略中获取已有的规则列表,添加新的自定义规则
- 将更新后的规则列表赋值给patch对象的
Rules属性 - 执行更新操作
修改后的代码示例:
// ... 省略前面的认证和资源获取代码 ... 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
相关产品推荐
相关产品推荐

