不使用 gcloud 实用程序从 docker 容器访问 GCP 云存储桶

Posted

技术标签:

【中文标题】不使用 gcloud 实用程序从 docker 容器访问 GCP 云存储桶【英文标题】:Access GCP cloud Storage bucket from docker container without using gcloud utility 【发布时间】:2021-09-01 20:31:05 【问题描述】:

我有一个需要访问 GCP 存储桶的 docker 文件。我不想使用 SA 和 gcloud 实用程序对 GCP 进行身份验证(gcloud auth activate-service-account <<gcp account>> --key-file=<<serviceaccount>>.json 由于安全暴力。

我想使用不同的身份验证方法来满足安全合规性。

有人可以帮忙吗?

【问题讨论】:

你能分享你的 dockerfile 和你正在运行/构建它的平台吗? code FROM centos:7 ENV MNT_POINT /var/s3fs RUN yum clean all && yum update -y RUN echo $'[gcsfuse]\n\ name=gcsfuse (packages.cloud.google. com)\n\ baseurl=packages.cloud.google.com/yum/repos/gcsfuse-el7-x86_64\n\ enabled=1\n\ gpgcheck=1\n\ repo_gpgcheck=0\n\ gpgkey=packages.cloud.google.com/yum/doc/yum-key.gpg\n\ packages.cloud.google.com/yum/doc/rpm-package-key.gpg\n'\ >> /etc /yum.repos.d/gcsfuse.repo RUN yum -y install gcsfuse RUN mkdir -p "$MNT_POINT" 以上是我的 docker 文件。在 docker 文件中,我需要为 GCP 编写身份验证。 你在哪里构建你的容器?在你的工作站上?在云端构建? 我构建了 docker 镜像并将容器作为 GKE 集群中的 pod 运行。 【参考方案1】:

您可以尝试 API 身份验证来访问 GCP 存储桶,而不是使用“gsutil”和客户端库身份验证。

要使用 OAuth 2.0 向 Cloud Storage XML API 或 JSON API 发出请求,请在每个需要身份验证的请求的 Authorization 标头中包含应用程序的访问令牌。您可以从OAuth 2.0 Playground 生成访问令牌。

Authorization: Bearer OAUTH2_TOKEN

使用 Objects 资源的列表方法。

GET /storage/v1/b/example-bucket/o HTTP/1.1

Host: www.googleapis.com

Authorization: Bearer’ ya29.AHES…….gSwg’

要授权来自命令行的请求或进行测试,您可以使用 curl 命令,语法如下:

curl -H "授权:承载OAUTH2_TOKEN "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o"

对于本地测试,您可以使用“gcloud auth application-default print-access-token”命令生成令牌。

由于管理和刷新访问令牌的复杂性以及直接处理加密应用程序时的安全风险,我们强烈建议您使用经过验证的client library。

Cloud storage authentication 了解更多信息。

【讨论】:

以上是关于不使用 gcloud 实用程序从 docker 容器访问 GCP 云存储桶的主要内容,如果未能解决你的问题,请参考以下文章

尝试从 docker 容器访问时,数据存储返回 503

如何让 gsutil 在 docker 容器中使用 gcloud 凭据

gcloud docker-compose deploy 主容器(子项目的解决方案)

`docker-credential-gcloud` 不在系统路径中

无法获取 gcr.io/automl-vision-ondevice/gcloud-container-1.14.0:latest 的 docker 镜像

模仿 AWS CLI / gcloud 命令行参数