Есть ли способ загрузить экспортированные данные из 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/.

  1. Сначала вам нужно выбрать желаемый API (в вашем случае это: https://www.googleapis.com/auth/devstorage.full_controll в разделе Cloud Storage JSON API v1.
  2. Затем вам нужно будет войти в систему с учетной записью администратора и нажать: "Код авторизации Exchange для токенов" (поля "Обновить токен" и "Токен доступа" будут заполнены автоматически).
  3. Наконец, вам нужно будет выбрать правильный 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

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

Надеюсь это поможет.

Другие вопросы по тегам