Фон
Рассмотрим функцию func NewApp(ctx context.Context, config *Config, opts ...option.ClientOption) (*App, error)
.
Теоретически должна быть возможность переопределить идентификатор проекта через config
параметр .
Однако проблема заключается в том, что при извлечении учетных данных также определяется идентификатор проекта, и это происходит за до переопределить через config
(или через GOOGLE_CLOUD_PROJECT
/ GCLOUD_PROJECT
env. переменные в этом отношении.)
В результате токен будет для идентификатора проекта по умолчанию, а не для переопределенного.
Подробные шаги
Предположим, мы используем «учетную запись службы по умолчанию» согласно здесь :
Если переменная среды не задана, ADC использует учетную запись службы по умолчанию, которую предоставляют Compute Engine, Kubernetes Engine, App Engine и облачные функции для приложений, работающих на этих службах.
Вот что произойдет в этом случае:
creds, err := transport.Creds(ctx, o...)
return internal.Creds(ctx, &ds)
cred, err := google.FindDefaultCredentials(ctx, ds.Scopes...)
id, _ := metadata.ProjectID() // (x) at this point we get the default project ID
func ProjectID() (string, error) { return defaultClient.ProjectID() }
func (c *Client) ProjectID() (string, error) { return projID.get(c) }
v, err = cl.Get(c.k)
val, _, err := c.getETag(suffix)
res, err := c.hc.Do(req)
Короче говоря, мы получаем учетные данные с идентификатором проекта по умолчанию.
Вопрос: Я что-то упустил или действительно нет способа переопределить идентификатор проекта при использованииучетная запись службы по умолчанию?
Приложение: Возможно, проблема не в projectID
в учетных данных, а в получении токена на предъявителя с настроенным там идентификатором проекта по умолчанию.Базовый вопрос («как переопределить проект») все еще актуален.