首页 > 其他分享 >【Azure API Management】实现在API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account

【Azure API Management】实现在API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account

时间:2023-07-17 20:36:42浏览次数:51  
标签:Account Management Storage 访问 API APIM

问题描述

在Azure的同一数据中心,API Management访问启用了防火墙的Storage Account,并且把APIM的公网IP地址设置在白名单。但访问依旧是403

原因是:

存储帐户部署在同一区域中的服务使用专用的 Azure IP 地址进行通信。 因此,不能基于特定的 Azure 服务的公共出站 IP 地址范围来限制对其的访问。

在Storage Account的网络设置页面,有一个功能可以通过管理标识(Managed Identity)的方式访问Storage Account。

Specify resource instances that will have access to your storage account based on their system-assigned managed identity.

根据系统分配的托管标识指定有权访问存储帐户的资源实例。

所以,如上图所示,可以通过管理标识来指定APIM服务的实例来访问Storage Account中的文件。本文就介绍 [在API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account] 

 

实现步骤

第一步:启用APIM服务的MI,并添加Storage Account 的RBAC访问权限

注意:不是 开发者门户部分的Identity,而是APIM 安全部分的 Managed identities

以下权限均可以访问Storage Account:

  • Storage Account Data Owner
  • Storage Blob Data Contributor
  • Storage Blob Data Reader

 

第二步:在Storage Account的Network中,添加APIM 服务访问实例,以及选择正确的MI

  • 在Resource type中选择 Microsoft.ApiManagement/service
  • 在Instance name中选择APIM服务名称

 

 

第三步:为APIM中的接口添加 authentication-managed-identity Policy 

  • 在API的Inbound策略中,添加 <authentication-managed-identity resource="https://storage.azure.com/" />, resource内容不变。即使在中国区,也是使用 storage.azure.com域名 
  • 访问Storage Account,必须携带 x-ms-version header,为了避免每次手动输入,所以在此处添加 set-header 策略来设置 x-ms-version 的值

 完整的Polciy内容:

<policies>
    <inbound>
        <base />
        <authentication-managed-identity resource="https://storage.azure.com/" />
        <set-header name="X-Ms-Version" exists-action="override">
            <value>2022-11-02</value>
        </set-header>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

 

测试访问,成功!

 

参考资料

Storage Account允许从 Internet IP 范围进行访问 : https://docs.azure.cn/zh-cn/storage/common/storage-network-security?tabs=azure-portal#grant-access-from-an-internet-ip-range

Authenticate with managed identity : https://learn.microsoft.com/en-us/azure/api-management/authentication-managed-identity-policy#examples

 

 

标签:Account,Management,Storage,访问,API,APIM
From: https://www.cnblogs.com/lulight/p/17561115.html

相关文章

  • 轻松应对复杂集成场景!用友U8API开发适配
    在企业上云的大趋势下,U8+全面转向互联网方向,深入融合云应用,一站式提供财务、营销、制造、采购、设计、协同、人力等领域的“端+云”服务,并通过软硬一体化、产业链协同的策略全面赋能成长型企业在技术、供应链、生产、财税、营销等领域的创新升级。为成长型企业提供基于互联网......
  • API接口技术开发分享,获得亚马逊AMAZON国际站商品详情案例,可以多语言请求,支持高并发演
    ​ 响应参数数据展示名称类型必须示例值描述detail_urlString0https://www.amazon.cn/dp/B014QN8RG0?th=1&psc=1商品链接crumbsMix0{"162371071":"徒步鞋、登山鞋","2029189051":"鞋靴","2112046051":"男鞋","......
  • 小红书获得小红书笔记详情 API 返回值说明
    ​ item_get_video-获得小红书笔记详情 注册开通smallredbook.item_get_video公共参数名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_s......
  • 如何接入API接口
    如何接入API接口对接流程申请api平台账号开通接口权限对接api测试上线1.如何测试?假如需要接收并处理微信消息,研发人员需掌握任意一种JAVA、Go、PHP、Python、Node.js等后端代码即可。首先后台提交注册,点击进行测试,注册完成后,进入后台自助系统,选择试用版,即可使用代码......
  • 虾皮shopee根据ID取商品详情 API 返回值说明
    ​ item_get-根据ID取商品详情 注册开通shopee.item_get公共参数名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]cac......
  • REST API 设计最佳实践:为什么不要在URI中使用动词?
    总的来说,HTTP协议出现以来Web服务也就存在了。但是,自从云计算出现后,才成为实现客户端与服务和数据交互的普遍方法。作为一名开发者,我很幸运能够在工作中使用一些仍然存在的SOAP服务。但是,我主要接触的是REST,这是一种基于资源的API和Web服务开发架构风格。在我的职业生涯中有很大......
  • Eolink Apikit,0 代码可拖拽的自动化测试神器
    大家好,我是哪吒。传统的自动化测试方法需要编写大量的代码和脚本,对于非开发人员来说具有一定门槛,本文将以EolinkApikit为例,探讨图形化操作、可拖拽的自动化测试工作流,如何快速构建复杂的测试流程。一、从测试到可拖拽的自动化测试传统的测试需要测试人员逐步执行测试用例,手动输......
  • HTML5 Canvas API制作一个简单的猜字单机游戏
    这篇文章主要介绍了借助HTML5CanvasAPI制作一个简单的猜字单机游戏的实例分享,游戏中每局会自动生成一个字母,玩家按键盘来猜测该字母是哪一个,需要的朋友可以参考下HTML代码<!doctypehtml><htmllang="en"><head><metacharset="utf-8"/><scrip......
  • ASP.NET Core Web API中操作方法中的参数来源
    在ASP.NETCoreWebAPI中,有多种方式可以传递参数给操作方法。以下是一些常见的参数传递方式:路由参数(RouteParameters):参数值从URL的路由中提取。//Route:api/users/{id}[HttpGet("api/users/{id}")]publicIActionResultGetUserById(intid){//使用id执行操作......
  • uni app 封装接api接口
    创建文件 base.jsletbaseURL='';//是否在控制台显示接口请求日志,本地环境启用,打包环境禁用letshowHttpLog=false;//测试环境baseURL='https://api.apiopen.top/api';//正式环境//baseURL='XXXXX.XXXXX.com';module.exports={baseURL:baseURL,......