Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 谷歌云:如何将服务用户的角色添加到单个bucket中?_Google Cloud Platform_Google Cloud Storage_Google Iam - Fatal编程技术网

Google cloud platform 谷歌云:如何将服务用户的角色添加到单个bucket中?

Google cloud platform 谷歌云:如何将服务用户的角色添加到单个bucket中?,google-cloud-platform,google-cloud-storage,google-iam,Google Cloud Platform,Google Cloud Storage,Google Iam,我创建了一个服务用户: gcloud iam service-accounts create test01 --display-name "test01" 我让他完全可以访问云存储: gcloud projects add-iam-policy-binding project-name \ --member serviceAccount:test01@project-name.iam.gserviceaccount.com \ --role roles/storage.admin 此代码适用

我创建了一个服务用户:

gcloud iam service-accounts create test01 --display-name "test01"
我让他完全可以访问云存储:

gcloud projects add-iam-policy-binding project-name \
--member serviceAccount:test01@project-name.iam.gserviceaccount.com \
--role roles/storage.admin
此代码适用于:

from google.cloud import storage
client = storage.Client()

buckets = list(client.list_buckets())
print(buckets)

bucket = client.get_bucket('bucket-name')
print list(bucket.list_blobs())
但是我的项目针对不同的环境有多个bucket,出于安全原因,我只想为每个用户添加一个bucket

在中,我找到了以下文本:

当应用于单个铲斗时,控制仅应用于指定的铲斗和铲斗内的对象

如何将
角色/storage.admin
应用于单个bucket

更新:
我尝试了ACL,但出现了一个问题:我添加了对用户的访问权限:

gsutil iam ch \
  serviceAccount:test01@project-name.iam.gserviceaccount.com:legacyBucketOwner \
  gs://bucket-name
用户可以列出所有文件、添加文件、创建文件、查看自己的文件。
但是用户无法查看其他用户的文件

更新2:
我更新了默认ACL:

gsutil defacl ch -u \
  test01@project-name.iam.gserviceaccount.com:OWNER gs://bucket-name
我等了很长时间,由另一个用户创建了另一个文件,但它仍然无法通过
test01
访问

解决方案:
我从零开始做的,很有效:

gsutil mb -p example-logs -c regional -l EUROPE-WEST2 gs://example-dev
gcloud iam service-accounts create test-dev --display-name "test-dev"
gcloud iam service-accounts create test-second --display-name "test-second"
# download 2 json keys from https://console.cloud.google.com/iam-admin/serviceaccounts
gsutil iam ch serviceAccount:test-dev@example-logs.iam.gserviceaccount.com:legacyBucketOwner gs://example-dev
gsutil iam ch serviceAccount:test-second@example-logs.iam.gserviceaccount.com:legacyBucketOwner gs://example-dev
gsutil defacl ch -u test-dev@example-logs.iam.gserviceaccount.com:OWNER gs://example-dev

为了让用户使用bucket,必须授予该用户使用该bucket的权限。这是通过权限实现的。权限可以绑定到角色中,我们可以给用户一个角色,这意味着用户将拥有该角色

例如,用户可以被赋予“存储管理员”角色,然后可以对项目中的所有存储桶执行工作

如果这太多,那么您可以选择不给用户“Storage Admin”,这样就不允许用户访问任何bucket。显然,这限制太大了。然后,您可以选择希望用户访问的各个bucket,并为每个bucket更改这些bucket的权限。在bucket的权限范围内,您可以命名用户和角色。对于该bucket,命名用户将具有命名角色


有关更多详细信息,请参阅。

可以考虑一个类似Linux文件系统的存储桶。在该模型中,bucket类似于目录,现在您为用户添加了处理目录中新文件的权限,但与Linux一样,bucket中的对象也可以拥有自己的权限。是否您放置在该目录中的对象没有权限让您所需的用户能够读取它们?也许可以试试:
gsutil ls-L gs://BUCKET/OBJECT
我明白了,但是我怎样才能让一个主用户完全访问BUCKET呢?如果另一个用户(例如控制台中的gsutil)创建了一个文件,则主用户无法访问该文件。在linux中,我可以使用
setfacl
来访问新文件。但我不知道如何使用水桶。让我看看我是否理解。我认为您希望创建一个bucket(XYZ),并且希望用户ABC能够完全访问该bucket。用户ABC可以创建、删除、读取bucket中的对象。但是,如果另一个用户创建了一个对象,您会发现ABC无法访问它吗?是这样吗?看起来我们可以为bucket中新创建的对象指定默认ACL。看见还要注意一个重要的注意事项,更改生效可能需要30秒。我恐怕无法重新创建此问题。不过,如果可以的话,我很乐意提供帮助。我在这里创建了一个聊天室,在那里我们可以更详细地聊天,如果需要的话,还可以进行屏幕共享。。。。