Amazon web services 如何在Amazon AWS S3 bucket中查找未加密的文件?
我拥有:几个旧的s3存储桶,每个存储桶中有1M个对象,服务器端加密已打开 问题:旧文件未加密。我不能说加密是什么时候开启的。 所以,我需要找到所有未加密的文件 我用Amazon web services 如何在Amazon AWS S3 bucket中查找未加密的文件?,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我拥有:几个旧的s3存储桶,每个存储桶中有1M个对象,服务器端加密已打开 问题:旧文件未加密。我不能说加密是什么时候开启的。 所以,我需要找到所有未加密的文件 我用awscli尝试了解决方案,但速度非常慢-2秒内1个请求 我的解决方案: s3_buckets="uploads tmp logs whatever " for s3_bucket in $s3_buckets; do aws s3 ls s3://$s3_bucket --recursive \ | awk '{pr
awscli
尝试了解决方案,但速度非常慢-2秒内1个请求
我的解决方案:
s3_buckets="uploads tmp logs whatever "
for s3_bucket in $s3_buckets;
do
aws s3 ls s3://$s3_bucket --recursive \
| awk '{print $NF}' \
| ( while read object ;
do
object_status=$(aws s3api head-object --bucket $s3_bucket --key $object --query ServerSideEncryption --output text 2>&1)
if [ "$object_status" != "AES256" ]; then
echo "Unencrypted object $object in s3://$s3_bucket"; >> /tmp/body.tmp
objects_unencrypted=$((objects_unencrypted + 1))
fi
objects_count=$((objects_count + 1))
done
echo "Bucket $s3_bucket has $objects_count, where unencrypted $objects_unencrypted." >> /tmp/body.tmp )
done
那么,也许有更好的解决方案
是否可以创建
Cloudwatch
度量来显示未加密的字段?或者其他的?恐怕没有比列出所有文件并逐个检查加密更好的解决方案了。(另见)
没有关于加密的cloudwatch指标。有关指标的列表,请参阅
也就是说,您可以通过编写python或节点脚本来加快这一过程。它将比上面的shell脚本运行得更快,因为它不需要为每个对象生成一个进程(以及完整的python运行时)
上面的URL给出了节点中的一个示例。Python也是如此
另一种加速进程的方法是并行运行多个脚本,每个脚本都处理名称空间的一部分。假设对象键名称分布均匀(对象键的第一个字母为[a-z],对象键的第一个字母分布均匀):您可以创建26个脚本,每个脚本列出一个字母(所有键以“a”开头,所有键以“b”开头等),并并行运行这些脚本。这将利用S3的大规模并行性。字母示例可以替换为更适合您的用例的任何内容
为了最小化脚本和S3之间的延迟,我将在一个小EC2实例上运行脚本,该实例与您的bucket运行在同一区域。使用
库存列表包含S3存储桶中的对象列表,每个列出对象的元数据包括:
- 加密状态–设置为SSE-S3、SSE-C、SSE-KMS或NOT-SSE。SSE-S3、SSE-KMS和带有客户提供密钥(SSE-C)的SSE的服务器端加密状态。NOT-SSE状态表示对象未使用服务器端加密进行加密