移除Azure托管标识角色分配后,仍可调用目标Azure Function的问题
移除托管标识角色分配后仍能调用Azure Function的原因分析
IAM权限缓存延迟:Azure IAM的角色分配变更不是实时生效的,一般有5到15分钟的缓存周期。哪怕IAM控制台显示已移除角色,后台权限校验系统可能还没完成同步,导致旧权限还在生效。可以等待一段时间后再测试,或者重启被调用的Function来强制刷新权限缓存。
存在其他权限授予路径:
- 检查托管标识是否继承了上层资源的权限:比如托管标识所在的资源组、订阅层面被授予了
Function App Contributor或Function App Reader这类角色,即使单独移除了目标Function的角色,继承的权限依然能让它正常调用。 - 确认被调用Function的身份验证设置:有没有误开启匿名访问,或者除了Microsoft身份提供商外,配置了其他允许访问的规则(比如特定用户、组)。
- 排查调用方式:如果第二个Function是用函数密钥或**共享访问密钥(SAS)**调用的,而非托管标识的Bearer Token,那IAM角色的移除不会影响这类密钥的访问权限。可以查看请求的
Authorization头,确认是否用了非Token的授权方式。
- 检查托管标识是否继承了上层资源的权限:比如托管标识所在的资源组、订阅层面被授予了
托管标识通过Azure AD组获得权限:如果该托管标识属于某个Azure AD组,而这个组被授予了目标Function的角色权限,那单独移除托管标识的角色后,组的权限依然有效。需要检查托管标识的AD组成员身份。
IAM检查工具的局限性:"检查访问权限"功能可能无法实时同步所有权限变更,或者遗漏了继承权限、组权限的检查。可以用Azure CLI命令手动确认实际生效的角色分配:
az role assignment list --assignee <托管标识的Object ID> --scope <目标Function的资源ID>
内容的提问来源于stack exchange,提问作者Programador Desenvolvedor
相关产品推荐
相关产品推荐

