Установите правильный ACL на хранилище Google - PullRequest
0 голосов
/ 09 октября 2018

Мы создали два микросервиса, один из которых загружает изображения в хранилище Google (корзину) из node.js.И сервис, который возвращает serve_url из сервиса python.Обе службы работают.Почти ...

Наша проблема в том, что если у нас нет правильного ACL для файла в корзине, нам не разрешено получать serve_url () из сервиса изображений.

Мы загружаем изображения из внешнего интерфейса с помощью возобновляемой ссылки для загрузки, созданной в файловой службе node.js:

createResumeableUpload: async (filename, metadata) => {
            const file = await bucket.file(filename);
            const upload = await file.createResumableUpload({
                metadata,
                public: true,
            });
            return upload;
        },

После проверки файла в корзине мы получаем allUsers с разрешениями чтения, см.изображение ниже.Но преобразование в сервисе изображений вызовет исключение из-за неправильных разрешений.

Если мы, однако, загрузим изображение непосредственно в интерфейс корзины, мы получим еще несколько разрешений, и после некоторого тестирования мы обнаружилиследующее разрешение - это то, что мы ищем - это редакторы, вторые в списке:

enter image description here

Мы много пытались установить ACL, когдамы создаем возобновляемую загрузку или файл после его создания, но ничего не получается.Мы были бы очень признательны, если бы кто-нибудь помог нам установить правильный ACL для файла, поэтому мы можем получить serve_url () из сервиса изображений.

[EDIT] Чтобы ответить на некоторые вопросы.Мы на 100% уверены, что это проблема с разрешениями, служба изображений работает нормально, если мы добавляем разрешение редактора, но мы должны иметь возможность добавить это разрешение, когда добавляем изображения в корзину.И это мой вопрос:

Как добавить разрешение владельца для редакторов, когда мы загружаем изображения в сегменты из нашего сервиса node.js?

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

После многих часов попыток понять систему ACL Google, я хотел бы поделиться информацией о том, как мне удалось настроить ACL из nodejs.

После загрузки файла изображения в корзину необходим проектдобавлен владелец ACL.Если этот файл изображения не имеет ACL владельца проекта, он сгенерирует исключение при генерации serve_url ().

Для обновления ACL я использовал эту функцию:

updateAcl: async (name: string) => {
    const file = await bucket.file(name);
    console.log('file', file);

    const acl = await file.acl.add({
        role: 'OWNER',
        entity: 'project-editors-231929353801'
    });

    return acl;
}

Изпанель хранения, можно получить список всех списков ACL по умолчанию.

0 голосов
/ 21 ноября 2018

Изображения API использует Сервисная учетная запись App Engine по умолчанию (YOUR_PROJECT_ID@appspot.gserviceaccount.com).Эта учетная запись службы не обязательно должна быть владельцем проекта для работы get_serving_url(), если вы предоставите ей роль администратора объекта хранения в корзине.В качестве альтернативы вы можете обновить списки ACL объекта, предоставив владельцу объекта учетную запись службы.

0 голосов
/ 12 октября 2018

Чтобы добавить необходимые разрешения, вы можете отправить patch запрос к JSON API с JSON, который определяет все ACL, которые вы хотите иметь у объекта.

ОБНОВЛЕНИЕ:

Был создан запрос функции от вашего имени, чтобы сделать эту функцию доступной для клиентской библиотеки NodeJS.Пометьте его, чтобы вы могли получать обновления об этом запросе функции, и не стесняйтесь добавлять дополнительные комментарии, чтобы предоставить подробную информацию о желаемой реализации.Вы можете отслеживать запрос функции, следуя этой ссылке .

...