有什么方法可以从Google Vault导出下载导出的数据吗?

时间:2018-10-31 22:15:01

标签: python google-api gsuite google-vault-api

根据https://developers.google.com/vault/guides/exports上的文档,我已经能够创建,列出和检索导出,但是还没有找到下载与特定导出关联的导出数据的任何方法。有什么方法可以通过API下载导出的文件,还是只能通过Vault UI使用?

导出元数据中有一个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",
    ...
}

3 个答案:

答案 0 :(得分:3)

有两种方法可以执行您需要的操作:

第一个:
使用OAuth 2.0刷新和访问键,但需要用户干预,以确认您对应用的访问权限。 您可以在https://developers.google.com/oauthplayground/上找到Google提供的漂亮游乐场,以及更多信息。

  1. 您首先需要选择所需的API(在您的情况下,它是 Cloud Storage JSON API v1 部分下的https://www.googleapis.com/auth/devstorage.full_controll
  2. 然后,您将需要使用 admin 帐户登录,然后单击:“令牌的交换授权代码” “刷新令牌”字段< / em>和“访问令牌” 将自动为字段。)
  3. 最后,您将需要选择正确的URL来执行您的请求。我建议使用“列出可能的操作” 选择正确的URL。您需要在 Cloud Storage API v1 下选择“获取对象-检索对象” (注意,有几个选项的名称为- “获取对象” ,请确保选择 Cloud Storage API v1 下的一个,而不是 Cloud Storage下的一个JSON API v1 )。现在,只需在适当的占位符中输入存储桶和对象名称,然后点击发送请求即可。

第二个:
使用Google客户端库以编程方式下载它。这是@darkfolcer建议的方法,但是我认为Google提供的文档不足,因此并没有真正的帮助。如果有Python范例会有所帮助,您可以在以下问题的答案中找到一个-How to download files from Google Vault export immediately after creating it with Python API?

答案 1 :(得分:2)

创建所有导出后,您需要等待它们完成。您可以使用https://developers.google.com/vault/reference/rest/v1/matters.exports/list检查事件中每个导出的状态。在响应中,请参阅“导出”数组,并检查每个数组的“状态”值,可以下载任何显示“已完成”的内容。

要下载完成的导出,请转到每个导出的“ cloudStorageSink”对象,并获取“文件”数组中第一个条目的“ bucketName”和“ objectName”值。您需要使用Cloud Storage API和这两个值来下载文件。本页包含所有流行语言和使用API​​ https://cloud.google.com/storage/docs/downloading-objects#storage-download-object-cpp的代码示例。

希望有帮助。

答案 2 :(得分:0)

您看到的问题是因为API与principle of least privilege一起使用。

对您的影响是,由于您的目标是从导出文件中下载文件,因此您将获得仅下载文件的权限,而不是整个存储桶的下载权限(即使它仅包含那些文件)。

这就是为什么当您从存储桶中请求信息时,出现403错误(权限错误)的原因。但是,您确实有权限可以下载存储桶中的文件。这样,您应该做的是get each object directly,执行这样的请求(使用问题的信息):

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

因此,简而言之,不是获取完整的存储桶,而是获取导出生成的每个文件。

希望这会有所帮助。