如何生成Azure Storage Account专用密钥:允许数据操作禁止容器/表管理
如何生成仅允许数据操作(禁止创建/删除容器/表)的Azure存储访问凭证
核心思路
你需要的是仅开放数据层操作权限(增删改查Blob/表实体/文件),同时限制资源层操作权限(禁止创建/删除容器、表、文件共享)。Access Keys权限全覆盖,所以必须用SAS或RBAC结合SAS的方案。
方案一:账户SAS(快速生成,支持多服务)
账户SAS可以同时覆盖Blob、Table、File服务,适合批量给开发者共享:
- 登录Azure门户,进入目标存储账户的「共享访问签名」页面
- 服务选择:勾选需要开放的服务(Blob、Table、File)
- 资源类型限制:
- Blob服务:只勾选「对象」(Object),不要选「服务」「容器」
- Table服务:只勾选「实体」(Entity),不要选「服务」「表」
- File服务:只勾选「文件/目录」(File/Directory),不要选「服务」「共享」
这一步是关键,直接限制了权限仅作用于数据对象,而非容器/表这类顶层资源
- 权限设置:勾选数据操作所需的权限,比如
r(读)、w(写)、d(删除数据),不要勾选c(创建资源)、d(删除资源)这类资源层权限 - 配置SAS的有效期、允许的IP范围(可选)、协议(建议选HTTPS)
- 生成SAS后,拼接成连接字符串:
DefaultEndpointsProtocol=https;AccountName=<你的存储账户名>;EndpointSuffix=core.windows.net;SharedAccessSignature=<生成的SAS令牌>
方案二:自定义RBAC角色 + 用户委派SAS(长期可控)
如果需要更灵活的权限管理(比如避免频繁更新SAS有效期),可以用Azure AD RBAC:
- 创建自定义RBAC角色,包含以下权限(排除资源层操作):
- Blob数据操作:
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/* - 表实体操作:
Microsoft.Storage/storageAccounts/tableServices/tables/entities/* - 文件数据操作:
Microsoft.Storage/storageAccounts/fileServices/shares/files/*
注意要移除Microsoft.Storage/storageAccounts/blobServices/containers/write、Microsoft.Storage/storageAccounts/tableServices/tables/write这类创建/删除资源的权限
- Blob数据操作:
- 将该角色分配给开发者的Azure AD账户或服务主体
- 开发者可通过Azure AD身份验证生成用户委派SAS,或直接使用Azure AD凭据作为连接字符串(主流SDK均支持Azure AD认证)
注意事项
- 不要混淆资源类型和权限的对应关系:比如Blob的
c权限在「容器」层级是创建容器,在「对象」层级是创建Blob,只要限制资源类型为对象,就不会赋予创建容器的权限 - 定期轮换SAS令牌,避免权限泄露
- 如果只需要单一服务的权限,也可以用服务SAS,设置逻辑和账户SAS一致,仅针对单个服务配置
内容的提问来源于stack exchange,提问作者ilovecsharp
相关产品推荐
相关产品推荐

