2017-01-26 7 views
0

Я пытаюсь получить this образец работает без успехаcom.google.cloud.storage.StorageException: 401 Несанкционированное

Я установил и инициализации клиента:

export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" 

echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list 

curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - 

sudo apt-get update \ 
    && sudo apt-get -y install google-cloud-sdk \ 
    && sudo apt-get -y install google-cloud-sdk-app-engine-java \ 
    && sudo apt-get -y install google-cloud-sdk-app-engine-python \ 

gcloud init 

Тогда я аутентифицирован успешно:

gcloud auth activate-service-account [email protected] --key-file=DockerStorage-e7def0adcafb.json 

Затем я попробовал быстрый образец начала:

Storage storage = StorageOptions.getDefaultInstance().getService(); 
String bucketName = "my-first-bucket"; // "my-new-bucket"; 
Bucket bucket = storage.create(BucketInfo.of(bucketName)); 
System.out.printf("Bucket %s created.%n", bucket.getName()); 

БУМ несанкционированного

Exception in thread "main" com.google.cloud.storage.StorageException: 401 Unauthorized 

Что я пропустил?

+0

Вы используете это на локальном компьютере или в экземпляре GCE или AppEngine? –

+0

проверено на локальном и vm – javapenguin

+0

На экземпляре GCE вам даже не нужно запускать gcloud auth. Программа должна иметь возможность авторизации в качестве связанной учетной записи службы GCE. –

ответ

1

Hrm ... хороший вопрос. Теоретически это должно работать. Если вы иначе не укажете auth, эта библиотека сначала попытается использовать файл учетных данных, указанный переменной окружения GOOGLE_APPLICATION_CREDENTIALS, и если это не установлено, it should go looking for your gcloud credentials.

Я предполагаю, что по какой-то причине он не может найти ваши учетные данные gcloud. По умолчанию они будут находиться в каталоге «.config/gcloud» в вашем домашнем каталоге, но это можно переопределить. Может быть, проверьте, есть ли там какие-то файлы?

Стоит попробовать просто скопировать файл JSON учетной записи службы на этот компьютер и указать путь к нему с помощью переменной окружения GOOGLE_APPLICATION_CREDENTIALS. Это не обязательно, но если это не сработает, произойдет что-то более интересное.

+1

Мне пришлось установить GOOGLE_APPLICATION_CREDENTIALS в свой файл ~/.profile и перезагрузить мою машину. – javapenguin

0

Сначала вам необходимо сгенерировать учетные данные учетной записи службы.

Создание учетной записи службы учетных Для генерации секретного ключа в формате JSON или PKCS12 формате:

  1. Открыть список учетных данных в Google Cloud Platform Console. Google Cloud Platform Console
  2. Нажмите «Создать учетные данные».
  3. Выберите ключ учетной записи службы.
  4. Откроется окно создания учетной записи службы поддержки.
  5. Нажмите раскрывающееся меню ниже учетной записи службы, а затем нажмите Новая учетная запись службы.
  6. Введите имя учетной записи службы в поле Имя.
  7. Используйте идентификатор учетной записи службы по умолчанию или создайте другой.
  8. Выберите тип ключа: JSON или P12.
  9. Нажмите «Создать».

Затем просто используйте учетные данные json-файла в вашем коде.

StorageOptions storageOptions = StorageOptions.newBuilder() 
     .setProjectId("YOUR_PROJECT_ID") 
     .setCredentials(GoogleCredentials.fromStream(new 
     FileInputStream("path/YOUR_SERVICE_ACCOUNT_CRENDENTIAL.json"))).build(); 
    Storage storage = storageOptions.getService();