对 APIM xml 策略相对较新,所以对我放轻松
我基本上想要一个检查标头名称(FrontDoorID)是否正确的策略。如果该标头名称正确,那么它应该立即允许流量通过 API。
但是,如果该标头名称不正确,则应根据策略的下一部分(IP 过滤器)检查 IP 地址。如果 IP 过滤器匹配,那么它应该允许流量。
如果两者都是假的,请否认。
总之,如果标头名称或 ip 过滤器正确,则允许流量通过。
目前我有一个检查标头名称的策略,并有一个 IP 策略。目前发生的情况是,根据我的策略,来自 FrontDoor 的流量被阻止,即使标头名称正确,我认为这是由于以下 IP 过滤器没有包含来自 FrontDoor 后端的 IP。 FrontDoor.Backend 服务标签包含很多 IP,将它们也包含在 IP 过滤器中是不切实际的。
我希望有人能理解这一点。谢谢您的帮助。
<policies>
<inbound>
<check-header name="X-Azure-FDID" failed-check-httpcode="403" failed-check-error-message="Invalid Front Door ID header." ignore-case="false">
<value>{FrontDoorId}</value>
</check-header>
<ip-filter action="allow">
<address>{IpAddress}</address>
</ip-filter>
</inbound>
<backend>
<forward-request />
</backend>
<outbound />
<on-error />
</policies>
Example of basic policy. The policy I actually have on my environment is much larger, but this highlights the problem I am having. Above does not work as even if FrontDoorId is correct, policy fails when IPAddress is not correct. What I want is policy to allow traffic at least one is correct, but not necessarily both
您的入站部分需要类似的内容:
<choose>
<when condition="@(context.Request.Headers.GetValueOrDefault("X-Azure-FDID") != {FrontDoorId})">
<ip-filter action="allow">
<address>{IpAddress}</address>
</ip-filter>
</when>
</choose>