目前我们将google云凭证放在json文件中,并通过GOOGLE_APPLICATION_CREDENTIALS环境变量进行设置。
但是出于安全原因,我们不想在json文件中硬编码私钥。我们想把私钥放在Azure密钥库中(是的,我们使用Azure密钥库),是否有一种方法可以以编程方式向GCP提供凭据。这样我就可以阅读azure密钥库并通过代码提供私钥。我试图检查和使用GoogleCredentials
和谷歌DefaultCredentialsProvider
等类,但我找不到一个合适的例子。
任何帮助都非常感谢。
- 将Azure Key Vault中编码的服务帐户JSON base64存储为字符串
- 从Key Vault读取字符串并将base64解码回JSON字符串
- 使用名称类似于from_service_account_info()的SDK成员方法之一加载JSON字符串(Python SDK)。
如果你想从Azure保险库加载一个秘密,John的答案是正确的。
但是,如果您在Google Cloud环境中需要服务帐户凭证,则不需要服务帐户密钥文件,您可以使用自动加载到元数据服务器中的服务帐户
在几乎所有的Google Cloud服务中,您都可以自定义要使用的服务帐户。在最坏的情况下,您需要为上下文使用默认的服务帐户,并为其授予正确的权限。
在Google Cloud产品上使用服务帐户密钥文件不是一个好的做法。这是一个长期存在的证书,你必须轮换自己,保守秘密,……
我们在java中使用类似的东西从凭据详细信息创建Bigquery
import com.google.auth.oauth2.ServiceAccountCredentials;
import com.google.cloud.bigquery.BigQuery;
ServiceAccountCredentials serviceAccountCredentials = ServiceAccountCredentials.newBuilder()
.setClientId()
.setClientEmail()
.setPrivateKey()
.setPrivateKeyId()
.setProjectId()
.setTokenServerUri()
.build();
BigQuery bigquery = BigQueryOptions.newBuilder()
.setCredentials(serviceAccountCredentials)
.build()
.getService();