摘要
Meta 通过隐私意识基础设施(PAI)中的政策区域(Policy Zones)技术,实现了大规模数据流的目的限制,确保用户数据仅用于明确允许的用途,从而有效保护用户隐私。
要点总结
-
政策区域技术:Meta 开发的政策区域技术通过实时控制数据流,确保数据仅用于允许的目的,解决了传统点检查控制的不足。
-
数据流控制:政策区域在基于函数和批处理系统中深度集成,确保数据在不同系统间流动时仍受隐私约束。
-
大规模应用:通过政策区域管理器(PZM),Meta 能够高效地在数十个系统中实施和监控隐私要求,减少工程工作量。
-
经验教训:Meta 在实施过程中总结了多个关键教训,包括简化集成复杂性、早期投资于计算效率、以及构建必要的工具来提升开发者体验。
-
未来展望:Meta 将继续扩展 PAI 的能力,以应对更广泛的隐私需求,并探索新的技术领域,确保用户隐私得到持久保护。
前言
在 Meta,我们一直努力将隐私融入各个软件系统中。今天,我们很高兴分享一些属于我们隐私意识基础设施(Privacy Aware Infrastructure, PAI)计划的创新技术。这些技术标志着我们持续致力于尊重用户隐私的重要里程碑。
PAI 提供了高效、可靠的一流隐私构件,嵌入在 Meta 的基础设施中,以应对复杂的隐私问题。例如,我们构建了跨基础设施应用的政策区域(Policy Zones),以应对数据使用的限制,如仅用于允许的目的,并提供强有力的保证,以限制数据处理的目的。
随着我们在 Meta 扩展 PAI,并提升其成熟度,我们获取了重要的经验教训。我们对技术的理解不断演变,揭示了创建一个包含库、工具套件、集成等的统一生态系统所需的投资大于最初计划。这些投资在执行复杂的目的限制场景时至关重要,同时确保可扩展性、可靠性以及优化开发者体验。
目的限制是数据保护的核心原则,旨在确保数据仅用于明确说明的目的,以保护用户隐私。目的限制的关键在于管理数据在系统和服务之间的流动。通常,目的限制依赖于数据处理时的“检查点”控制。这种方法涉及在代码(“代码资产”)中使用简单的 if 语句或在数据系统中对数据集(“数据资产”)使用访问控制机制。然而,这种方法可能不够稳健,因为它需要频繁和全面的代码审查,以确保这些控制的持续有效性,尤其是随着代码库的演变。此外,访问控制机制管理不同数据集的权限,以反映不同的目的,使用访问控制列表(ACL)等机制,这要求将数据物理分隔到不同的资产中,以确保每个资产保持单一目的。当 Meta 开始处理跨越数十个系统的更大范围的目的限制需求时,这些点检查控制并未扩展。
在 Meta,数百万个数据资产对于驱动我们的产品生态系统、优化个性化体验的机器学习模型,以及确保我们的产品高质量并符合用户期望至关重要。由于复杂的传播需求和需要不断修订的权限模型,识别哪些代码分支和数据资产需要保护变得具有挑战性。例如,当数据消费者从一个数据资产(“源”)读取并将输出存储到另一个资产(“汇”)时,点检查控制需要复杂的协调,以确保从源到汇的传播,这在操作上可能不可行。
为了解决这个问题,可以通过利用数据流信号来增强点检查控制。数据流可以通过多种技术(如静态代码分析、日志记录以及查询后的处理)来跟踪来自相同来源的相关数据。这创建了一个称为“数据沿袭”(data lineage)的图,跟踪源数据资产与汇数据资产之间的关系。通过利用数据沿袭,可以基于这些源到汇关系对相关数据资产应用权限。尽管在小规模上点检查和数据沿袭的结合是可行的,但由于点检查仍然需要审计许多单独的资产,因此会导致显著的运营开销。
在最新的迭代中,基于这些见解,我们发现信息流控制(Information Flow Control, IFC)模型提供了一种更持久且可持续的方法,通过实时控制数据的访问以及数据的处理和传输,而不是依赖点检查或带外审计。因此,我们开发了政策区域(Policy Zones)作为我们的基于 IFC 的技术,并将其集成到 Meta 的主要系统中,以增强我们的目的限制能力。这项努力后来扩展为隐私意识基础设施(PAI)计划,这是一项变革性投资,将一流的隐私支持整合到 Meta 的基础设施系统中。
我们相信 PAI 是在大规模上保护人们隐私的正确投资,能够有效执行目的限制要求。
为什么要投资政策区域(Policy Zones)?
通过多年来部署目的限制解决方案的经验,我们总结了几个重要的学习点:
需求 | 问题 | 解决方案 |
程序控制
|
|
|
粒度流控制
|
|
|
可适应和可扩展的控制
|
|
|
政策区域(Policy Zones)的工作原理
让我们深入了解政策区域(Policy Zones)是什么,以及我们如何利用它来满足目的限制的要求。政策区域(Policy Zones)提供了一种全面的机制,用于封装、评估和传播数据在“传输中”和“静态”状态下的隐私约束,包括不同系统之间的过渡。它在运行时评估约束、上下文传播,并与众多数据和代码框架(如HHVM、Presto、和Spark)深度集成,代表了我们在信息流控制方面的重大进步。
为了使解释更易于理解,并为严肃的话题带来一些轻松感,我们将使用一个简单的例子:假设出现了一个新要求,香蕉数据只能用于制作奶昔和水果篮,而不能用于制作香蕉面包。为简单起见,这个例子及下面的插图仅演示了上述表格的第一行。
开发人员如何利用政策区域(Policy Zones)来实现这样的要求?
首先,为了划定相关数据资产,他们为不同粒度的数据资产分配一个元数据标签(“数据注释”,例如,BANANA_DATA)。这个注释与目的限制要求相关联,作为一组数据流规则,使系统能够理解数据的允许目的。
当已注释数据被处理时,政策区域(Policy Zones)会启动并检查数据处理是否被允许,数据是否可以向下流动。政策区域(Policy Zones)已嵌入到 Meta 的不同系统中,包括:
-
基于函数的系统,在不同编程语言中通过函数调用栈加载、处理和传播数据。例如,Web 前端、中间层和后端服务。 -
批处理系统,批量处理数据行(主要通过SQL)。例如,实时和数据仓库系统,支持 Meta 的 AI 和分析工作负载。
接下来,我们深入探讨政策区域(Policy Zones)在基于函数的系统中的工作原理,尽管相同的逻辑适用于批处理系统。
在基于函数的系统中,数据通过参数、变量或返回值在函数调用栈中传递。
让我们通过一个例子来逐步说明:
-
一个 Web 请求“BananaRequest”从 BananaDB 加载已注释的数据,导致数据流违规,因为调用者的意图未知。 -
为了补救数据流违规,我们为 BananaRequest 注释 BANANA_DATA 标签,为请求创建一个区域(“Banana Zone”)。 -
在运行时,政策区域(Policy Zones)程序性地检查所有数据流是否符合基于上下文的流规则,标记 BananaRequest 到 logB 和 logC 的新数据流违规。 -
我们将 logB 注释为香蕉,并移除将香蕉数据记录到 logC 的内容,以切断不允许的数据流。 -
在所有数据流违规得到补救后,区域可以从记录模式切换到强制模式。如果开发人员在区域外添加写入操作,则会自动阻止。
在更复杂的场景中,一个来自 Web 请求“BreakfastRequest”的函数“makeBananaSmoothie()”调用另一个函数“makeBanana()”。除了之前的数据流违规,我们还需要补救另一个数据流违规:makeBanana() 将香蕉数据返回给 makeBananaSmoothie()。这意味着我们可以从 makeBananaSmoothie() 创建一个“Banana Zone”,其中包括它直接或间接调用的所有函数。
在批处理系统中,数据按批处理来自被标注为含有相关数据的表中的行。当一个作业运行一个查询(通常基于 SQL)来处理数据时,会创建一个区域,政策区域(Policy Zones)会标记任何数据流违规。补救选项与基于函数的系统类似。一旦所有违规得到补救,该区域可以从记录模式切换到强制模式,以防止未来的数据流违规。数据注释可以在各种粒度层次上进行,包括表、列、行甚至单元格。
当数据在不同系统之间流动(例如从前端到数据仓库,再到 AI 时),政策区域(Policy Zones)确保相关数据被正确注释,从而根据要求继续受到保护。对于尚未集成政策区域(Policy Zones)的某些系统,仍然使用点检查控制来保护数据。
我们如何在大规模现有系统中应用 PAI
上述内容让您一窥技术如何用于推出简单用例。然而,在数十或数百个系统中采用政策区域(Policy Zones)并不是一项简单的任务。需求所有者通常与 Meta 内的其他工程师(代码和数据资产的所有者)合作,以实施该需求的不同方面。在某些情况下,这可能涉及数百或数千名工程师以完成实施和审计。为了解决这一挑战,PAI 提供了政策区域(Policy Zones)管理器(Policy Zone Manager, PZM),这是一套用户体验工具,帮助需求所有者高效地使用 PAI 执行隐私要求。
让我们看看 PZM 如何帮助人们在现有系统中满足目的限制需求,以上述香蕉需求为例。从高层次来看,需求所有者通过 PZM 完成以下工作流程:
-
识别相关资产:识别哪些源资产需要根据给定要求进行目的限制。 -
发现相关数据流:发现源资产的下游数据流,以便大规模集成政策区域(Policy Zones)。 -
补救数据流违规:允许人们选择补救数据流违规的选项。 -
持续执行和监控数据流:启用政策区域(Policy Zones)执行并监控,以防止新的数据流违规。
要了解更多关于这一过程的信息,请查看我们在 2024 年 6 月 PEPR 会议上的演讲。
步骤 1 – 识别相关资产
对于给定的需求,我们检查相关的产品入口(例如,移动应用、Web 请求和数据库),以确定所收集的数据资产。这些资产可能以请求参数、数据库条目或事件日志条目的形式出现。我们使用数据结构来表示(“模式化”)这些数据资产及其字段,以捕获在不同粒度下的相关数据。在运行示例中,香蕉数据库中的一张表可能完全包含香蕉数据、单个香蕉列,或混合其他水果数据。
除了手动代码检查,我们还大量依赖各种技术,如我们的可扩展 ML 分类器,以自动识别数据资产。
步骤 2 – 发现相关数据流
从给定的已注释源,需求所有者可以识别其下游数据流和汇(见下图)。然后,所有者可以决定如何处理这些数据流。然而,当许多数据流距离相同来源有一跳或多跳时,此过程可能会耗时。这通常发生在实施新要求时,需要在现有数据流上进行操作。
尽管数据沿袭为点检查机制带来了显著的操作开销,但它可以有效识别在代码库中集成政策区域(Policy Zones)的位置。因此,我们已将数据沿袭集成到 PZM 中,允许需求所有者同时发现来自给定源的多个下游资产。一旦需求完全实施,我们就可以仅依赖政策区域(Policy Zones)来执行要求。
步骤 3 – 补救数据流违规
默认情况下,从源资产到汇的数据显示流必须满足源资产的所有要求。如果没有,则视为数据流违规,需要通过政策区域(Policy Zones)在运行时程序性地进行补救。补救数据流违规的主要情况有三种(使用运行示例帮助具体化一般情况):
-
情况 1:安全流 – 相关数据用于允许的目的:将香蕉注释分配给汇资产。 -
情况 2:不安全流 – 相关数据用于不允许的目的:阻止数据访问和代码执行,以防止香蕉数据的进一步处理。 -
情况 3:重新分类流 – 相关数据未被使用或传播:将数据流注释为重新分类为被允许。源中的香蕉数据未被使用或传播到汇。
步骤 4 – 持续执行和监控数据流
PAI 集成到我们的主要数据系统中,以在运行时检查数据流并捕获违规。在新要求的初始推出阶段,政策区域(Policy Zones)可以配置为允许在“记录模式”下补救流违规。一旦启用政策区域(Policy Zones)执行,任何未修复违规的数据流将被拒绝。这还防止了新的数据流违规,即使代码发生更改或添加了新代码。
PAI 持续监控要求的执行,以确保其正常运行。PZM 提供了一套验证器,以检查资产注释和控制配置的准确性。
在 Meta 大规模采用的经验教训
随着 PAI 在 Meta 的众多目的限制要求中被采用,我们在过去几年中学到了几个关键教训:
专注于先解决一个特定的端到端用例
最初,我们为批处理系统开发政策区域(Policy Zones),并设定了一些基本用例。然而,我们意识到针对基于函数的系统的设计相当抽象,且在大规模用例的采用中遇到了重大挑战,导致需要大量精力将模式映射到客户需求。此外,完善 API 和构建缺失的操作支持使其在多个系统中有效运行。只有在解决了这些挑战后,我们才能使其更具通用性,并继续在广泛的平台上集成政策区域(Policy Zones)。
简化集成复杂性
将 PAI 一致地集成到 Meta 主要系统中是一个复杂、漫长且具有挑战性的过程。我们在与 Meta 多样化系统的广泛集成中遇到了重大困难。我们花费了数年时间克服这些挑战。例如,最初,产品团队在不同数据系统中对数据资产进行模式化时付出了相当大的努力。随后,我们开发了可靠、计算高效且广泛适用的 PAI 库,覆盖多种编程语言(Hack、C++、Python 等),使其与 Meta 的广泛系统更顺利地集成。
早期投资于计算和开发人员效率
我们还进行了多次迭代,以简化 PAI 并提高其计算效率。我们最初的注释 API 过于复杂,导致工程师的认知负担过重。此外,在 Meta 高吞吐量系统中,数据流检查的计算开销过于高昂。通过几轮的优化,我们简化了政策格的表示和评估,构建了语言级特性以便本地传播政策区域(Policy Zones)上下文,并规范化了政策注释结构,从而实现了计算效率提升至10倍。
简化和独立的注释是扩展至广泛需求的必要条件
最初,我们采用一个单一的注释 API 来建模复杂的数据流规则,并注释相关的代码和数据。然而,随着来自多个需求的数据结合,从源到汇传播这些注释变得越来越复杂,导致数据注释冲突难以解决。为了解决这一挑战,我们实施了简化的数据注释,以解耦数据与需求,并为不同需求分离数据流规则。这大大简化了注释过程,最终改善了开发者体验。
构建工具是必要的
我们付出了重大努力,以确保使用 PAI 变得简单高效,最终改善了开发者体验。最初,我们首先专注于技术的正确性,然后再投资于工具。采用政策区域(Policy Zones)需要大量的手动工作,工程师很难理解如何正确注释他们的资产,这导致后续需要进行额外的清理工作。为了解决这个问题,我们开发了 PZM 工具系列,其中包括内置的自动规则和分类器。这些工具引导团队通过标准工作流程,确保安全高效地推出目的限制要求,并将工程工作量减少了几个数量级。
为每个人提供持久的隐私保护
Meta 一直以来致力于保护用户隐私,这是我们核心价值观的重要组成部分。PAI 计划是高效、可靠地保护数据和维护隐私的重要一步。它为 Meta 可持续应对隐私挑战、满足高可靠性标准以及更高效地解决未来隐私问题提供了坚实基础。虽然我们已经打下了良好的基础,但我们的旅程才刚刚开始。我们希望在此基础上,扩展我们的能力和控制,以满足更广泛的隐私需求,提升开发者体验,并探索新领域。
我们希望我们的工作能够激发创新,并促进行业在隐私领域的合作。
以上内容编译自 Meta
原文始发于微信公众号(RedTeam):Meta 是如何做数据安全的:PAI 隐私意识基础设施
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论