我有一个托管ApiController
的辅助角色,它目前通过我在其服务配置文件中定义的http和https输入端点与公共互联网进行通信。
我想将此API放在Azure APIM API之后,让所有流量都通过那里,而不是直接命中工作者角色。我大部分时间都在那里,但我很难确保工作者的角色无法直接从公共互联网上获取。
目前:
我认为阻止我的工作者角色直接从公共互联网访问的最佳方式是defining Access Control List rules in its configuration file,它只允许来自我的APIM API的呼叫。它看起来像这样:
<AccessControls>
<AccessControl name="APIM">
<Rule action="permit" description="OnlyPermitAPIM" order="100" remoteSubnet="?" />
</AccessControl>
</AccessControls>
<EndpointAcls>
<EndpointAcl role="RoleName" endPoint="httpsIn" accessControl="APIM"/>
<EndpointAcl role="RoleName" endPoint="httpIn" accessControl="APIM"/>
</EndpointAcls>
我不确定remoteSubnet
属性的正确值是多少。我尝试输入我的ARM虚拟网络(我的APIM API所在的)的地址空间值,但这似乎不起作用,测试调用返回500状态。
这是正确的方法吗?另外,有没有办法确保我的APIM API直接通过对等虚拟网络进行呼叫?现在我相信它仍然通过公共互联网。
我走在正确的轨道上。我唯一需要改变的是remoteSubnet的价值。我需要包含API Management服务的VIP,而不是ARM虚拟网络的地址空间。 .cscfg文件的相关部分如下所示:
<AccessControls>
<AccessControl name="APIM">
<Rule action="permit" description="OnlyPermitAPIM" order="100" remoteSubnet="<VIP address of APIM service>/32" />
</AccessControl>
</AccessControls>
<EndpointAcls>
<EndpointAcl role="RoleName" endPoint="httpsIn" accessControl="APIM"/>
<EndpointAcl role="RoleName" endPoint="httpIn" accessControl="APIM"/>
</EndpointAcls>