【问题标题】:Setting ["GOOGLE_APPLICATION_CREDENTIALS"] from a dict rather than file path从字典而不是文件路径设置 ["GOOGLE_APPLICATION_CREDENTIALS"]
【发布时间】:2021-05-03 10:29:34
【问题描述】:

我正在尝试从 dict 设置环境变量,但连接时出现错误。

#service account pulls in airflow variable that contains the json dict with service_account credentials

service_account = Variable.get('google_cloud_credentials')

os.environ["GOOGLE_APPLICATION_CREDENTIALS"]=str(service_account)

错误

    PermissionDeniedError: Error executing an HTTP request: HTTP response code 403 with body '<?xml version='1.0' encoding='UTF-8'?><Error><Code>AccessDenied</Code><Message>Access denied.</Message><Details>Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object.</Details></Error>'

阅读时如果我使用并指向文件则没有问题。

os.environ["GOOGLE_APPLICATION_CREDENTIALS"]=/file/path/service_account.json

我想知道有没有办法将 dict 对象转换为类似对象的 os 路径?我不想将 json 文件存储在容器上,而且气流/google 文档根本不清楚。

【问题讨论】:

    标签: python google-cloud-storage airflow


    【解决方案1】:

    Python stringio 包允许您创建由字符串支持的类似文件的对象,但这在这里无济于事,因为此环境变量的使用者需要文件路径,而不是类似文件的对象。我认为不可能做你想做的事情。您是否有理由不想将凭据放在文件中?

    【讨论】:

    • 是的,项目负责人告诉我不要这样做。他们不希望文件存储在气流变量或连接之外的任何地方。本质上,我正在创建一个 KubernetesPodOperator 来运行一个上传到 S3 和谷歌云存储的 python CLI。他们想为运算符设置环境变量,例如env={ 'GOOGLE_APPLICATION_CREDENTIALS': Variable.get('google_cloud_credentials')
    • Airflow 文档和 Google 文档真的不清楚。
    • @Sql_Pete_Belfast 如果您要安装 RAM 磁盘并将凭据存储在那里,您的领导是否可以接受?这意味着它存储在 RAM 中而不是磁盘中,如果将其放入变量中(尽管它会作为文件路径可见,这可能被认为存在更多安全风险)。
    猜你喜欢
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2018-11-28
    • 2021-01-21
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多