问题描述
我想使用 gs://
通过 GDAL
URI 从私有谷歌云存储桶读取栅格数据集。根据 VSI documentation,一种验证方式是 GS_SECRET_ACCESS_KEY
和 GS_ACCESS_KEY_ID
。
我拥有可以访问目标存储桶的服务帐户的这些凭据,但是将它们设置为环境变量时,我收到了 403
响应。
此外,尝试访问像
这样的公共数据集gdalinfo /vsigs/gcp-public-data-sentinel-2/tiles/32/V/LQ/S2B_MSIL1C_20181108T111249_N0207_R137_T32VLQ_20181108T113514.SAFE/MTD_MSIL1C.xml
还会返回 403
错误,凭据设置如下。
在通过 gsutil config -a
的动作时,我需要指定 project-id
,我没有这些凭据。
我尝试使用不同的凭据,其中我知道 project-id
并且一切似乎都突然起作用了。
我发现的唯一相关讨论 ([1],[2]) 没有提及任何关于 project-id
的内容。
所以,我的问题是
-
使用这样的凭据设置,是否指定相应的
project-id
是强制性要求? -
有没有办法在
env
而不是.boto
中设置这些凭据?
解决方法
似乎与凭据混淆了。没有(有效)凭据,也无法读取公共数据集。
一种身份验证方法是对具有足够权限的服务帐户使用有效的 GS_ACCESS_KEY_ID
+ GS_SECRET_ACCESS_KEY
组合。
这些可以设置为环境变量或存储在 .boto
文件中。
如果存储在 .boto
文件中,这可以手动完成
[Credentials]
gs_access_key_id=<YOURKEY>
gs_secret_access_key=<YOURSECRET>
或者通过运行 gsutil config -a
ich 在这种情况下,您将被要求输入 project-id
。但至少为了这个目的,只要输入一个东西,这个 id 是否正确似乎没有什么区别。