云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

数据库服务器_linux服务器系统_优惠券

小七 141 0

数据库中粗粒度数据安全的最佳实践

在Databricks,我们与数百家公司合作,他们都在各自的行业中处于领先地位。我们希望共享保护数据的模式,以便您的组织能够利用最佳实践,而不是在您加入Databricks的统一分析平台时重新创建轮子。这篇文章主要针对那些在组织中管理数据的人。这意味着控制对某些数据的访问并维护哪些用户可以访问哪些数据。导言和背景在深入了解您将要做什么的细节之前,让我们确保我们有适当的词汇表,以确保您能够迅速扭转局面并在您的组织中实施。DBFS公司Databricks文件系统(DBFS)作为由S3支持的文件系统提供给每个客户。它比HDFS具有更高的可伸缩性,可在所有集群节点上使用,并为S3存储桶提供了一个简单的分布式文件系统接口。德布提尔斯dbutils是一个简单的实用程序,用于在Python或Scala中的Databricks笔记本中执行一些与Databricks相关的操作。它们提供了许多命令来帮助您在S3存储桶中导航;但是,最相关的是fs模块。运行以下代码将把一个S3 bucket作为挂载点。dbutils.fs.安装("s3a://data-science prototype bucket/","/mnt/prototype")这在路径/mnt/prototype/的所有集群节点上都可用。或者等效地,dbfs:/mnt/prototype/这意味着我们可以像写HDFS一样将一个DataFrame写到这个路径(以及下面的任何目录),但是DBFS将写入S3 bucket。df.write.parquet("/mnt/prototype/bill/recommendation-engine-v1/")简言之,DBFS使S3看起来更像一个文件系统,其中的挂载点使特定的S3存储桶作为文件系统的一部分进行访问。它实际上只是一个别名或快捷方式,允许将一个S3物理路径重新路由到另一个逻辑路径。当然,用户必须能够访问目的地S3 bucket才能访问数据。接下来的几节将介绍安全访问S3存储桶的不同方法。IAM角色与密钥在AWS上,有两种不同的方法可以将数据写入S3。您可以使用IAM角色或访问密钥执行此操作。在功能上,IAM角色和键可以互换使用。您可以在Databricks集群上使用这两种方法之一,也可以将它们与DBFS结合使用。当您使用DBFS装载具有S3路径的bucket时,如果该路径与IAM角色关联,那么集群中作为IAM角色一部分的所有节点和用户都将具有对该装载路径的读写访问权限。例如,dbutils.fs.安装("s3a://data-science prototype bucket/","/mnt/prototype")只能由具有访问该特定存储桶的IAM角色的计算机读取。相比之下,当您使用AWS密钥和s3路径挂载bucket时,如下面的片段所示,dbutils.fs.安装("s3a://KEY:SECRET_KEY@数据科学原型桶/","/mnt/prototype")然后,根据该密钥的访问控制策略,该装载点将在组织级别可用。这意味着任何集群都能够将数据读取(并可能写入)到该装载点。控制粗粒度数据访问现在我们介绍了各种定义术语,让我们来探讨如何真正保护我们的数据。所有这些访问控制措施都是在行政级别执行的。也就是说,个人用户不应该设置这些,只有管理员才应该设置。注意:由于密钥可以被复制或泄露,所以它们不是访问数据源的最安全的方法。一般来说,您应该选择IAM角色来代替键。最安全:通道的明确隔离在Databricks中,最安全的设置是在创建集群时定义IAM角色。对于这个IAM角色,向S3 bucket添加grant访问权限,如读和写。使用群集访问控制,可以通过这些IAM角色控制哪些用户有权访问哪些数据。S3存储桶在左侧,我们有两种类型的集群,一种是用于开发工作的共享自动调整集群,它有权读写原型S3存储桶(和挂载点)的权限,另一种是可以从生产存储桶(B)读写的生产集群。它应该不言而喻,但是下面的代码运行在共享的Autoscaling或Databricks无服务器集群上,df.write.parquet("/mnt/production/some/location")将失败,因为与该群集关联的IAM角色不包括对bucket B的访问权限。对于希望在集群级别限制访问并确保生产数据不会与原型数据混合的工程组织来说,这是一种常见的模式。这些IAM角色的示例策略可能是。{"Version":"2012-10-17","声明":[{"Effect":"允许","行动":["s3:列表桶"],"资源":["arn:aws公司:s3:::bucket-a/*"]},{"Effect":"允许","行动":["s3:PutObject","s3:获取对象","s3:删除对象"],"资源":["arn:aws公司:s3:::bucket-a/*"]}]}安全:协作访问另一种类似但安全性稍差的模式更适用于跨集群协作的数据科学团队。在这种情况下,来自所有集群的一些数据应该是只读的,例如,为了培训和测试不同的数据科学模型,但是写入该位置应该是一个特权操作。在这个架构中,我们将安装两个带钥匙的桶。生产铲斗以只读权限安装。使用DBFS时,这些键将从视图中隐藏(与使用原始S3不同)。或者,也可以只指定具有IAM角色的只读访问权限。但是,默认情况下,不能在所有集群上访问此装载。您必须确保启动具有IAM角色的集群。这意味着下面的代码在任何集群上都可以正常工作。spark.read.拼花地板("/mnt/read/prod/some/data")但是,此代码在任何集群上都会失败。df.write.parquet("/mnt/read/prod/some/data")这是因为S3密钥没有适当的权限。在这个结构中,您会注意到,我们可以用多种方式挂载同一个s3bucket;我们甚至可以在不同的位置挂载不同的前缀(目录)。将数据实际写入生产存储桶的唯一方法是使用适当的IAM角色并像下面的片段中那样写入特定位置。df.write.parquet("/mnt/production/some/data/location")这种模式可以帮助管理员确保生产数据不会被用户意外地覆盖,同时仍然可以让最终用户更普遍地访问这些数据。最不安全:仅密钥访问s3bucket的最后一种访问模式是只使用AWS访问密钥。因为密钥很容易被复制或泄露,所以我们不建议在Databricks中使用这种数据访问模式。结论在这篇文章中,我们概述了一些保护和控制对Databricks统一分析平台上数据访问的最佳实践。使用DBFS,我们可以使用AWS密钥和IAM角色将同一个bucket装载到多个目录。我们可以利用这些机制,使一些数据通常可供阅读而非书写。下一篇文章将介绍如何解决Databricks企业安全性(DBES)中的细粒度访问控制。免费试用Databricks。今天就开始吧