我正在尝试在 GCP Marketplace 上部署应用程序,但我很难理解身份验证文档。根据文档,需要
https://www.googleapis.com/auth/cloud-platform
的 OAuth 范围以及指向身份验证文档的链接,但是这些文档只是告诉您“使用其中一个客户端库”
我尝试使用的 API 是合作伙伴采购 API,虽然
@google-cloud/procurement
处存在 Node.js 客户端,但文档中与权利和帐户相关的绝大多数方法都没有作为方法公开,仅与似乎是某种遗留“订单”系统的功能相关。
我也不确定它是否是正确的客户端库,因为在检查了它的源代码后,我可以看到API主机是cloudcommerceconsumerprocurement.googleapis.com
而不是cloudcommerceprocurement.googleapis.com
以下是我想调用的API: https://cloud.google.com/marketplace/docs/partners/commerce-procurement-api/reference/rest/v1/providers.entitlements
如何从 Google Cloud Run 服务调用这些 API?有什么方法可以使用
google-gax
通过身份验证调用这些 API 端点吗?通常,对于客户端库,一切都“正常工作”,这要归功于它们在 GCP 中运行时从环境变量中读取身份验证
请接受以下注意事项:
所有这些说明,以下内容应该适合您(进行一些调整)。
package.json
{
"name": "78392854",
"version": "0.0.1",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"google-auth-library": "^9.9.0",
"googleapis": "^135.0.0"
}
}
如果您在本地运行,则可以使用
gcloud auth application-default login
创建 应用程序默认凭据 (ADC)。
如果您在云平台上运行,ADC 会自动执行,但您需要创建一个服务帐户(见下文)和/或创建一个特定的服务帐户。无论哪种方式,您都需要确定要使用哪个 IAM 角色
我不知道该服务需要哪些 IAM 角色(请参阅 IAM 角色)
PROJECT="..."
ACCOUNT="..."
ROLE="..."
gcloud iam service-accounts create ${ACCOUNT} \
--project=${PROJECT}
EMAIL=$(ACCOUNT}@${PROJECT}.iam.gserviceaccount.com
gcloud iam service-accounts keys create \
${PWD}/${ACCOUNT}.json \
--iam-account=${EMAIL}
gcloud projects add-iam-policy-binding ${PROJECT} --member=serviceAccount:${EMAIL} \
--role=${ROLE}
export GOOGLE_APPLICATION_CREDENTIALS=${PWD}/${ACCOUNT}.json
这是一个大纲(!)应用程序:
index.js
:
const { google } = require("googleapis");
const { GoogleAuth } = require("google-auth-library");
const discoveryUrl = "https://cloudcommerceprocurement.googleapis.com/$discovery/rest?version=v1";
// Unsure what you need to provide here or whether "provides/*" will work
// This "parent" property changes by the method used
// GET https://cloudcommerceprocurement.googleapis.com/v1/{parent=providers/*}/accounts
const parent = `providers/*`;
async function main() {
const auth = new GoogleAuth({
scopes: 'https://www.googleapis.com/auth/cloud-platform'
});
const discovery = await google.discoverAPI(discoveryUrl,{ auth });
// https://cloud.google.com/marketplace/docs/partners/commerce-procurement-api/reference/rest/v1/providers.accounts/list
const response = await discovery.providers.accounts.list({
parent: parent,
});
console.log(response);
}
main();