Я создал пользователя службы:
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())
Но в моем проекте есть несколько сегментов для разных сред, и из соображений безопасности я хочу добавить доступ для только одного сегмента на пользователя.
В документации я нашел этот текст:
При применении к отдельному контейнеру управление применяется только к указанному блоку и объектам внутри блока.
Как применить roles/storage.admin
к отдельному ведру?
Обновление:
Я попробовал 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