APIM 政策 IF/When 政策

问题描述 投票:0回答:1

对 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
azure-api-management
1个回答
0
投票

您的入站部分需要类似的内容:

<choose>
    <when condition="@(context.Request.Headers.GetValueOrDefault("X-Azure-FDID") != {FrontDoorId})">
        <ip-filter action="allow">
            <address>{IpAddress}</address>
        </ip-filter>
    </when>
</choose>
© www.soinside.com 2019 - 2024. All rights reserved.