如何解决如何使用本机AWS功能通过分区保护对雅典娜/胶水表的访问
我有一个使用启用了身份验证的Amplify的react应用。该应用程序拥有许多用户,所有whome都是一个“客户端”的成员,仅此而已。
我希望能够使用IAM将对Glue表中数据的访问限制为属于客户端成员的用户,以便使我的安全层尽可能靠近数据层。
我在表中有一个“ clientid”分区。该表由s3存储桶支持,每个客户端的数据存储在自己的“ clientid = xxxxxx”文件夹中。该表是由Glue作业创建的,最后在“ write_dynamic_frame” 方法中具有以下选项,从而创建了文件夹。
{"partitionKeys": ["clientid"]},
我的第一个想法是使用前端中的clientid将用户的客户ID烘焙到查询中以仅选择其分区,但是很明显,这很容易滥用。
然后,我尝试使用Glue搜寻器扫描现有表的s3存储桶,希望如果我取消选中“为每个S3路径创建一个架构” ,则将为每个文件夹创建一个表。选项。但是,搜寻器将文件夹“视为”分区(可能至少部分是由于配置单元的分区结构所致),而我又得到了一个表。
有成千上万的客户和TB的数据,因此在周围移动/重命名数据以及手动创建表是不可行的。
请帮助!
解决方法
我假设您已经有一种机制可以为前端的每个用户分配一个IAM角色(单个或每个客户端),否则这是一个大话题,应该是它自己的问题。
解决问题的最基本方法是确保IAM角色仅对允许用户访问的分区的前缀具有s3:GetObject
权限。这意味着用户只能访问自己的数据,如果尝试访问其他用户的数据将收到错误消息。不过,他们可以通过尝试不同的组合并观察查询未命中任何分区(这是允许的,因为不会访问任何文件,这是允许的)与查询命中分区(这将查询不存在任何分区)之间的区别,从而潜在地寻找有效的客户端ID。不允许)。
我认为最好为每个客户端创建表甚至数据库,这将允许您也将权限置于Glue数据目录级别,而不允许根本不允许查询用户自己的其他数据库/表。不幸的是,Glue Crawlers不会为您提供帮助,他们的工作能力有限,会尝试以无益的方式提供帮助。您可以使用Glue数据目录API轻松创建这些表,而不必移动任何数据,只需将表的位置指向当前分区的位置即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。