Создать псевдоним для электронной почты аккаунта службы Google? - PullRequest
2 голосов
/ 01 августа 2020

Я предоставил доступ к таблице Google с адресом электронной почты моей учетной записи службы Google, который выглядит примерно так:

myappname-service@myappname-266229.iam.gserviceaccount.com

Это позволяет моему приложению получить доступ к этой таблице Google.

Я хотел бы иметь возможность поделиться листом Google с настраиваемым адресом электронной почты (например, google@myappname.com), связанным с этим уродливым автоматически созданным адресом электронной почты служебного аккаунта (myappname-service@myappname-266229.iam.gserviceaccount.com).

Как я мог go об этом?

изменить:

Пример кода, используемого для взаимодействия с API Google

from google_auth_httplib2 import AuthorizedHttp
from google.oauth2 import service_account
import pygsheets

def _get_gc():
    scope = ['https://www.googleapis.com/auth/spreadsheets']
    credentials = service_account.Credentials.from_service_account_file(
        settings.GOOGLE_SERVICE_AUTH_FILE,
        scopes=scope,
    )
    http = AuthorizedHttp(credentials, http=HTTP)
    logger.info('Created GC creds, returning...')
    return pygsheets.authorize(custom_credentials=credentials, http=http)


def do_something(url):
    gc = _get_gc()
    spreadsheet = gc.open_by_url(url)

1 Ответ

1 голос
/ 04 августа 2020

Проблема - учетные записи служб не могут иметь псевдонимов:

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

  • Имя соответствующего проекта.
  • Имя учетной записи службы.

Вы не можете указать это дополнительно aliases.

Обходной путь - Выдавайте себя за обычную учетную запись:

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

1. Делегирование полномочий на уровне домена:

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

enter image description here

Important: You need to be an administrator of the G Suite domain in order to delegate domain-wide authority.

2. Impersonating:

At this point, your service account can impersonate any user in the account. To actually impersonate an account, you would just need to specify which account you want to impersonate when building the credentials.

In your specific case, you would need to provide the parameter subject when calling from_service_account_file, as you can see on the domain-wide delegation section of на этой странице :

    credentials = service_account.Credentials.from_service_account_file(
        settings.GOOGLE_SERVICE_AUTH_FILE,
        scopes=scope,
        subject="your-account@your-domain.com"
    )

Ссылка:

...