基于Azure Delta Lake和Databricks的安全数据共享(Delta Sharing)

server/2025/3/29 19:16:07/

设计Azure云架构方案实现Azure Delta Lake和Azure Databricks的安全数据共享(Delta Sharing),实现安全分发数据,生成只读共享链接(Bearer Token),第三方可直接查询 Azure 数据(无需复制),以及跨公司数据协作(如供应商获取脱敏后的销售数据),以及具体实现的详细步骤和关键PySpark代码。

此方案通过Delta Sharing实现安全、实时的跨组织数据共享,结合Azure RBAC、动态脱敏和Bearer Token控制,确保数据无需复制即可安全分发。接收方通过标准PySpark接口访问,降低协作门槛。

架构设计概览
  1. 数据存储层:使用Azure Data Lake Storage Gen2 (ADLS Gen2) 存储Delta Lake表。
  2. 数据处理层:Azure Databricks用于数据加工、脱敏和Delta Sharing配置。
  3. 安全
    • Azure RBAC 控制存储访问。
    • Databricks权限管理共享和Token。
    • 动态数据脱敏(视图或UDF)。
  4. 共享层:Delta Sharing协议生成只读链接(Bearer Token),第三方通过Databricks或兼容客户端直接访问。

详细实现步骤

1. 数据准备与脱敏

a. 创建ADLS Gen2存储账户

  • 启用Hierarchical Namespace(Delta Lake要求)。
  • 创建容器(如delta-lake)用于存储原始数据。

b. 在Databricks中挂载ADLS Gen2

python">configs = {"fs.azure.account.auth.type": "OAuth","fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider","fs.azure.account.oauth2.client.id": "<client-id>","fs.azure.account.oauth2.client.secret": "<client-secret>","fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<tenant-id>/oauth2/token"
}dbutils.fs.mount(source = "abfss://delta-lake@<storage-account>.dfs.core.windows.net/",mount_point = "/mnt/delta",extra_configs = configs
)

c. 写入原始Delta表

python"># 示例:销售数据
sales_data = [("order1", "customer1@example.com", 100.0, "2023-10-01"),("order2", "customer2@example.com", 200.0, "2023-10-02")
]
df = spark.createDataFrame(sales_data, ["order_id", "customer_email", "sales_amount", "date"])
df.write.format("delta").save("/mnt/delta/sales")

d. 创建脱敏视图

python"># 使用MD5哈希邮箱,隐藏敏感信息
spark.sql("""
CREATE OR REPLACE VIEW sales_masked AS
SELECT order_id, MD5(customer_email) AS customer_email_hash,sales_amount,date
FROM delta.`/mnt/delta/sales`
""")

2. 配置Delta Sharing

a. 安装Delta Sharing库
在Databricks集群中安装库:

com.databricks:delta-sharing-spark_2.12:0.6.0

b. 创建Share并添加表

python"># 创建Share
spark.sql("CREATE SHARE IF NOT EXISTS sales_share")# 将脱敏视图加入Share
spark.sql("ALTER SHARE sales_share ADD TABLE sales_masked")# 可选:添加分区表或特定版本
# spark.sql("ALTER SHARE sales_share ADD TABLE sales_masked VERSION AS OF 0")

c. 创建Recipient并生成Token

python"># 创建第三方Recipient(公司或用户)
spark.sql("CREATE RECIPIENT IF NOT EXISTS supplier_company")# 生成Bearer Token(长期有效,生产环境建议设置过期时间)
spark.sql("""
ALTER RECIPIENT supplier_company 
SET OPTIONS (bearerToken = 'eyJhbGciOiJSUzI1NiIsImtpZ...'
)
""")

