如何将我的 gcloud 用户信用安全地放入容器中,并在本地测试时使用它们来模拟服务帐户?

2023-12-27

从这个开始:

  • 用户拥有自己的谷歌用户帐户,这些帐户是通过本地设置的 gcloud 登录
  • 应用程序以通常的方式使用 gcp API - 默认情况下它将查找 GOOGLE_APPLICATION_CREDENTIALS、GCE 角色、服务帐户,或使用本地用户 gcloud 配置的凭据
  • 当用户在本地运行它时,它将使用自己的用户帐户,当在 gcp 中运行时,它将使用服务帐户
  • 用户的帐户还可以模拟该服务 帐户。因此,当在本地运行应用程序时,用户首先执行以下操作gcloud config set auth/impersonate_service_account [SA_FULL_EMAIL]它可以运行 具有与在开发环境中运行的相同的信用 - 无需下载任何密钥

现在可以了。但我也希望能够在容器中本地运行应用程序。使用 docker/docker-compose/minikube/etc 如何才能模拟服务帐户?

容器需要访问gcloud https://www.jhanley.com/google-cloud-where-are-my-credentials-stored/信用,并且在应用程序以某种方式启动之前,它也需要在会话中设置模拟。这不能在代码中完成 - 应用程序应该正常使用 API,而不必做任何不同的事情。

编辑: 当应用程序在开发或生产 GCP 帐户/项目中运行时,它们在具有该特定应用程序的正确范围权限的服务帐户的上下文中运行。开发人员自己的用户帐户对开发环境具有广泛的权限。在本地运行时,使用与应用程序在开发环境中运行相同的服务帐户运行而不是开发人员自己的用户帐户非常有用


实现此目的的正确方法是 Google Cloud 提供的 Secret Manager。

  • 在您的 Google Cloud 帐户中激活 Secret Manager API。
  • 使用 GC UI 或 sdk 创建秘密数据和相关负载。
  • 在您的 settings.py 中使用以下函数和您的项目 ID。
  • 授予您的服务帐户访问 Secrets 的权限(如果它还没有访问权限)
  • 使用 Secret Manager 访问代码中的有效负载,而无需显式公开有效负载。
