- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 App Engine 上有一个暂存项目和一个生产项目,每个项目都有 6 项服务。
目前,我们从开发人员的计算机进行部署,使用gcloud app deploy app.staging.yaml --project staging-project
或gcloud app deploy app.production.yaml --project production-project
它有效,但会导致环境变量问题,尤其是 secret 问题。
我们的应用程序从环境变量中获取它们的 Api key 、数据库凭据和其他内容 - 这使我们能够在本地、Docker 容器或 App Engine 中运行完全相同的应用程序,而无需知道它的部署位置。
如果我按照文档的方式进行部署,我们的 app.yaml 文件将如下所示:
app.production.yaml
runtime: nodejs
env: flex
manual_scaling:
instances: 1
env_variables:
DATABASE_PASSWORD: "topsecret"
MY_API_KEY: "ultrasecret"
我想每个人都很容易理解为什么将其存储在 Git 存储库中是个坏主意。
目前,我们有每个开发人员在部署前都必须填写的影子文件
app.production.yaml.shadow
runtime: nodejs
env: flex
manual_scaling:
instances: 1
env_variables:
DATABASE_PASSWORD: "set me"
MY_API_KEY: "set me"
但是随着团队的成长,我们希望每个人都能够在暂存阶段进行部署,为每个开发人员和每个服务提供正确的设置变得越来越困难。
我发现了 3 种解决方法,以及它们未被使用的原因:
最终,我们正在探索使用由开发人员或持续集成触发的部署服务器的可行性,并在部署到 App Engine 时处理所有 secret 注入(inject)。但是Ansible、Salt、Puppet、Chef这些工具只有Compute Engine的插件,不支持App Engine。
+-------------------------+ +-------------------+ +---------------------+
| | | +---> |
| Developer workspace | | Ansible | | App Engine STAGING |
| +----> (or other) | | |
+-------------------------+ | | +---------------------+
| |
+-------------------------+ | | +---------------------+
| +----> Injects secrets | | |
| Continous Integration | | | App Engine PROD. |
| | | +---> |
+-------------------------+ +-------------------+ +---------------------+
这让我想到了 3 个问题:
最佳答案
我强烈建议您考虑结合使用 KMS 和云存储,正如 Google 概述的那样 here .
你说得对,设置起来可能有点麻烦,但一旦安装到位,就很容易使用了。我们为每个环境(dev
、test
、staging
、prod
)设置单独的 key 环,然后为每个应用程序并编写了一个命令行实用程序,使我们团队中的任何开发人员都可以轻松地将 secret 写入 secret 存储(同时防止他们读回生产 secret )。
最终, secret 的管理仍然是一个难题。随着团队的壮大,管理多个应用程序/环境的 secret 非常困难。但我真的鼓励你预先支付投资 KMS 之类的东西的成本,因为它会让你的生活基本上永远更轻松,并真正降低你不小心搬起石头砸自己脚的风险。
关于google-app-engine - GAE : How to deploy various environments with secrets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50009948/
我正在尝试在我的 minikube 上启动并运行 keycloak。 我正在安装keycloak helm upgrade -i -f kubernetes/keycloak/values.yaml
我将我的数据库密码存储到AWS密钥管理器的Secret Value字段中。如果我使用以下代码,如何检索密码值?。在密钥管理器中定义的密钥:密钥在密钥管理器中定义的值:DBPwd。当我写入日志文件时,上
I am storing my database password into the Secret value field in the aws secret manager. How do I
我正在尝试在 AWS CDK 上组合一个相对简单的堆栈,其中涉及来自 aws-ecs-patterns 的 ApplicationLoadBalancedFargateService。 我的问题涉及
今天我在悠闲地阅读时偶然发现了 Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryp
不是一个真正的编程问题,但很想知道 Kubernetes 或 Minikube 如何管理 secret 并在多个节点/pod 上使用它? 假设我创建了一个 secret 来使用 kubectl 提取图
我需要从 AWS dynamoDB 和第三方 https 服务中获取元素并将这些结果合并到 AWS appSyn 中并将结果作为 graphQL 响应发回 我正在使用的第三方服务需要客户端证书。我没有
我收到一个错误: gpg: no default secret key: No secret key gpg: [stdin]: clearsign failed: No secret key GPG
我正在尝试为 kubernetes 集群设置私有(private) docker 镜像注册表。我正在关注 link $ cat ~/.docker/config.json | base64 ew
当我开发一个API服务器时,我需要给API服务器一些账户信息,这些信息不应该给任何人看。K8s对这种情况推荐secret,所以我用了。 但我想知道这个 secret 是否真的是 secret 。 se
在大多数有关在 Kubernetes 中使用 secret 的示例中,您都可以找到类似的示例: apiVersion: v1 kind: Secret metadata: name: mysecr
我正在与 terraform 合作,在 azure 中启动不同的资源。其中一些资源包含敏感数据,我希望将其安全地存储在 aws Secret Manager 中。这在 Terraform 中是可行的过
我有带有有效 key 的 Azure 应用程序注册。 我正在尝试使用 v1.0 获取 token ,如下所示(clientId 是上述应用程序注册的 ID) $body = @{ grant_
本文讨论如何安装 secret 卷。 https://learn.microsoft.com/en-us/azure/container-instances/container-instances-v
我正在使用 kubernetes 将 Rails 应用程序部署到谷歌容器引擎。 遵循 kubernetes secret 文档:http://kubernetes.io/v1.1/docs/user-
我正在与 terraform 合作,在 azure 中启动不同的资源。其中一些资源包含敏感数据,我希望将其安全地存储在 aws Secret Manager 中。这在 Terraform 中是可行的过
我有带有有效 key 的 Azure 应用程序注册。 我正在尝试使用 v1.0 获取 token ,如下所示(clientId 是上述应用程序注册的 ID) $body = @{ grant_
本文讨论如何安装 secret 卷。 https://learn.microsoft.com/en-us/azure/container-instances/container-instances-v
我有一个 python 脚本,它在 AWS 中创建一些访问 key 并将它们存储在 secret 管理器中。 但是,当我存储 key 时,我收到一条错误消息: The secret value can
我在 Secrets Manager 控制台上创建了一个 key 。然后我尝试使用 Go 代码 quickstart guide喜欢 ctx := context.Background() clien
我是一名优秀的程序员,十分优秀!