如何让我的工作者角色只与我的 APIM API 通信?

How do I have my Worker Role only communicate with my APIM API?

我有一个托管 ApiController 的工作者角色,它目前通过我在其服务配置文件中定义的 http 和 https 输入端点与 public 互联网通信。

我想把这个 API 放在 Azure APIM API 后面,让所有流量都经过那里,而不是直接访问辅助角色。我已经完成了大部分工作,但无法确保无法直接从 public 互联网访问工作者角色。


目前:


我认为防止从 public 互联网直接访问我的工作者角色的最佳方法是 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 所在的地址 space 值),但这似乎不起作用,测试调用返回 500 状态。

这是正确的方法吗?另外,有没有办法确保我的 APIM API 直接通过对等虚拟网络进行调用?现在我相信它仍在通过 public 互联网。

我走在正确的轨道上。我唯一需要更改的是 remoteSubnet 的值。我需要包含 API 管理服务的 VIP,而不是 ARM 虚拟网络的地址 space。 .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>