如何在Python中更有效地审计GCP存储桶中的数千个对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Python中更有效地审计GCP存储桶中的数千个对象相关的知识,希望对你有一定的参考价值。
我正在编写一个使用Google的google-api-python-client浏览大量存储对象的程序,但我想知道是否有一种更有效的方式我可以忽略它?
目前我们总共有大约35_000个对象,我正在逐个遍历每个对象。
所以首先我得到一个桶列表:
from googleapiclient import discovery
from oauth2client.service_account import ServiceAccountCredentials
credentials = ServiceAccountCredentials.from_json_keyfile_name('keyfile')
session = discovery.build('storage', 'v1', credentials=credentials)
def list_buckets():
all_buckets = session.buckets().list(project='project').execute()
return [bucket['name'] for bucket in all_buckets['items']]
然后我遍历我的桶列表并返回一个对象列表:
for bucket in list_buckets():
all_objects = session.objects().list(bucket=bucket)
然后我将上面结果中的每个名称和bucket_name附加到一个namedtuple,我再循环一次:
for obj in all_objects:
bucket_session = session.objectAccessControls().list(
bucket=obj.bucket,
object=obj.name).execute()
以上内容被附加到列表中,然后我最终迭代列表并检查权限。
你可以想象这需要花费一些时间来成千上万的对象,所以我想知道是否有人以更有效的方式做到了这一点?或许我应该使用更现代的谷歌云库?
如果您的目标是处理每个对象的访问控制列表,则API支持返回对象的完整访问控制,作为存储桶列表的一部分。这可以节省对API的往返,以检索每个对象的访问控制。看起来你可以通过在projection
的google-cloud-python
函数中将list_blobs设置为“full”来实现这一点。
gsutil -p your-project ls -L gs://*/**
还会为您提供your-project
中对象的所有访问控制的文本转储。
最后,为了使审计在未来更容易,您可以考虑使用IAM管理存储桶或项目级别的访问权限,但这取决于您的用例。
以上是关于如何在Python中更有效地审计GCP存储桶中的数千个对象的主要内容,如果未能解决你的问题,请参考以下文章
如何仅将目录下许多子目录中的文件复制到 GCP 中的另一个项目存储桶中?
GCP apache气流,如何从私有存储库安装Python依赖项
程序员如何在百忙中更有效地利用时间,如何不走岔路,不白忙(忙得要有效率,要有收获)-----https://www.cnblogs.com/JavaArchitect/p/9080484.html(示