Есть ли способ загрузить экспортированные данные из Google Vault Export?
Из документации на https://developers.google.com/vault/guides/exports я смог создать, просмотреть и получить экспорт, но я не нашел способа загрузить экспортированные данные, связанные с конкретным экспорт. Есть ли способ загрузить экспортированные файлы через API или это доступно только через пользовательский интерфейс хранилища?
E сть cloudStorageSink
введите метаданные экспорта, но попытка использовать значения, предоставленные с помощью API облачного хранилища, приводит к общей проблеме с разрешениями.
Пример ответа экспорта метаданных:
{
"status": "COMPLETED",
"cloudStorageSink": {
"files": [
{
"md5Hash": "da5e3979864d71d1e3ac776b618dcf48",
"bucketName": "408d9135-6155-4a43-9d3c-424f124b9474",
"objectName": "a740999b-e11b-4af5-b8b1-6c6def35d677/exportly-41dd7886-fe02-432f-83c-a4b6fd4520a5/Test_Export-1.zip",
"size": "37720"
},
{
"md5Hash": "d345a812e15cdae3b6277a0806668808",
"bucketName": "408d9135-6155-4a43-9d3c-424f124b9474",
"objectName": "a507999b-e11b-4af5-b8b1-6c6def35d677/exportly-41dd6886-fb02-4c2f-813c-a4b6fd4520a5/Test_Export-metadata.xml",
"size": "8943"
},
{
"md5Hash": "21e91e1c60e6c07490faaae30f8154fd",
"bucketName": "408d9135-6155-4a43-9d3c-424f124b9474",
"objectName": "a503959b-e11b-4af5-b8b1-6c6def35d677/exportly-41dd6786-fb02-42f-813c-a4b6fd4520a5/Test_Export-results-count.csv",
"size": "26"
}
]
},
"stats": {
"sizeInBytes": "46689",
"exportedArtifactCount": "7",
"totalArtifactCount": "7"
},
"name": "Test Export",
...
}
2 ответа
Есть два подхода, которые могут выполнить требуемое действие:
Первый:
использование обновлений OAuth 2.0 и ключей доступа, однако это требует вмешательства пользователя, подтверждающего доступ к вашему приложению. Вы можете найти хорошую игровую площадку от Google и дополнительную информацию здесь: https://developers.google.com/oauthplayground/.
- Сначала вам нужно выбрать желаемый API (в вашем случае это:
https://www.googleapis.com/auth/devstorage.full_controll
в разделе Cloud Storage JSON API v1. - Затем вам нужно будет войти в систему с учетной записью администратора и нажать: "Код авторизации Exchange для токенов" (поля "Обновить токен" и "Токен доступа" будут заполнены автоматически).
- Наконец, вам нужно будет выбрать правильный URL для выполнения вашего запроса. Я предлагаю использовать "Список возможных операций", чтобы выбрать правильный URL. Вам нужно будет выбрать "Получить объект - Получить объект" в Cloud Storage API v1 (обратите внимание, что есть несколько вариантов с именем -"Get Object", обязательно выберите один в Cloud Storage API v1, а не тот в Облачное хранилище JSON API v1). Теперь просто введите ваш контейнер и имя объекта в соответствующие заполнители и нажмите " Отправить запрос".
Второй:
Загрузите его программным способом, используя клиентские библиотеки Google. Это подход, предложенный darkfolcer, однако я считаю, что предоставленная Google документация недостаточна и, таким образом, не очень помогает. Если пример с Python поможет, вы можете найти его в ответе на следующий вопрос - Как загрузить файлы из экспорта Google Vault сразу после его создания с помощью Python API?
После того, как все экспорты созданы, вам нужно дождаться их завершения. Вы можете использовать https://developers.google.com/vault/reference/rest/v1/matters.exports/list чтобы проверить состояние каждого экспорта в вопросе. В ответе обратитесь к массиву "export" и проверьте значение "status" для каждого, можно загрузить любой, который говорит "COMPLETED".
Чтобы загрузить завершенный экспорт, перейдите к объекту "cloudStorageSink" каждого экспорта и примите значения "bucketName" и "objectName" первой записи в массиве "files". Вам нужно будет использовать API Cloud Storage и эти два значения для загрузки файлов. На этой странице приведены примеры кода для всех популярных языков и с использованием API https://cloud.google.com/storage/docs/downloading-objects.
Проблема, которую вы видите, заключается в том, что API работает по принципу наименьших привилегий.
Для вас это означает, что, поскольку ваша цель - загрузить файлы из экспорта, вы получите разрешения на загрузку только файлов, а не всей корзины (даже если она содержит только эти файлы).
Вот почему, когда вы запрашиваете информацию из корзины хранилища, вы получаете ошибку 403 (ошибка разрешения). Однако у вас есть разрешение на загрузку файлов внутри корзины. Таким образом, вы должны получить каждый объект напрямую, выполняя подобные запросы (используя информацию по вопросу):
GET https://storage.googleapis.com/storage/v1/b/408d9135-6155-4a43-9d3c-424f124b9474/o/a740999b-e11b-4af5-b8b1-6c6def35d677/exportly-41dd7886-fe02-432f-83c-a4b6fd4520a5/Test_Export-1.zip
Короче говоря, вместо того, чтобы получать полную корзину, получите каждый отдельный файл, созданный при экспорте.
Надеюсь это поможет.