您可以将 keyfile.json 传递给 gsutil 吗?
Can you pass a keyfile.json to gsutil?
我在某些 Python 脚本中有一个(也许是独一无二的?)用例,我是 运行。也就是说,我想要 gsutil
的并行功能,所以我不使用 from google.cloud import storage
,而是使用 subprocess
调用,例如:
subprocess.Popen(["gsutil", "-q", "-m", "-o", "GSUtil:parallel_process_count=8,GSUtil:parallel_thread_count=8", "cp", files, destination])
以便从存储桶上传和下载文件。
在实例组模板中,我可以通过 -scopes
传入服务帐户,但我希望在应用程序级别处理身份验证。我尝试设置环境变量并将其传递给 subprocess
:
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "keyfile.json"
tmp_env = os.environ.copy()
subprocess.Popen(['gsutil', ...], env=tmp_env)
但无济于事。 运行:
gcloud auth activate-service-account --key-file /path/to/keyfile.json --project my-project -q
似乎是使用不需要 Python API 的 json 密钥文件进行身份验证的最佳方式。但是如果我把它放在我的 Dockerfile 的末尾它就不起作用了,虽然我当然可以把它放在我在实例组模板末尾执行的 startup.sh 脚本的末尾嵌入式 bootstrap.sh 脚本,也没有真正实现我想要的。也就是说,两者都偏离了我在应用程序级别拥有 "gsutil authentication" 的最初目标。
tl;dr 有没有办法将 keyfile.json 凭据传递给 gsutil
?这是 gsutil 团队曾经讨论过的功能吗?如果我没有足够好地搜索 Cloud Platform 和 gsutil 文档,我深表歉意。
您可以在 .boto
配置文件中为 gsutil
提供指向 JSON 密钥文件的指针,如下所示:
[Credentials]
gs_service_key_file = /path/to/your/keyfile.json
对于独立(非gcloud
)安装,这相当于 运行 gsutil config -e
。
如果您想在命令行而不是在您的 .boto
配置文件中提供它,您可以使用 -o
参数,类似于您在配置文件中配置进程和线程计数的方式命令行。即:
subprocess.Popen(["gsutil", "-q", "-m", "-o", "Credentials:gs_service_key_file=/path/to/your/keyfile.json",
"-o", "GSUtil:parallel_process_count=8", "-o", GSUtil:parallel_thread_count=8", "cp", files, destination])
请注意,您需要确保可以从您的容器中访问密钥文件路径。
我在某些 Python 脚本中有一个(也许是独一无二的?)用例,我是 运行。也就是说,我想要 gsutil
的并行功能,所以我不使用 from google.cloud import storage
,而是使用 subprocess
调用,例如:
subprocess.Popen(["gsutil", "-q", "-m", "-o", "GSUtil:parallel_process_count=8,GSUtil:parallel_thread_count=8", "cp", files, destination])
以便从存储桶上传和下载文件。
在实例组模板中,我可以通过 -scopes
传入服务帐户,但我希望在应用程序级别处理身份验证。我尝试设置环境变量并将其传递给 subprocess
:
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "keyfile.json"
tmp_env = os.environ.copy()
subprocess.Popen(['gsutil', ...], env=tmp_env)
但无济于事。 运行:
gcloud auth activate-service-account --key-file /path/to/keyfile.json --project my-project -q
似乎是使用不需要 Python API 的 json 密钥文件进行身份验证的最佳方式。但是如果我把它放在我的 Dockerfile 的末尾它就不起作用了,虽然我当然可以把它放在我在实例组模板末尾执行的 startup.sh 脚本的末尾嵌入式 bootstrap.sh 脚本,也没有真正实现我想要的。也就是说,两者都偏离了我在应用程序级别拥有 "gsutil authentication" 的最初目标。
tl;dr 有没有办法将 keyfile.json 凭据传递给 gsutil
?这是 gsutil 团队曾经讨论过的功能吗?如果我没有足够好地搜索 Cloud Platform 和 gsutil 文档,我深表歉意。
您可以在 .boto
配置文件中为 gsutil
提供指向 JSON 密钥文件的指针,如下所示:
[Credentials]
gs_service_key_file = /path/to/your/keyfile.json
对于独立(非gcloud
)安装,这相当于 运行 gsutil config -e
。
如果您想在命令行而不是在您的 .boto
配置文件中提供它,您可以使用 -o
参数,类似于您在配置文件中配置进程和线程计数的方式命令行。即:
subprocess.Popen(["gsutil", "-q", "-m", "-o", "Credentials:gs_service_key_file=/path/to/your/keyfile.json",
"-o", "GSUtil:parallel_process_count=8", "-o", GSUtil:parallel_thread_count=8", "cp", files, destination])
请注意,您需要确保可以从您的容器中访问密钥文件路径。