验证Google Cloud Data Store C#SDK

时间:2019-03-18 09:01:11

标签: google-cloud-datastore

我正在尝试在运行于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上运行时,无需采取任何措施   验证。

但这似乎不起作用。

朝正确方向的推动将不胜感激(:

2 个答案:

答案 0 :(得分:0)

我建议使用K8s机密存储服务帐户密钥,然后在运行时将其安装在吊舱中。见下文:

  1. 为所需的应用程序创建服务帐户。
  2. 生成并编码服务帐户密钥:只需为上一步中新创建的服务帐户生成一个.json密钥,然后使用base64 -w 0 key-file-name对其进行编码。这很重要:K8S希望秘密的内容是Base64编码的。
  3. 创建K8s秘密清单文件(请参阅下面的内容),然后应用它。

    apiVersion: v1 kind: Secret metadata: name: your-service-sa-key-k8s-secret type: Opaque data: sa_json: previously_generated_base64_encoding

  4. 安装秘密。

       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();

来自:https://github.com/googleapis/google-cloud-dotnet/blob/master/apis/Google.Cloud.Datastore.V1/Google.Cloud.Datastore.V1/DatastoreClient.cs