我正在编写一项服务,需要不同租户访问 GCP 服务。 我的微服务将在不同的主机上运行(无 GCP)。 我面临的限制之一是使用服务帐户密钥授权 api 调用。 第二个约束是我的微服务负责为服务帐户生成密钥对并与租户共享公钥,以便他们可以将其上传到他们的服务帐户。
我当前的问题是,我找不到任何文档来解释如何使用我拥有的密钥对对 GCP golang 库进行身份验证。我读过的所有文档始终解决服务帐户密钥身份验证问题,假设您将让 GCP 为您生成密钥对,并且您已经拥有包含所需所有详细信息的 json 文件。
我已审阅的文档:
- https://cloud.google.com/docs/authentication/client-libraries#adc
- https://cloud.google.com/docs/authentication#service-accounts
- https://cloud.google.com/docs/authentication/provide-credentials-adc#local-key
- https://github.com/GoogleCloudPlatform/golang-samples/blob/main/auth/id_token_from_service_account.go
Google 图书馆使用一种名为“应用程序默认凭据”的机制,让其所有图书馆都能找到用于身份验证的凭据。具体来说,在这种情况下,ADC 始终需要 json 文件才能获取凭据的详细信息。
json 文件如下所示:
{
"type": "service_account",
"project_id": "my-project",
"private_key_id": "1ed3aae07f98f3e6da78ad308b41232133d006cf",
"private_key": "-----BEGIN PRIVATE KEY-----\n...==\n-----END PRIVATE KEY-----\n",
"client_email": "<EMAIL HERE>",
"client_id": "1234567890102",
"auth_uri": "<GOOGLE AUTH URI HERE>",
"token_uri": "<GOOGLE TOKEN URI HERE>",
"auth_provider_x509_cert_url": "<SOME GOOGLE URL HERE>",
"client_x509_cert_url": "<MORE GOOGLE URL HERE>",
"universe_domain": "googleapis.com"
}
所以我的问题是,如何从生成的密钥对构建这个 json 文件? 如果这是不可能的(GCP 限制),那么为什么我能够上传密钥对? 有没有人可以指出我的例子来帮助我解决这种情况?
非常感谢任何帮助
我已经查看了所有 GCP 官方文档、API 参考和 Github 脚本示例。它们都没有引用上传的服务帐户密钥
您需要使用 projects.serviceAccounts.keys.upload 方法。