Amazon web services Athena存储查询结果的最佳实践

Amazon web services Athena存储查询结果的最佳实践,amazon-web-services,aws-glue,amazon-athena,aws-glue-data-catalog,Amazon Web Services,Aws Glue,Amazon Athena,Aws Glue Data Catalog,我正在创建一个数据湖,在Glue目录中有一些表需要在Athena中查询。作为先决条件,Athena要求我们将查询结果存储在S3存储桶中。我有“临时”和“日志”S3存储桶。但是,由于这是客户机敏感数据,我只想检查一下,我应该为此创建一个新的Athena存储桶,还是使用现有的temp/logs存储桶 注意:我以后不会使用Athena查询。你说得很好——Amazon Athena查询的输出将出现在输出文件中,包括敏感数据 您可以创建一个只允许写访问的存储桶,也就是说,在其上设置一个拒绝策略,这样就没有

我正在创建一个数据湖,在Glue目录中有一些表需要在Athena中查询。作为先决条件,Athena要求我们将查询结果存储在S3存储桶中。我有“临时”和“日志”S3存储桶。但是,由于这是客户机敏感数据,我只想检查一下,我应该为此创建一个新的Athena存储桶,还是使用现有的temp/logs存储桶


注意:我以后不会使用Athena查询。

你说得很好——Amazon Athena查询的输出将出现在输出文件中,包括敏感数据

您可以创建一个只允许写访问的存储桶,也就是说,在其上设置一个拒绝策略,这样就没有人可以从该存储桶中获取对象。这样,雅典娜很乐意写出它的输出,但人们看不到结果

您还可以应用Amazon S3生命周期策略,在一天后删除文件

另一种方法是在创建对象后立即触发AWS Lambda函数,并让Lambda函数删除该对象


无论哪种方式,如果人们不需要访问结果,或者如果有敏感数据正在检索,请他们将Athena输出定向到该存储桶。

我还想补充一点,Athena还保存了一个历史记录,其中可能包含敏感数据,例如PII,如果这些数据出现在您的查询中

假设以下数据、DDL和查询:

数据:

breed_id, breen_name, category
1,pug,toy
2,German Shepard, working,
3,Scottish Terrier, Working
CREATE EXTERNAL TABLE default.dogs (
  `breed_id` int, 
  `breed_name` string, 
  `category` string
)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
  LINES TERMINATED BY '\n' 
LOCATION
  's3://stack-exchange/48836509'
TBLPROPERTIES ('skip.header.line.count'='1')
DDL:

breed_id, breen_name, category
1,pug,toy
2,German Shepard, working,
3,Scottish Terrier, Working
CREATE EXTERNAL TABLE default.dogs (
  `breed_id` int, 
  `breed_name` string, 
  `category` string
)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
  LINES TERMINATED BY '\n' 
LOCATION
  's3://stack-exchange/48836509'
TBLPROPERTIES ('skip.header.line.count'='1')
查询

SELECT * FROM default.dogs WHERE breed_name = 'pug'
SELECT * FROM default.dogs WHERE breed_name = 'German Shepard'
我们可以在控制台中看到这些:


基于这些,我相信此历史记录会存储45天。

似乎我无法在GetObject的存储桶上设置拒绝策略。这样做的时候,我也看不到我在雅典娜询问的结果。我已经应用了生命周期策略。为了增加安全性,我还将KMS密钥附加到桶上。哦,KMS是个好主意!未访问KMS密钥的用户将无法访问该对象。