如何在Python中更有效地审计GCP存储桶中的数千个对象

问题描述 投票:1回答:1

我正在编写一个使用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()

以上内容被附加到列表中,然后我最终迭代列表并检查权限。

你可以想象这需要花费一些时间来成千上万的对象,所以我想知道是否有人以更有效的方式做到了这一点?或许我应该使用更现代的谷歌云库?

python google-api google-cloud-storage
1个回答
1
投票

如果您的目标是处理每个对象的访问控制列表,则API支持返回对象的完整访问控制,作为存储桶列表的一部分。这可以节省对API的往返,以检索每个对象的访问控制。看起来你可以通过在projectiongoogle-cloud-python函数中将list_blobs设置为“full”来实现这一点。

gsutil -p your-project ls -L gs://*/**还会为您提供your-project中对象的所有访问控制的文本转储。

最后,为了使审计在未来更容易,您可以考虑使用IAM管理存储桶或项目级别的访问权限,但这取决于您的用例。

© www.soinside.com 2019 - 2024. All rights reserved.