Aka*_*jan 0 python google-cloud-storage google-cloud-platform
有什么方法可以检查GCP云存储中的文件在Python中是公共的还是私有的?
GCP 文档此处具有make_public
或 的功能make_private
,但找不到任何内容来检查文件是否公开。
Google Cloud Storage 有两个控制访问的系统。IAM 和 ACL。除非启用下一个功能,否则两者可以同时使用。
存储桶支持统一存储桶级别访问(也称为“仅限存储桶策略”),这会禁用 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)
归档时间: |
|
查看次数: |
859 次 |
最近记录: |