如何限制Azure中指定函数对存储账户的访问 保留另一函数的Blob监听能力
问题
我在一个函数应用中部署了两个函数,二者均配置了Blob触发器,用于监控同一个容器内的相同Blob。请问如何限制其中一个函数的访问权限,同时让另一个函数可以持续正常监控容器中的Blob?
解决方案
同一函数应用下的函数默认共享应用级别的身份权限,要实现两个函数的权限隔离,按以下步骤操作即可:
- 为两个函数分别创建独立的用户分配托管身份,不要共用函数应用默认的系统分配托管身份,确保二者的权限完全独立
- 给需要正常工作的函数对应的托管身份,分配存储容器的对应权限:仅需读取触发的场景分配
Storage Blob Data Reader权限,需要修改Blob的场景分配Storage Blob Data Contributor权限 - 不给需要限制访问的函数对应的托管身份分配任何存储容器的数据层权限,如需完全禁止访问可以额外添加显式拒绝权限,避免继承到其他策略的访问权限
- 修改两个函数的Blob触发器配置,均通过指定托管身份的方式连接存储账户,不要使用存储账户全权限连接字符串,配置参考示例:
{ "bindings": [ { "name": "inputBlob", "type": "blobTrigger", "direction": "in", "path": "目标容器名称/{blobName}", "connection": "存储账户资源名", "identity": "当前函数对应的用户分配托管身份的客户端ID" } ] }
- 配置完成后上传测试Blob验证:有权限的函数会正常触发运行,被限制权限的函数会因无访问权限无法拉取Blob内容和执行业务逻辑,二者互不干扰。
提示:如果继续使用存储账户连接字符串配置触发器,两个函数都会拿到连接字符串对应的全部存储权限,无法实现细粒度的权限隔离。
内容的提问来源于stack exchange,提问作者Aadhar
相关产品推荐
相关产品推荐

