如何在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的往返,以检索每个对象的访问控制。看起来你可以通过在projectiongoogle-cloud-python函数中将list_blobs设置为“full”来实现这一点。

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

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

以上是关于如何在Python中更有效地审计GCP存储桶中的数千个对象的主要内容,如果未能解决你的问题,请参考以下文章

如何仅将目录下许多子目录中的文件复制到 GCP 中的另一个项目存储桶中?

如何在 C++ 中更有效地只生成这么多排列?

GCP apache气流,如何从私有存储库安装Python依赖项

程序员如何在百忙中更有效地利用时间,如何不走岔路,不白忙(忙得要有效率,要有收获)-----https://www.cnblogs.com/JavaArchitect/p/9080484.html(示

GCP 存储桶可在 UI 中访问,但不能通过 Cloud Shell 中的 gcsfuse

如何将旧 S3 存储桶中的 Terraform 状态移动到新的 S3 存储桶?