Можно ли ограничить учетную запись службы Google указанием c наборов данных BigQuery в рамках проекта? - PullRequest
0 голосов
/ 14 января 2020

Я настроил служебную учетную запись, используя пользовательский интерфейс GCP для определенного c проекта Project X. В пределах Project X есть 3 набора данных:

Dataset 1

Dataset 2

Dataset 3

Если я назначу роль BigQuery Admin на Project X это в настоящее время наследуется всеми 3 наборами данных.

В настоящее время все эти наборы данных наследуют разрешения, назначенные учетной записи службы на уровне проекта. Есть ли способ изменить разрешения для учетной записи службы, чтобы она имела доступ только к указанным наборам данных? например, разрешить доступ к Dataset 1, но не Dataset 2 или Dataset 3.

Возможен ли этот тип конфигурации?

Я пытался добавить условие в пользовательском интерфейсе, но когда я использую тип ресурса Name и установил значение равным Dataset 1, я не могу получить доступ ни к одному из наборов данных - предположительно значение не является правильным. Или набор данных не является допустимым ресурсом имени.

ОБНОВЛЕНИЕ

Добавление более подробной информации о том, что я уже пробовал до публикации, а также более подробной информации о том, что я делаю.

В моем конкретном случае использования я пытаюсь выполнить SQL запросов, а также изменить таблицы в BigQuery через API (используя Python).

Случай A : Я создаю учетную запись службы с ролью 'BigQuery Admin' .

Эта роль распространяется на все наборы данных в проекте - свойство наследуется и я не могу удалить эту роль учетной записи службы из какого-либо из наборов данных.

В этом случае я могу запрашивать все наборы данных и таблицы с помощью Python API - как и следовало ожидать.

Случай B: Я создаю учетную запись службы с без роли по умолчанию .

Роль не передается, и я могу назначить роли для указанных c наборов данных с помощью нажав на 'Поделиться набором данных' в пользовательском интерфейсе, чтобы назначить 'Bi gQuery Admin ' роль для них.

В этом случае я не могу запросить ни один из наборов данных или таблиц и получить следующую ошибку, если я попытаюсь:

*Forbidden: 403 POST https://bigquery.googleapis.com/bq/projects/project-x/jobs: Access Denied: Project X: User does not have bigquery.jobs.create permission in project Project X.*

Несмотря на то, что требуемые разрешения (bigquery.jobs.create в данном случае) существуют для нужного набора данных, я не могу запросить данные, поскольку выясняется, что разрешение bigquery.jobs.create также требуется на уровне проекта для используйте API.

Ответы [ 3 ]

1 голос
/ 15 января 2020

Я публикую решение, которое нашел для этой проблемы, на случай, если оно пригодится любому другому, пытающемуся выполнить sh то же самое.

Назначьте роль "Пользователь задания BigQuery" на уровне проекта, чтобы иметь разрешение bigquery.jobs.create, назначенное учетной записи службы для этого проекта.

Затем можно вручную назначить указанным c наборам данных роль "Редактора данных BigQuery" , чтобы запросить их через API в Python. Сделайте это, нажав кнопку «Поделиться набором данных» в пользовательском интерфейсе BigQuery. Так что для этого примера у меня есть «Shared» Dataset 1 и Dataset 2 с учетной записью службы.

Теперь вы сможете запрашивать наборы данных, для которых вы назначили роль редактора данных BigQuery в Python.

Однако для Dataset 3, для которого роль «Редактор данных BigQuery» не была назначена, при попытке запроса к таблице это должно вернуть ошибку:

Forbidden: 403 Access Denied: Table Project-x:dataset_1.table_1: User does not have permission to query table Project-x:dataset_1.table_1.

Как описано выше, теперь у нас есть достаточные разрешения для доступа к проекту, но не к таблице в Dataset 3 - по проекту.

0 голосов
/ 14 января 2020

Обратите внимание, что доступ к BigQuery может быть предоставлен на уровне проекта или набора данных.

Набор данных - это самый низкий уровень, которому вы можете назначить разрешения, чтобы учетные записи могли получить доступ ко всем ресурсам в наборе данных, например, к таблицам, представлениям, столбцам и строкам. Разрешения на уровне проекта, как вы уже заметили, распространяются (наследие) для всех наборов данных в проекте.

Что касается вашей учетной записи службы, по умолчанию Google Cloud назначает ей структуру, подобную service_accunt_name@example.gserviceaccount.com, и в процессе обмена набором данных, как прокомментировал @rmesteves, вам понадобится этот адрес электронной почты, чтобы предоставить ему желаемое разрешения.

Похоже, что шаги, которые вы описали "Имя типа ресурса", не являются правильными. В пользовательском интерфейсе BigQuery попробуйте:

  1. Нажмите на название набора данных (например, Dataset1 в вашем примере), которым вы хотите поделиться.

  2. Затем в правой части экрана вы увидите опцию «Поделиться набором данных», нажмите на нее.

  3. Следуйте инструкциям для установки до вашей учетной записи службы роль BigQuery , например, администратор BigQuery, владелец данных BigQuery, пользователь BigQuery и другие. Проверьте предыдущую ссылку, чтобы знать, какие функции могут выполнять роли.

0 голосов
/ 14 января 2020

Как видите здесь , вы можете предоставить доступ в своем наборе данных к некоторым объектам, включая учетные записи служб:

электронная почта учетной записи Google : Предоставляет отдельному аккаунту Google доступ к набору данных

Google Group : Предоставляет всем членам группы Google доступ к набору данных Google Apps

Домен : Предоставляет всем пользователям и группам в домене Google доступ к набору данных

Сервисная учетная запись : Предоставляет сервисной учетной записи доступ к набору данных

Любой : Введите «allUsers», чтобы предоставить доступ к общим публикациям c

Все учетные записи Google : введите «allAuthenticatedUsers», чтобы предоставить доступ любому пользователю, вошедшему в учетную запись Google

Я предлагаю вам создать service account без разрешений в BigQuery, а затем предоставить доступ для определенного c набора данных.

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...