0

在Google Cloud Platform中启用了DataProc API。我正在使用我用来访问GCS和Big查询的相同密钥来创建每个this example的新群集。我在下面一行中遇到了一个Request had insufficient authentication scopes错误。使用Google Cloud Dataproc创建群集时,请求的认证范围不足[403]

Operation createOperation = 
      service.Projects.Regions.Clusters.Create(newCluster, project, dataprocGlobalRegion).Execute(); 

我的完整代码:

public static class DataProcClient 
    { 
    public static void Test() 
    { 
     string project = ConfigurationManager.AppSettings["Google.ProjectName"]; ; 
     string dataprocGlobalRegion = "global"; 
     string zone = "us-east1-b"; 
     string machineType = "n1-standard-4"; 
     string clusterName = "sample-cluster"; 
     int numWorkers = 2; 

     String serviceAccountEmail= ConfigurationManager.AppSettings["Google.ServiceAccountEmail"]; 
     String certificateFile = ConfigurationManager.AppSettings["KeyDirectory"] + ConfigurationManager.AppSettings["Google.CertificateFile"]; 
     X509Certificate2 certificate = new X509Certificate2(certificateFile, "notasecret", X509KeyStorageFlags.Exportable); 

     ServiceAccountCredential credential = new ServiceAccountCredential(
       new ServiceAccountCredential.Initializer(serviceAccountEmail) 
       { 
        Scopes = new[] { StorageService.Scope.DevstorageFullControl } 
       }.FromCertificate(certificate)); 

     DataprocService service = new DataprocService(
      new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = credential, 
       ApplicationName = "Dataproc Sample", 
      }); 

     // Create a new cluster: 
     Cluster newCluster = new Cluster 
     { 
      ClusterName = clusterName, 
      Config = new ClusterConfig 
      { 
      GceClusterConfig = new GceClusterConfig 
      { 
       ZoneUri = String.Format(
        "https://www.googleapis.com/compute/v1/projects/{0}/zones/{1}", 
        project, zone), 
      }, 
      MasterConfig = new InstanceGroupConfig 
      { 
       NumInstances = 1, 
       MachineTypeUri = String.Format(
        "https://www.googleapis.com/compute/v1/projects/{0}/zones/{1}/machineTypes/{2}", 
        project, zone, machineType), 
      }, 
      WorkerConfig = new InstanceGroupConfig 
      { 
       NumInstances = numWorkers, 
       MachineTypeUri = String.Format(
        "https://www.googleapis.com/compute/v1/projects/{0}/zones/{1}/machineTypes/{2}", 
        project, zone, machineType), 
      }, 
      }, 
     }; 

     Operation createOperation = 
      service.Projects.Regions.Clusters.Create(newCluster, project, dataprocGlobalRegion).Execute(); 
     // Poll the operation: 
     while (!IsDone(createOperation)) 
     { 
      Console.WriteLine("Polling operation {0}", createOperation.Name); 
      createOperation = 
       service.Projects.Regions.Operations.Get(createOperation.Name).Execute(); 
      Thread.Sleep(1000); 
     } 
    } 
    static bool IsDone(Operation op) 
    { 
     return op.Done ?? false; 
    } 
    } 

回答

1

在创建ServiceAccountCredential,更改:

new[] { StorageService.Scope.DevstorageFullControl } 

到:

new[] { DataprocService.Scope.CloudPlatform } 
+0

谢谢您的答复,这是一个愚蠢的错误对我而言。我确实将代码更改为“DataprocService.Scope.CloudPlatform”,现在得到 Google.Apis.Requests.RequestError 未知错误。 [500] 错误[ \t留言[未知错误]位置[ - ]原因[backendError]域[全球] ] – PUG

+0

看来我们有一些不匹配的验证逻辑(一些输入使得过去我们只会返回一个400级的错误,以便在稍后进行前提条件检查时导致500级错误;我已经提交了一个错误)。同时,确保项目名称全部小写。 –

+0

所有的项目名都是小写的,我仍然得到相同的错误。感谢您填写错误 – PUG

相关问题