Я просматриваю руководство Google OAuth 2.0 for Server to Server Applications и пытаюсь использовать учетные данные учетной записи службы для вызова API Google.Ограничение разрешения учетной записи Google Service?
У меня есть объект data
, который содержит учетные данные, проанализированные из файла ключей JSON.
def get_bigquery_service():
# ... Read and parse JSON Key file
scope = ["https://www.googleapis.com/auth/bigquery"]
credentials = SignedJwtAssertionCredentials(
data['client_email'],
data['private_key'],
scope=scope)
http = httplib2.Http()
http = credentials.authorize(http)
return build("bigquery", "v2", http=http)
Тогда я буду иметь доступ к BigQuery API, потому что я утверждал, что это в scope
.
Моя забота заключается в том, что я не вижу никакой опции, которая позволяет мне фактически ограничить учетную запись службы, чтобы иметь возможность использовать BigQuery API в консоли разработчика Google. Предположим, что если файл учетных данных был случайно просочился другим, они могут по существу сделать что-либо для любых моих услуг, просто объявив, что они хотят получить доступ в scope
.
Можно ли каким-либо образом ограничить разрешение, которое имеют учетные записи службы?
Хм. Но у меня уже есть огромное количество исторических данных в Project A, которые нельзя перенести в Project B. –
вам не нужно переносить данные, просто скажите, скажите BigQuery, что ProjectB может заглянуть в данные ProjectA (разрешения на чтение) –
Обратите внимание, что вы имеют два варианта предоставления доступа для чтения: (1) вы можете добавить учетную запись Project B в качестве Project Reader в Project A. Это даст доступ к чтению всех наборов данных Project A, а также доступ к доступу к состоянию проекта Project A. (2) вы можете добавить служебную учетную запись Project B к конкретным наборам данных в Project A, которые вы хотите разделить. Это даст доступ к чтению только для этих наборов данных. В любом случае учетная запись службы проекта B будет отправлять задания запроса в проект B, который считывает таблицы в проекте A. Вам нужно будет использовать полностью квалифицированные ссылки на таблицы, то есть «[projectA: dataset.table]». –