Получение IAM-токена сервисного аккаунта с помощью функции
Если версия функции создана с сервисным аккаунтом, вы можете получить для него IAM-токен из:
- контекста обработчика. IAM-токен находится в поле
access_token
параметраcontext
. - сервиса метаданных в формате Google Compute Engine с помощью API.
Чтобы получить IAM-токен:
-
Создайте функцию. При создании первой версии функции выберите среду выполнения Node.js или Python.
-
Отключите опцию Добавить файлы с примерами кода.
-
Нажмите кнопку Продолжить.
-
В блоке Способ выберите ZIP-архив.
-
Подготовьте ZIP-архив с кодом функции:
Node.jsPython-
Сохраните следующий код в файл с названием
index.js
, чтобы получить IAM-токен:-
из контекста обработчика:
exports.main = async function (event, context) { return { 'statusCode': 200, 'headers': { 'Content-Type': 'text/plain' }, 'isBase64Encoded': false, 'body': context.token } };
-
с помощью API:
const fetch = require("node-fetch"); let url = 'http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token'; let headers = {'Metadata-Flavor': 'Google'}; exports.main = async function (event) { const resp = await fetch(url, { headers: headers, }); return { code: resp.status, body: await resp.text() }; };
-
-
Если будете получать IAM-токен с помощью API, сохраните следующий код в файл с названием
package.json
:{ "name": "my-app", "dependencies": { "node-fetch": "2.x" } }
-
Добавьте файл
index.js
и, если будете получать IAM-токен с помощью API, файлpackage.json
в ZIP-архивindex-js.zip
. -
Нажмите Прикрепить файл и выберите подготовленный ZIP-архив
index-js.zip
.
-
Сохраните следующий код в файл с названием
index.py
, чтобы получить IAM-токен:-
из контекста обработчика:
def main(event, context): return { 'statusCode': 200, 'headers': { 'Content-Type': 'text/plain' }, 'isBase64Encoded': False, 'body': context.token }
-
с помощью API:
import requests url = 'http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token' headers = {'Metadata-Flavor': 'Google'} def main(event, context): resp = requests.get(url, headers=headers) return { 'statusCode': 200, 'headers': { 'Content-Type': 'text/plain' }, 'isBase64Encoded': False, 'body': resp.content.decode('UTF-8') }
-
-
-
Создайте версию функции.
-
В поле Точка входа укажите
index.main
. -
В блоке Параметры выберите сервисный аккаунт, для которого нужно получить IAM-токен, или создайте новый.
-
-
Выполните функцию.
В случае успешного выполнения функции вы получите следующий ответ:
{ "statusCode": 200, "headers": {"Content-Type": "text/plain"}, "isBase64Encoded": false, "body": { "access_token": "t1.9euelZrPm5O********", "expires_in": 43200, "token_type": "Bearer" } }