Как отправить токен учетной записи в запросе в Google Cloud Functions - PullRequest
0 голосов
/ 10 июля 2019

Я запускаю простую функцию в Google Cloud Functions для обновления DNS-записей ( см. Код здесь ). В настоящее время я создаю служебную учетную запись с привилегиями roles/dns.admin и назначаю ее функции. Затем я полагаюсь на бета-поддержку функций для аутентификации и авторизации клиентов.

Альтернативным подходом может быть НЕ предоставление учетных данных учетной записи службы (с roles/dns.admin) для функции, а передача учетных данных в каждом запросе.

Как я могу сделать это с помощью среды выполнения Go - Как я могу использовать токен на предъявителя из запроса с клиентом Google API Go?

Плюсы / минусы в этих двух подходах?

Ответы [ 3 ]

1 голос
/ 10 июля 2019

В GCF вы можете запросить это, чтобы получить токен.

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H" Метаданные: Google "

Ссылка: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#applications

0 голосов
/ 16 июля 2019

Я нашел способ передать токен доступа, исходящий из запроса, в клиент Google API Go. Вот как я создаю клиента (r - входящий http.Request):

ctx := context.Background()

auth := r.Header.Get("Authorization")
token := strings.TrimPrefix(auth, "Bearer ")
ts := oauth2.StaticTokenSource(
    &oauth2.Token{AccessToken: token},
)
c := oauth2.NewClient(ctx, ts)

dnsService, err := dns.New(c)

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

0 голосов
/ 11 июля 2019

Облачная функция должна иметь возможность использовать свои учетные данные для авторизации запроса, получая учетные данные по умолчанию и передавая их в клиенте DNS.

Подробнее см. Здесь: Настройка аутентификации для серверных производственных приложений

...