1. Azure数据安全全景

在Azure上做数据安全,第一件必须厘清的事不是“开哪个功能”,而是“这块责任到底归谁”。很多团队把数据放进Azure SQL Database或Storage Account后,默认认为微软已经替自己把安全做完了,结果在审计时才发现:加密、备份、网络隔离这些底层能力确实由微软提供,但“谁可以访问、访问什么数据、访问后留下什么痕迹”几乎全部由租户自己负责。这就是责任共担模型(Shared Responsibility Model)要解决的核心认知问题。

责任共担模型:边界在哪里

责任共担模型把云安全责任划分为三层:云提供方始终负责的物理安全、主机、网络、数据中心;租户始终负责的信息与数据、账户与身份、终端设备;而随服务模型变化的中间层,则取决于IaaS、PaaS还是SaaS。以三种典型服务为例:

  • IaaS(如虚拟机):客户负责操作系统、运行时、中间件、应用和数据;微软只负责虚拟化层以下。
  • PaaS(如Azure SQL Database、Azure Storage):微软负责OS、运行时、数据库引擎本身;客户负责数据分类、身份、权限、网络访问规则和审计。
  • SaaS(如Microsoft 365):微软负责应用逻辑与基础设施;客户仍负责账号治理、数据分类、共享策略和合规配置。

关键结论是:无论哪种模型,数据本身、身份和数据访问权限始终属于客户责任。这意味着“数据安全”在Azure上不是买一个服务,而是围绕数据、身份、网络、审计四条线持续运营。

数据安全生命周期:从创建到销毁的六个阶段

数据安全生命周期通常划分为六个阶段:创建(Create)→ 存储(Store)→ 使用(Use)→ 共享(Share)→ 归档(Archive)→ 销毁(Destroy)。每个阶段都有对应的Azure控制点:

阶段典型风险Azure控制点示例
创建敏感数据未分类即入库Microsoft Purview敏感信息类型、数据分类标签
存储静态数据明文、密钥管理混乱Storage Service Encryption、Azure Key Vault、CMK
使用过度权限、越权查询Azure RBAC、Microsoft Entra ID条件访问
共享匿名链接、外部租户访问共享访问签名(SAS)、私有终结点、B2B协作策略
归档冷数据被遗忘、保留策略缺失Blob访问层、不可变存储、保留锁
销毁软删除残留、备份未清理软删除、清除保护、生命周期管理策略

生命周期视角的价值在于:它把“安全”从单点配置变成一条链。任何一环缺失,都会让前面的投入失效。例如,即使启用了CMK加密,如果共享阶段生成了长期有效的匿名SAS,数据仍可能被外部读取。

访问控制基本概念:认证、授权、审计

访问控制可以拆成三个连续动作:认证(Authentication)→ 授权(Authorization)→ 审计(Auditing)。认证回答“你是谁”,授权回答“你能做什么”,审计回答“你做过什么”。在Azure中,这三者分别对应:

  • 认证:Microsoft Entra ID(原Azure AD)负责身份验证,支持MFA、条件访问、无密码登录。
  • 授权:Azure RBAC在管理平面控制“能否管理资源”,数据平面则用服务自身权限模型(如Storage的SAS、SQL的数据库角色)。
  • 审计:Azure Monitor、Activity Log、诊断设置、Microsoft Defender for Cloud提供日志与告警。

这里最容易混淆的是管理平面与数据平面的区别。管理平面指通过Azure Resource Manager操作资源本身(如创建存储账户、修改配置);数据平面指直接读写数据(如上传Blob、查询表)。一个用户拥有“存储账户参与者”角色,只能管理账户配置,默认不能读取Blob数据;反之,一个SAS令牌可以读Blob,却不能修改账户配置。理解这条边界,是设计最小权限的前提。

实战环境搭建:最小可用实验环境

为了后续章节能直接动手,这里搭建一个最小实验环境。假设使用一个测试订阅,区域选择“东亚”,资源组命名为rg-datasec-lab。以下命令使用Azure CLI,示例参数均为教学假设值,实际执行时请替换为你的订阅ID和唯一名称。

# 登录并设置订阅
az login
az account set --subscription "<你的订阅ID>"

# 创建资源组
az group create --name rg-datasec-lab --location eastasia

# 创建存储账户(名称全局唯一,仅小写字母和数字)
az storage account create \
  --name stdataseclab001 \
  --resource-group rg-datasec-lab \
  --location eastasia \
  --sku Standard_LRS \
  --kind StorageV2 \
  --min-tls-version TLS1_2 \
  --allow-blob-public-access false

# 创建Azure SQL Server与示例数据库
az sql server create \
  --name sql-datasec-lab-001 \
  --resource-group rg-datasec-lab \
  --location eastasia \
  --admin-user sqladmin \
  --admin-password "<强密码>"

az sql db create \
  --resource-group rg-datasec-lab \
  --server sql-datasec-lab-001 \
  --name db-lab \
  --service-objective Basic

创建完成后,建议立即做三件事验证环境是否符合安全基线:第一,在存储账户“配置”中确认“允许Blob公共访问”为“已禁用”;第二,在SQL Server“安全性→防火墙和虚拟网络”中确认没有0.0.0.0-255.255.255.255这类全开放规则;第三,在“Microsoft Entra ID→属性”中确认已启用安全默认值或条件访问策略。这三项检查分别对应网络暴露面、数据公开面和身份基线,是后续所有实验的起点。

Azure数据安全全景 责任共担 · 生命周期 · 访问控制 责任共担模型 微软:物理 / 主机 / 网络 / 数据中心 随模型变化:OS / 运行时 / 应用 客户:数据 / 身份 / 权限 / 审计 数据安全生命周期 创建 存储 使用 共享 归档 销毁 分类标签 加密/CMK RBAC SAS/私有终结点 不可变存储 软删除/清除保护 任一阶段缺失 → 整条链失效 访问控制:认证 → 授权 → 审计 认证 Entra ID · MFA · 条件访问 授权 RBAC · SAS · 数据库角色 审计 Activity Log · 诊断设置 · Defender 管理平面(ARM:创建/配置资源) ≠ 数据平面(直接读写数据)——最小权限必须分别设计