Skip to content
← 返回Azure Blob Storage列表
Azure Blob身份与保护契约

Azure Blob:身份、SAS与条件传输契约 ​

前置是账号/容器边界与HTTP状态码。目标是解释谁可以执行哪种数据操作,以及并发冲突怎样被服务端拒绝。本课只进行官方公开API理论核对;没有创建请求集合、运行SDK、连接身份或调用产品API。

Azure Blob 数据角色与管理角色 ​

Azure Blob 数据角色与管理角色:数据平面角色允许读写Blob字节,管理平面角色允许配置账号等资源;订阅Contributor并不自动包含Blob数据读取权。Storage Blob Data Reader适合读取,Storage Blob Data Contributor覆盖练习所需读写删除,角色作用域应限制在读者自有隔离容器。角色传播延迟、网络防火墙与私有端点可能使正确代码仍失败。

DefaultAzureCredential选择凭据来源,不授予权限。多个开发账号、环境变量服务主体和托管身份同时存在时,必须核对实际选中的主体、tenant及授权范围;不要将“能获取token”当作“允许访问对象”。面向生产的部署应选择明确身份并缩窄链。工程不收集token、不打印secret,也不修改RBAC。

Azure Blob SAS 范围与撤销 ​

Azure Blob SAS 范围与撤销:SAS是带签名的受限访问令牌,约束资源、权限、时间和可选网络条件;泄露者可以在有效范围内使用它,URL不应写入日志。用户委托SAS由Entra授权取得的用户委托密钥签发,通常优先于共享账号密钥签名的服务SAS或账号SAS。三种签发方式与允许操作不同,不能混称为同一种凭据。

撤销机制取决于SAS类型:存储访问策略只适用于支持该机制的服务SAS;用户委托SAS不能关联该策略。短有效期、HTTPS、最小权限与明确撤销程序需一起设计;轮换账号密钥也不会撤销用户委托密钥。工程只示范Entra身份,不为教学临时生成SAS;第三方下载链接应由专门授权服务按对象签发,并确保过期与泄露处理方案。

Azure Blob ETag 条件冲突 ​

Azure Blob ETag 条件冲突:先读ETag,再以match_condition=MatchConditions.IfNotModified和etag传给更新,服务检查If-Match;状态已变则返回412,而不是默默覆盖。ETag是乐观并发条件,身份授权仍须独立满足。收到412应重读并决定合并或拒绝,盲目循环重试旧值无法解决冲突。

练习答案:A和B都读到E1,A成功写出E2,B用E1写入应失败;B重读E2后能否写取决于业务是否仍允许。配套工程通过真实两次写入产生旧ETag,再验证冲突分支,仅把HTTP 412当作此分支的人工预期;403、404或其他错误不能算演示成功。创建采用overwrite=False,对已存在Block Blob拒绝创建。

Azure Blob lease 与传输参数 ​

Azure Blob lease 与传输参数:活动lease要求相关写入和删除提供匹配的租约ID,lease是悲观协调机制,不是备份或身份凭据。租约持有者仍需数据权限;没有lease ID的写者可能收到租约相关409或412。需要长期协调时还须处理租约续约、过期、释放及故障恢复,不能为了让练习通过而抢占或break他人的lease。

upload_blob(data, blob_type=BlockBlob, length=None, metadata=None, **kwargs)通过关键字接收overwrite、etag、match_condition、lease、max_concurrency。stage_block(block_id, data, length=None, **kwargs)上传块,commit_block_list(block_list, content_settings=None, metadata=None, **kwargs)提交清单。max_concurrency控制分块传输并发,不能防止多写者;timeout是服务端单次操作时间约束,也不是整个上传的墙钟时限。客户端连接/读取超时和有限重试要分别设置,并结合输入可重放性与内存预算。

官方依据 ​

API签名应同时核对所锁定版本源码和当前Learn,避免把后续新增参数直接用于旧依赖。继续:版本生命周期、完整应用。

继续阅读