Получение IAM-токена сервисного аккаунта с помощью функции
Если версия функции создана с сервисным аккаунтом, вы можете получить для него IAM-токен из:
- контекста обработчика. IAM-токен находится в поле
access_token
параметраcontext
. - сервиса метаданных в формате Google Compute Engine с помощью API.
Чтобы получить IAM-токен:
-
Создайте функцию.
-
Выберите язык программирования и создайте версию функции:
Node.jsPython- Подготовьте ZIP-архив с кодом функции:
- Сохраните следующий код в файл с названием
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
.
- Сохраните следующий код в файл с названием
- Создайте версию функции. Укажите:
- среду выполнения —
nodejs16
; - способ загрузки кода —
ZIP-архив
; - файл —
index-js.zip
; - точку входа —
index.main
; - сервисный аккаунт, для которого нужно получить IAM-токен.
- среду выполнения —
- Подготовьте 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.py
в ZIP-архивindex-py.zip
.
- Сохраните следующий код в файл с названием
- Создайте версию функции. Укажите:
- среду выполнения —
python311
; - способ загрузки кода —
ZIP-архив
; - файл —
index-py.zip
; - точку входа —
index.main
; - сервисный аккаунт, для которого нужно получить IAM-токен.
- среду выполнения —
- Подготовьте ZIP-архив с кодом функции:
-
Выполните функцию.
Ответ функции будет выглядеть следующим образом:
{ "access_token": "CggVAgAAABoBMRKABHGgpZ......", "expires_in": 42299, "token_type": "Bearer" }