Google Cloud: как добавить роль пользователя сервиса в отдельную корзину? - PullRequest
0 голосов
/ 10 октября 2018

Я создал пользователя службы:

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

1 Ответ

0 голосов
/ 10 октября 2018

Чтобы пользователь мог работать с корзиной, ему нужно предоставить полномочия для работы с корзиной.Это достигается с разрешениями.Разрешения могут быть объединены в роли, и мы можем дать пользователю роль, которая означает, что у пользователя будет эта роль.

Например, пользователю может быть назначена роль «Администратор хранилища», и затем он сможетвыполнить работу со всеми сегментами в вашем проекте.

Если это слишком много, вы можете выбрать НЕ давать пользователю «Администратор хранилища», и тогда ему не будет разрешен доступ к любому сегменту.Очевидно, что это слишком ограничительно.Затем вы можете выбрать отдельные группы, к которым вы хотите, чтобы пользователь имел доступ, и для каждого из этих блоков изменить разрешения для этих групп.В рамках прав доступа вы можете называть пользователей и роли.Только для этого сегмента именованный пользователь будет иметь именованную роль.

Подробнее см. Создание и управление списками контроля доступа (ACL) .

...