Невозможно подключиться и создать корзину в облачном хранилище Google через java SDK - PullRequest
0 голосов
/ 10 марта 2020

Я не могу создать корзину облачного хранилища Google, используя java sdk, ниже приведен код, который я использую:

public class App 
{
    public static void main(String... args) throws Exception {

         String projectId = "**********";

         Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
            Page<Bucket> buckets = storage.list();

            for (Bucket bucket : buckets.iterateAll()) {
              System.out.println(bucket.getName());
            }

      }
}

И это сообщение об ошибке, которое я получаю:

Причина: com.google.api.client.googleapis. json .GoogleJsonResponseException: 401 Несанкционированный {"код": 401, "ошибки": [{"домен": "глобальный", "местоположение" ":" Авторизация "," locationType ":" header "," message ":" Анонимный абонент не имеет доступа к storage.buckets.list для проекта 833568054484. "," reason ":" required "}]," message ": «У анонимного абонента нет доступа к файлу storage.buckets.list к проекту 833568054484.» }

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

1. Создание учетной записи службы

2. Создание ключа учетной записи службы для только что созданной учетной записи службы. Запомните путь, по которому вы храните файл ключа. json.

3. Назначьте учетной записи службы роль администратора хранилища

4. Укажите учетные данные для вашего приложения

a. Использование переменной env

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/[FILE_NAME].json" 

b. Явный в коде


static void authExplicit(String jsonPath) throws IOException {
  // You can specify a credential file by providing a path to GoogleCredentials.
  // Otherwise credentials are read from the GOOGLE_APPLICATION_CREDENTIALS environment variable.
  GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(jsonPath))
        .createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));
  Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();

  System.out.println("Buckets:");
  Page<Bucket> buckets = storage.list();
  for (Bucket bucket : buckets.iterateAll()) {
    System.out.println(bucket.toString());
  }
}
0 голосов
/ 10 марта 2020

Вы не проходите аутентификацию, вы можете проверить, как добавить разрешения в ваш контейнер на Используя документацию по разрешениям Cloud IAM .

Если вы хотите предоставить доступ аутентифицированным пользователям, вы должны выберите группу пользователей allAuthenticatedUsers и дайте им роль Storage Object Viewer. Это позволит всем авторизованным пользователям, даже анонимно, просматривать / просматривать разрешения в вашем сегменте.

ПРИМЕЧАНИЕ. Как видно из этой документации , типы элементов allAuthenticatedUsers должны использоваться только когда кто-либо на Inte rnet может читать и анализировать ваши данные. Поэтому вам следует рассмотреть другой тип управления доступом, если это не так.

...