В запросе недостаточно областей аутентификации [403] при создании кластера с Google Cloud Dataproc.

В Google Cloud Platform API DataProc включен. Я использую тот же ключ, что и для доступа к GCS и большому запросу, чтобы создать новый кластер в этом примере. Я получаю ошибку Request had insufficient authentication scopes в следующей строке.

 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;
    }
  }

person PUG    schedule 03.03.2016    source источник


Ответы (1)


При создании учетных данных ServiceAccountCredential измените:

new[] { StorageService.Scope.DevstorageFullControl }

to:

new[] { DataprocService.Scope.CloudPlatform }
person Angus Davis    schedule 03.03.2016
comment
Спасибо за ответ, это была глупая ошибка с моей стороны. Я изменил код на DataprocService.Scope.CloudPlatform и теперь получаю Google.Apis.Requests.RequestError Unknown Error. [500] Ошибки [ Сообщение [Неизвестная ошибка.] Местоположение [ - ] Причина [backendError] Домен [глобальный] ] - person PUG; 03.03.2016
comment
Похоже, у нас есть некоторая несоответствующая логика проверки (некоторые входные данные проходят мимо, где мы вернули бы ошибку уровня 400 только для того, чтобы позже не пройти проверку предварительного условия, что приводит к ошибке уровня 500; я зарегистрировал ошибку). Тем временем убедитесь, что имена проектов указаны в нижнем регистре. - person Angus Davis; 03.03.2016
comment
все имя проекта в нижнем регистре, я все еще получаю ту же ошибку. Спасибо за заполнение ошибки - person PUG; 03.03.2016
comment
@TeslaCodes — не стесняйтесь, пишите мне по электронной почте (мое имя SO без пробела) на google.com. Пожалуйста, укажите идентификатор вашего проекта, и я смогу продолжить расследование. - person Angus Davis; 03.03.2016
comment
@MichaelSheldon - CloudPlatform должен подразумевать DevstorageFullControl, но явное наличие обоих не помешает. - person Angus Davis; 04.03.2016