首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用雅典娜时,基于分区Id的s3细粒度访问控制是可能的吗?

使用雅典娜时,基于分区Id的s3细粒度访问控制是可能的吗?
EN

Stack Overflow用户
提问于 2022-09-22 14:30:56
回答 1查看 30关注 0票数 0

我们使用S3作为我们的数据湖,它以customerId作为partitionId。雅典娜被用来查询这个数据湖。

在DDB和S3中查询数据时,我们使用细粒度访问控制(使用SDK).

是否也有方法使用雅典娜来确保细粒度的访问控制也在存储级别实施,而不是仅仅基于内存中的customerId进行过滤?

EN

回答 1

Stack Overflow用户

发布于 2022-10-14 12:18:43

雅典娜中的权限(假设您不使用Lake )是雅典娜、Glue和S3权限的组合。S3权限是最重要的权限,因为它们控制用户可以访问哪些数据。

如果您的数据是按客户ID进行分区的,这意味着每个客户的数据在S3上有一个不同的前缀。当您为用户创建IAM权限时,您将能够将该用户的权限范围限定为一个或多个前缀。

以下是仅在特定前缀中授予GetObject权限的IAM语句的片段。

代码语言:javascript
复制
{
  "Effect": "Allow",
  "Action": ["s3:GetObject"],
  "Resource": ["arn:aws:s3:::bucket_name/prefix_including_customer_id/*"]
}

Resource值是一个数组,您可以指定多个前缀。

您还需要授予s3:ListBucket权限。如果获取对象列表不敏感,则可以为整个桶授予此权限,否则需要一条稍微不同的语句将列表权限限制为相同的前缀:

代码语言:javascript
复制
{
  "Effect": "Allow",
  "Action": ["s3:ListBucket"],
  "Resource": ["arn:aws:s3:::bucket_name"],
  "Condition": {
    "StringLike": {
      "s3:prefix": ["prefix_including_customer_id/*"]
    }
  }
}

如果策略包含这些类型的语句,则只允许用户读取他们可以访问的对象,并且尝试读取其他对象,例如运行像SELECT * FROM customer_data这样的查询将导致访问拒绝错误。只有当它们运行一个对与它们有权访问的S3前缀匹配的分区键进行筛选的查询时,查询才会成功。

用户仍然能够看到分区键的所有值(只是看不到分区内的数据),这是不可避免的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73816448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档