d. 生成共享元数据文件

  • 通过Databricks UI导航到 Delta Sharing → Shares → Export Metadata File,获取共享链接(如s3://<bucket>/share/profile.share)。

3. 安全加固

a. 存储访问控制

  • 在ADLS Gen2中设置RBAC,仅允许Databricks的Managed Identity读取数据。
  • 启用存储防火墙,限制仅允许Databricks工作区IP访问。

b. Databricks权限

  • 使用Databricks的 Table ACLs 限制对底层表的直接访问。
  • 为Delta Share配置只读权限。

c. Token管理

  • 使用Azure Key Vault存储Bearer Token,避免硬编码。
  • 定期轮换Token(需通过Databricks SQL更新Recipient配置)。

4. 第三方访问数据(接收方)

a. 接收方加载共享数据

python">from delta_sharing import DeltaSharingClient# 加载元数据文件(从安全位置获取)
client = DeltaSharingClient(profile="<path-to-profile.json>")# 列出可用表
client.list_all_tables()# 读取数据
df = client.load_table("share_name.sales_masked")
df.show()

b. PySpark直接查询

python"># 配置Delta Sharing Reader
shared_df = (spark.read.format("deltaSharing").option("shareCredentialsFile", "/dbfs/mnt/secure/supplier_credentials.json").load("<profile-url>#sales_share.default.sales_masked")
)# 执行分析查询
shared_df.filter("sales_amount > 150").show()

关键注意事项

  1. 数据实时性:Delta Lake自动更新,接收方始终获取最新版本。
  2. 网络连通性:确保ADLS Gen2允许接收方网络访问(IP白名单或Private Link)。
  3. 成本控制:接收方直接从ADLS Gen2读取数据,流量费用由提供方承担(需提前规划)。
文章来源:https://blog.csdn.net/weixin_30777913/article/details/146433952
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/server/179241.html

相关文章

Dervy数据库

Derby 和 Sqlite 数据库都是无需安装的数据库 Derby 和 Sqlite 数据库的配置与使用_derby sqlite-CSDN博客 Derby数据库简明教程_原味吐司-腾讯云---开发者社区 下载 对于jdk1.8及以上 Apache Derby 10.14.2.0 Release 进入bin 找到 启动服务端 进入bin目录 实际上是启…

GPT-5 将免费向所有用户开放?

GPT-5 将免费向所有用户开放&#xff1f; 硅谷知名分析师 Ben Thompson 最近与 OpenAI CEO Sam Altman 进行了一场深度对谈&#xff0c;其中Sam Altman透漏GPT-5将免费向大家发放。 OpenAI 这波操作可不是一时冲动&#xff0c;而是被逼出来的。DeepSeek 这个新秀横空出世&am…

ECharts实现数据可视化

ECharts实现数据可视化 一、Echarts的简介二、Echarts使用教程1.下载echarts.min.js文件2.编写echarts代码&#xff08;1&#xff09;创建渲染实列&#xff08;2&#xff09;修改option达到预期的效果&#xff08;3&#xff09;创建配置项到实例中 三、Echarts的基础配置四、前…

uv - reference [官方文档翻译]

文章目录 参考CLI 参考文档uv使用方法命令 uv 运行使用方法选项 uv init使用方法参数选项 uv add使用方法参数选项 uv remove使用方法参数选项 uv 同步使用方法选项 uv 锁定使用方法选项 uv 导出使用方法选项 uv tree使用方法选项 uv 工具使用方法命令uv 工具运行使用方法选项u…

mysql 查询进程查看并释放

在MySQL中&#xff0c;查看和管理进程&#xff08;例如查询、连接等&#xff09;是数据库维护和性能调优的重要部分。以下是一些常用的方法来查看MySQL进程并释放它们。 1. 查看进程 你可以使用SHOW PROCESSLIST命令来查看当前MySQL服务器上的所有进程。这个命令会显示正在执…

Unity选择框(魔兽争霸3)

using UnityEngine;public class SelectionBox : MonoBehaviour {private Vector2 startPos;private Vector2 endPos;private bool isDragging false;//边界的宽度public float thickness 5;//区域颜色、边界颜色public Color areaColor Color.white, borderColor Color.wh…

【构建CV图像识别系统】从传统方法到深度学习

目录 1. 图像的基本概念1.1 像素与色彩1.2 过滤与卷积 2. 图像分类与检测3. 图像特征的提取3.1 全局特征3.2 局部特征3.2.1 边缘&#xff08;Edge&#xff09;3.2.2 角点&#xff08;Corner&#xff09;3.2.3 SIFT 特征 4. 传统方法与深度学习在图像识别中的应用4.1 基于传统方…

高斯核函数

高斯核函数的名称比较多&#xff0c;以下名称指的都是高斯核函数&#xff1a; 高斯核函数。 RBF&#xff08;Radial Basis Function Kernel&#xff09;。 径向基函数。 高斯核函数的数学表达式为&#xff1a; 其中&#xff1a; xxx 和 yyy 是输入空间中的两个向量。∥x−y…