def access_secret_version(secret_id):
    """
    Access the payload for the given secret version if one exists. The version
    can be a version number as a string (e.g. "5") or an alias (e.g. "latest").
    """
    project_id = PROJECT_ID
    version_id = 1
    # Import the Secret Manager client library.
    from google.cloud import secretmanager_v1beta1 as secretmanager

    # Create the Secret Manager client.
    client = secretmanager.SecretManagerServiceClient()

    # Build the resource name of the secret version.
    name = client.secret_version_path(project_id, secret_id, version_id)

    # Access the secret version.
    response = client.access_secret_version(name)

    # Print the secret payload.
    #
    # WARNING: Do not print the secret in a production environment - this
    # snippet is showing how to access the secret material.
    payload = response.payload.data.decode('UTF-8')
    # logging.info('Plaintext: {}'.format(payload))
    logging.info('Secret accessed for  :' + secret_id)
    return payload
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将我的 gcloud 用户信用安全地放入容器中,并在本地测试时使用它们来模拟服务帐户? 的相关文章

  • 如何解密 BigQuery 中的列?

    我在 BigQuery 中有一些加密列 我想使用 BigQuery 函数对其进行解密 用于加密它们的机制是 AES 256 使用的向量以 UTF8 编码 生成的数据采用 Base64 加密 我想要做的是使用函数解密 BigQuery 中传递
  • Bigtable 性能影响列族

    我们目前正在调查使用多个列族对 bigtable 查询性能的影响 我们发现将列拆分为多个列族并不会提高性能 有人有过类似的经历吗 有关我们的基准设置的更多详细信息 此时 生产表中的每一行包含大约 5 列 每列包含 0 1 到 1 KB 的数
  • 使用 Python 客户端库进行 gcp 计算 API 传递凭证的内容和方式

    我想使用 python google client api 获取项目中所有实例的列表google api python client 1 7 11我正在尝试使用方法连接googleapiclient discovery build此方法需要
  • git推送后Google函数源未刷新

    我将谷歌云函数的源定义为谷歌云存储库 我更改了我的函数源代码 提交它并通过 git push all google 推送到存储库中 我在存储库中看到新版本的函数代码 但云函数采用旧版本 所以我需要部署我的函数的新版本 我知道我不能使用控制台
  • 是否可以像在终端中使用“ls”命令一样查询Google Cloud Storage?

    我正在使用 python 库来查询 Google Cloud Storage 并使用命名层次结构在存储中组织信息 例如 my bucket simulations version 1 data my bucket simulations v
  • 从 Android 访问云存储

    我一直无法找到任何有关如何从 Android 应用程序使用云存储的具体文档 我确实遇到过这个客户端库 https cloud google com storage docs reference libraries然而 Google Clou
  • Google Cloud CDN“强制缓存所有内容”不缓存所有内容

    我正在为我的 WordPress 网站使用 Google Cloud CDNhttps cdn datanumen com https cdn datanumen com 我已启用 强制缓存所有内容 选项 然而 网页 css文件 javas
  • 增强 App Engine Cloud Endpoints Frameworks 2.0 中的端点

    我收到了一封来自 GCP 的电子邮件 要求将我的项目从 Cloud Endpoints 1 0 迁移到 Cloud Endpoints Frameworks 2 0 我已按照此处概述的步骤进行操作 https cloud google co
  • Node.js Google-云存储上传目的地规范

    我有一个 Node js 服务器并且正在使用谷歌云上传一些图像文件的包Firebase 存储 上传本身工作正常 但 google cloud API 似乎只能将文件上传到 Firebase Storage 根文件夹 有没有办法指定远程位置来
  • 是否有强制要求切换app.yaml?

    各位 我在 Windows 7x64 上使用最近发布的 Google Cloud SDK 0 9 56 当尝试使用 web xml 和 appengine web xml gcloud 部署我的应用程序时 我收到响应 ERROR Found
  • 为什么 Cloud Composer 中会自动生成一个名为“airflow_monitoring”的 DAG?

    在 GCP Composer 上创建 Airflow 环境时 有一个名为airflow monitoring自动创建 即使删除后也会回来 为什么 怎么处理呢 我是否应该将此文件复制到我的 DAG 文件夹中并辞职以使其成为我的代码的一部分 我
  • 从 Google Cloud Bigtable 导出数据时出错

    在经历谷歌文档 https cloud google com bigtable docs exporting importing export bigtable 我在最终导出命令上得到以下堆栈跟踪 从具有适当环境变量设置的主实例执行 HAD
  • 如何将 Google Cloud Storage 中的许多文件设为私有?

    我进行了很多研究 但无法为此提出解决方案 以下是我用来在 GCP 中公开所有文件的代码 def make blob public bucket name blob name Makes a blob publicly accessible
  • GCE Windows 启动脚本

    我面临一个奇怪的问题 我的windows startup script ps1没有在启动时运行官方链接 https cloud google com compute docs startupscript providing a startu
  • 无法删除 Google 管理的 SSL 证书

    我无法删除 Google 管理的 SSL 证书 当我删除它时 它又会回来 该证书不被任何其他服务使用 我可以删除其他证书 但它们不会再回来 我也有这个问题 我在文档中发现只有在以下情况下才能删除证书 仅当没有其他资源 例如目标 HTTPS
  • 使用 Docker-Compose 运行 Google Firestore 模拟器

    我正在尝试运行我的 Node 项目以及 Firestore 模拟器docker compose在本地开发环境中 我的 Node 项目有一个 Dockerfile 如下所示 WORKDIR app ADD package json RUN n
  • 连接超时:Nodejs Google App Engine 到 Cloud MySql

    该代码非常基础 使用 mysql 的简单 Nodejs 应用程序 Error connect ETIMEDOUT当代码尝试连接到 Google App Engine 上的 Google Cloud MySql 服务器 第二代 时收到 但是应
  • Google Cloud Kubernetes 访问私有 Docker Hub 托管映像

    是否可以将私有镜像从 Docker Hub 拉取到 Google Cloud Kubernetes 集群 是否建议这样做 或者我是否需要将我的私有映像也推送到 Google Cloud 我阅读了文档 但没有发现任何内容可以清楚地解释这一点
  • 在 GCloud 中使用 Firebase 截屏时出现错误

    我在尝试集成屏幕截图库时遇到了很多麻烦here https firebase google com docs test lab test screenshots 进入我非常简单的 Android 项目 我非常仔细地按照教程中概述的步骤进行操
  • Ingress 未在 GKE 和 GCE 上获取地址

    创建入口时 不会生成地址 并且从 GKE 仪表板查看时 它始终位于Creating ingress地位 描述入口没有显示任何事件 我在 GKE 仪表板上看不到任何线索 有没有人有类似的问题或关于如何调试的任何建议 我的部署 yaml api

随机推荐