Я сделал следующее, и все это работает до момента, когда последний токен используется для вызова облачной функции.
Я создал учетную запись службы (SP) в Project 2 с помощью Service- Роли Account-Token-Creator и Cloud-Functions-Invoker. Я также создал другую учетную запись службы (s c) в Project 1 с помощью Service-Account-Token-Creator. Я отредактировал привязки IAM для SP, чтобы позволить S C создавать краткосрочные учетные данные через роль Service-Account-Token-Creator.
Этот код ниже, в Project 1, работает в CloudRun и с учетной записью службы S C в качестве учетной записи службы по умолчанию для данного экземпляра.
Не уверен, что действительно не так, но все, что я пытаюсь сделать, это выдать себя за SP, а затем иметь возможность вызвать облачная функция в учетной записи SP.
Любая помощь в том, что происходит не так, может помочь.
import { Compute } from 'google-auth-library';
const client = new Compute({
// Specifying the service account email is optional.
serviceAccountEmail:
'sc@swaymeebusinessapp.iam.gserviceaccount.com',
});
const res = await client.request<{
accessToken: string;
expireTime: string;
}>({
url:
'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/sp@<project-di>.iam.gserviceaccount.com:generateAccessToken',
method: 'POST',
data: JSON.stringify({
delegates: [],
scope: ['https://www.googleapis.com/auth/cloud-platform'],
lifetime: '300s',
}),
});
request.http.headers.set(
'Authorization',
`Bearer ${res.data.accessToken}`
);
Ошибка, которую я получил при вызове облачной функции в проекте 2:
https://us-central1-project-2.cloudfunctions.net/project-2-alpha-TestFunction: 401: Unauthorized