无Azure Active Directory时,如何通过RBAC让Azure VM访问存储容器?
嗨,我来帮你理清这个问题的核心和解决办法:
首先得澄清一个常见误解:每个Azure订阅默认都关联了一个Azure AD租户,哪怕你没特意去配置AAD服务,这个租户是自带的,所以你其实可以用Azure托管标识来实现RBAC授权——这也是Azure推荐的VM访问Azure服务的安全方式。
你之前遇到的“没法把自定义角色分配给VM”的问题,核心原因是:RBAC权限只能分配给安全主体(比如用户、组、服务主体、托管标识),VM本身并不是安全主体,所以直接分配角色给VM是行不通的。而托管标识就是为这类场景设计的,它是Azure AD中的特殊身份,专门给Azure资源(比如你的VM)用的,不需要你手动创建AAD用户或服务主体。
下面是具体的操作步骤:
给VM启用系统分配的托管标识
登录Azure门户,找到你的vm-01,进入VM的“标识”选项卡,切换到“系统分配”标签页,把状态设置为“开启”,点击保存。这样Azure就会自动在你的默认AAD租户里为这个VM创建一个托管标识,这个标识和VM生命周期绑定,VM删除后标识也会自动删除。将自定义角色(或内置存储角色)分配给这个托管标识
找到你要访问的存储账户,进入“访问控制(IAM)”选项卡,点击“添加”→“添加角色分配”:- 选择你之前创建的自定义角色(或者用Azure内置的角色,比如“存储Blob数据读取者”,如果只需要读取容器/对象的话)
- 在“成员”页面,选择“托管标识”,然后点击“选择成员”,在弹出的窗口里选择你的
vm-01的系统分配托管标识,完成选择后点击“查看+分配”确认。
在VM上通过托管标识登录Azure CLI并访问存储
登录到你的Linux VM,打开终端,执行以下命令用托管标识自动登录Azure CLI:az login --identity登录成功后,你就可以直接执行存储相关的命令了,比如列出容器:
az storage container list --account-name <你的存储账户名称>
这样操作后,你的VM就能通过RBAC权限安全地访问存储容器和对象了,全程不需要手动管理凭据,也不需要额外配置AAD服务。
备注:内容来源于stack exchange,提问作者Sudheer Satyanarayana

