如何通过Azure API Management管控内外部API访问权限?
实现Azure API Management内外API的访问隔离方案
一、先对API进行分组标记
首先把内部API和外部API做明确区分,推荐两种方式:
- 给内部API统一添加标签(比如
internal-only),外部API添加external-public标签,后续可通过标签批量应用策略 - 把内部API归到单独的APIM产品(比如
InternalAPIs),外部API归到ExternalAPIs产品,利用产品级策略统一管控
二、内部API的访问限制配置(内网IP+JWT验证)
在内部API(或对应产品)的入站策略中添加以下逻辑:先校验请求来源IP是否属于公司内网IP段,再执行OKTA的JWT令牌验证。
示例策略代码:
<inbound> <!-- 校验来源IP是否在公司内网IP范围内,多个IP用逗号分隔 --> <ip-filter action="allow"> <address>192.168.0.0/16</address> <address>10.0.0.0/8</address> </ip-filter> <!-- 原有OKTA JWT验证策略 --> <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Invalid or missing token"> <openid-config url="https://your-okta-domain/.well-known/openid-configuration" /> <audiences> <audience>your-internal-api-audience</audience> </audiences> <issuers> <issuer>https://your-okta-domain/oauth2/default</issuer> </issuers> </validate-jwt> <!-- 其他原有入站逻辑 --> </inbound>
注:把192.168.0.0/16、10.0.0.0/8替换成实际的公司内网IP段,OKTA相关配置参数替换成你的实际值
三、外部API的访问限制配置(公网IP+JWT验证)
外部API仅保留原有OKTA JWT验证策略,确保允许所有公网IP访问,无需额外限制(或显式添加允许所有IP的规则):
示例策略代码:
<inbound> <!-- 允许所有来源IP访问 --> <ip-filter action="allow"> <address>0.0.0.0/0</address> </ip-filter> <!-- 原有OKTA JWT验证策略 --> <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Invalid or missing token"> <openid-config url="https://your-okta-domain/.well-known/openid-configuration" /> <audiences> <audience>your-external-api-audience</audience> </audiences> <issuers> <issuer>https://your-okta-domain/oauth2/default</issuer> </issuers> </validate-jwt> <!-- 其他原有入站逻辑 --> </inbound>
四、额外优化建议
- 如果公司内网使用Azure VNet,可将APIM部署到VNet内部模式,内部API通过VNet访问,外部API通过公网网关暴露,适合有成熟VNet环境的场景
- 可结合APIM用户组,给内部API访问者分配专属用户组,同时在策略中校验JWT里的用户组声明,进一步细化权限控制
内容的提问来源于stack exchange,提问作者DIBYA RANJAN TRIPATHY
相关产品推荐
相关产品推荐

