我正在尝试在运行于Google云的k8容器中对Google数据存储区c#SDK进行身份验证。 除了使用GOOGLE_APPLICATION_CREDENTIALS环境变量外,我无法找到将account.json文件注入DatastoreDb或DatastoreClient的任何方法。 使用GOOGLE_APPLICATION_CREDENTIALS环境变量是有问题的,因为我不想让帐户文件暴露。
根据https://googleapis.github.io/google-cloud-dotnet/docs/Google.Cloud.Datastore.V1/index.html
中的文档在Google Cloud Platform上运行时,无需采取任何措施 验证。
但这似乎不起作用。
朝正确方向的推动将不胜感激(:
答案 0 :(得分:0)
我建议使用K8s机密存储服务帐户密钥,然后在运行时将其安装在吊舱中。见下文:
.json
密钥,然后使用base64 -w 0 key-file-name
对其进行编码。这很重要:K8S希望秘密的内容是Base64编码的。创建K8s秘密清单文件(请参阅下面的内容),然后应用它。
apiVersion: v1
kind: Secret
metadata:
name: your-service-sa-key-k8s-secret
type: Opaque
data:
sa_json: previously_generated_base64_encoding
安装秘密。
volumes: - name: service-account-credentials-volume secret: secretName: your-service-sa-key-k8s-secret items: - key: sa_json path: secrets/sa_credentials.json
现在您要做的就是将GOOGLE_APPLICATION_CRENDENTIALS设置为secrets / sa_credentials.json。
希望这会有所帮助。抱歉(急忙格式化)。
答案 1 :(得分:0)
这是可以做到的:
var credential = GoogleCredential.FromFile(@"/path/to/google.credentials.json").CreateScoped(DatastoreClient.DefaultScopes); var channel = new Grpc.Core.Channel(DatastoreClient.DefaultEndpoint.ToString(), credential.ToChannelCredentials()); DatastoreClient client = DatastoreClient.Create(channel, settings: DatastoreSettings.GetDefault()); DatastoreDb db = DatastoreDb.Create(YOUR_PROJECT_ID, client:client); // Do Datastore stuff... // Shutdown the channel when it is no longer required. await channel.ShutdownAsync();