如何检查GCP存储中的文件是否公开?

Aka*_*jan 0 python google-cloud-storage google-cloud-platform

有什么方法可以检查GCP云存储中的文件在Python中是公共的还是私有的?

GCP 文档此处具有make_public或 的功能make_private,但找不到任何内容来检查文件是否公开。

Joh*_*ley 6

Google Cloud Storage 有两个控制访问的系统。IAM 和 ACL。除非启用下一个功能,否则两者可以同时使用。

存储桶支持统一存储桶级别访问(也称为“仅限存储桶策略”),这会禁用 ACL。

以下示例首先处理一个存储桶。如果未启用统一访问,则也会处理该对象。如果存储桶或对象启用了公共访问,则该对象是公共的。

从 GitHub 下载下面的示例代码

统一桶级访问

身份和访问管理

访问控制列表 (ACL)

import  sys
from google.cloud import storage

# Replace with valid bucket and object names
bucket_name = 'example_bucket_name'
object_name = 'example_object_name'

# Instantiates a client
storage_client = storage.Client()

# Process bucket level access
def process_bucket(bucketName):
    bucket = storage_client.get_bucket(bucketName)

    configuration = bucket.iam_configuration
    uniformEnabled = configuration['uniformBucketLevelAccess']['enabled']

    public = False

    policy = bucket.get_iam_policy()

    for binding in policy.bindings:
        for m in binding['members']:
            if m == 'allUsers':
                public = True

    print('Bucket:', bucketName)
    print('  Uniform Access:', uniformEnabled)
    print('  Public:', public)

    return uniformEnabled

# Process blob level access
def process_object(bucketName, objectName):
    bucket = storage_client.get_bucket(bucketName)

    blob = bucket.blob(objectName)

    policy = blob.get_iam_policy()

    public = False

    for binding in policy.bindings:
        for m in binding['members']:
            if m == 'allUsers':
                public = True

    print('Object: gs://{0}/{1}'.format(bucketName, objectName))
    print('  Public:', public)

if __name__ == '__main__':
    try:
        uniform_enabled = process_bucket(bucket_name)
        if uniform_enabled is False:
            process_object(bucket_name, object_name)
    except Exception as ex:
        print("Exception: {}".format(ex), file=sys.stderr)
        sys.exit(1)
Run Code Online (Sandbox Code Playgroud)