【问题标题】:Trying to connect to Google cloud storage (GCS) using python尝试使用 python 连接到谷歌云存储(GCS)
【发布时间】:2018-12-18 11:24:29
【问题描述】:

我已经构建了以下脚本:

import boto
import sys
import gcs_oauth2_boto_plugin

def check_size_lzo(ds):

# URI scheme for Cloud Storage.

    CLIENT_ID = 'myclientid'
    CLIENT_SECRET = 'mysecret'

    GOOGLE_STORAGE = 'gs'

    dir_file= 'date_id={ds}/apollo_export_{ds}.lzo'.format(ds=ds)



    gcs_oauth2_boto_plugin.SetFallbackClientIdAndSecret(CLIENT_ID, CLIENT_SECRET)
    uri = boto.storage_uri('my_bucket/data/apollo/prod/'+ dir_file, GOOGLE_STORAGE)
    key = uri.get_key()



    if key.size < 45379959:
        raise ValueError('umg lzo file is too small, investigate')
    else:
        print('umg lzo file is %sMB' % round((key.size/1e6),2))



if __name__ == "__main__":

     check_size_lzo(sys.argv[1])

它在本地运行良好,但是当我尝试在 kubernetes 集群上运行时,出现以下错误:

boto.exception.GSResponseError: GSResponseError: 403 Access denied to 'gs://my_bucket/data/apollo/prod/date_id=20180628/apollo_export_20180628.lzo'

我已更新集群上的 .boto 文件并添加了我的 oauth 客户端 ID 和密码,但仍然遇到同样的问题。

非常感谢帮助解决此问题。

非常感谢!

【问题讨论】:

  • 假设你使用的是服务账号,你激活了吗?如果没有,请运行此命令gcloud auth activate-service-account --key-file=service-account-key-file,然后再次尝试执行代码。此外,请确保集群的所有节点都有服务帐户密钥文件。

标签: python kubernetes google-cloud-platform google-cloud-storage


【解决方案1】:

如果它在一个环境中工作而在另一个环境中失败,我假设您是从 .boto 文件(或可能从 OAUTH2_CLIENT_ID 环境变量)获取身份验证,但您的 kubernetes 实例缺少这样的文件。您得到的是 403 而不是 401 表示您的远程服务器正确地以某人身份进行身份验证,但某人无权访问该对象,因此您可能是以其他用户身份进行调用的。

除非你改变了什么,我猜你得到的是the default Kubernetes Engine auth,意思是a service account associated with your project。该服务帐户可能尚未被授予对您的对象的读取权限,这就是您获得 403 的原因。授予它对您的 GCS 资源的读取/写入权限,这应该可以解决问题。

另请注意,默认情况下,默认凭据的范围不包括 GCS,因此请you'll need to add that as well 然后重新启动实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2020-06-16
    • 2012-03-02
    • 2021-03-18
    • 2018-11-01
    • 1970-01-01
    • 2021-11-08
    相关资源
    最近更新 更多