Я не хочу создавать сервисные учетные записи для внешних пользователей, с которыми я хочу делиться наборами данных bigquery - каковы последствия этого?

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

def query_stackoverflow():
    client = bigquery.Client()
    query_job = client.query(
        """
        SELECT *
        FROM `myproject.mydata.mytable`
        ORDER BY someColumn DESC
        LIMIT 10"""
    )

    results = query_job.result()

Это работает, но они видят это предупреждение:

UserWarning: ваше приложение прошло аутентификацию с использованием учетных данных конечного пользователя из Google Cloud SDK без проекта квоты. Вы можете получить сообщение об ошибке превышения квоты или не включен API. Мы рекомендуем вам повторно запустить gcloud auth application-default login и убедиться, что проект квоты добавлен. Или вместо этого вы можете использовать учетные записи служб. Для получения дополнительной информации об учетных записях служб см. https://cloud.google.com/docs/authentication/
warnings.warn (_CLOUD_SDK_CREDENTIALS_WARNING)

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

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


person red888    schedule 02.09.2020    source источник


Ответы (1)


quota project используется клиентскими библиотеками и т. Д. Для выставления счетов. Вы можете установить проект квоты с помощью интерфейса командной строки:

Пример команды:

cloud auth application-default set-quota-project my-quota-project

gcloud auth application-default set-quota-project

Просмотрите квоты и ограничения BigQuery и примените их. Это повысит безопасность и минимизирует финансовые риски.

Квоты и ограничения BigQuery

В Google Cloud есть три основных метода авторизации. Учетные данные пользователя, созданные с помощью учетных записей Google (Gmail, G Suite и т. Д.), Учетных записей служб и ключей API.

Предупреждение, которое вы получаете, связано с тем, что Google предпочитает, чтобы приложения использовали учетные записи служб для авторизации вместо учетных данных пользователя. Вы можете отключить это предупреждение в своем коде, но я не рекомендую этого делать. Вместо этого создайте проект квот, создайте учетную запись службы и заблокируйте учетную запись службы, чтобы предоставить только те роли, которые требуются пользователю.

В своем вопросе вы не описываете, как вы используете учетные данные пользователя для получения токена доступа OAuth, необходимого для предоставления доступа к API. Если вы передаете токены, это не очень безопасно. Учетные записи служб можно удалять, ключи учетных записей служб можно менять и т. Д., Обеспечивая более высокий уровень безопасности. Если вы понимаете Google Cloud, я написал статью о том, как использовать олицетворение. Вы можете использовать этот метод, чтобы продолжить использование учетных данных пользователя для олицетворения учетной записи службы без передачи ключей.

Google Cloud - повышение безопасности за счет выдачи себя за другое лицо

PowerShell - выдача себя за учетную запись службы Google

У учетных данных пользователя гораздо более низкие квоты вызовов API, чем у учетных записей служб. Это может привести к сбою программного обеспечения, использующего токены доступа, созданные учетной записью пользователя.

person John Hanley    schedule 02.09.2020
comment
Я думаю, я был сбит с толку, похоже, я должен попросить других пользователей создать свои собственные учетные записи служб в своих собственных проектах gcp, а затем я делюсь своим набором данных с их учетными записями служб, а затем они получают счет за запросы большой системы запросов, верно? Они запрашивают мои большие наборы данных запросов, но оплачивают затраты на запросы / вычисления BQ, верно? - person red888; 03.09.2020
comment
@ red888 Добавление удостоверения учетной записи службы в ваш проект - хорошее решение (управление / безопасность). Однако это не изменит того, кто платит по счету. Плата взимается с проекта, а не с пользователей проекта. - person John Hanley; 03.09.2020
comment
проект, в котором находится сервисный аккаунт, начисляется правильно? они запускают большие запросы к своей учетной записи службы в своем проекте, но получают доступ к моему набору данных, верно? - person red888; 03.09.2020
comment
@ red888 - когда вы создаете учетную запись службы в проекте A и затем добавляете эту идентификацию в проект B, любые ресурсы, к которым осуществляется доступ в проекте B, оплачиваются проекту B. Удостоверение не используется для выставления счетов. Есть несколько исключений, таких как Google Domains, но в Google Cloud взимается плата за проект, которому принадлежит ресурс, а не за пользователей, обращающихся к ресурсу. - person John Hanley; 03.09.2020
comment
^ На самом деле я не думаю, что это верно для большого запроса. Я думаю, что учетная запись службы в проекте A будет использовать свой собственный проект для выполнения запросов к таблицам в проекте B- после того, как таблицы в проекте A будут использоваться совместно с этой учетной записью службы. - person red888; 03.09.2020
comment
@ red888 - В этом ответе эксперта BigQuery Михаила Берлянта говорится, что вы правы насчет биллинга запросов, а я ошибаюсь. Я думал о ресурсе, а не о запросе. Посмотрите, поможет ли этот ответ: stackoverflow.com/a/53952885/8016720 - person John Hanley; 03.09.2020
comment
В этом есть смысл. документация плохая и сбивает с толку. Мне действительно нужно было предоставить пользователю доступ к bigquery.jobs.create в моем проекте, и я не понимал, почему. Забавно, потому что я спросил об этом у поддержки GCP и получил очень тупой и бесполезный ответ. - person red888; 03.09.2020