如何在不使用 json 文件的情况下使用 SecretManagerServiceClient 的服务帐户凭据

How to use the Service Account credentials for SecretManagerServiceClient without using a json file

我正在使用以下代码访问服务帐户凭据,不确定,因为秘密管理器在其 Create() 中不接受凭据,所以我尝试了 https://cloud.google.com/docs/authentication/production#passing_code 中的第二种方法。 我做错了什么?

        var text = File.ReadAllText(@"cred.json");
        JObject credential = JObject.Parse(text);

        SecretManagerServiceClientBuilder secretManagerServiceClientBuilder = new SecretManagerServiceClientBuilder()
        {
            JsonCredentials = o1,
        };
        SecretManagerServiceClient client = secretManagerServiceClientBuilder.Build();
        // Create the client.
        client = SecretManagerServiceClient.Create();

找到解决方案 -

可以通过两种方式通过代码访问服务帐户 -

  1. 检查 API 是否像存储桶一样接受创建方法中的凭据,然后使用第一种方法。

        var credential = GoogleCredential.FromFile(jsonPath);
        var storage = StorageClient.Create(credential);
    
  2. 如果 create() 不接受参数,则使用该构建器 API 就像秘密管理器的 SecretManagerServiceClientBuilder,KMS 的 KeyManagementServiceClientBuilder。只需将创建部分替换为构建器部分即可。

    var text = File.ReadAllText(@"cred.json");
    SecretManagerServiceClientBuilder secretManagerServiceClientBuilder = new SecretManagerServiceClientBuilder()
    {
        JsonCredentials = text,
    };
    SecretManagerServiceClient client = secretManagerServiceClientBuilder.Build();
          SecretVersionName secretVersionName = new SecretVersionName(projectId, secretId, secretVersionId);
    
        // Call the API.
        AccessSecretVersionResponse result = client.AccessSecretVersion(secretVersionName);
    
        // Convert the payload to a string. Payloads are bytes by default.
        String payload = result.Payload.Data.ToStringUtf8();