Amazon web services Athena存储查询结果的最佳实践
我正在创建一个数据湖,在Glue目录中有一些表需要在Athena中查询。作为先决条件,Athena要求我们将查询结果存储在S3存储桶中。我有“临时”和“日志”S3存储桶。但是,由于这是客户机敏感数据,我只想检查一下,我应该为此创建一个新的Athena存储桶,还是使用现有的temp/logs存储桶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查询的输出将出现在输出文件中,包括敏感数据 您可以创建一个只允许写访问的存储桶,也就是说,在其上设置一个拒绝策略,这样就没有
注意:我以后不会使用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密钥的用户将无法访问该对象。