繁体   English   中英

初始化代码时使用 Google Cloud Secrets

[英]Use Google Cloud Secrets when initializing code

我有这个代码来检索秘密:

import {SecretManagerServiceClient} from "@google-cloud/secret-manager";

const client = new SecretManagerServiceClient();

async function getSecret(secret: String, version = "latest") {
    const projectID = process.env.GOOGLE_CLOUD_PROJECT;
    const [vs] = await client.accessSecretVersion({
        name: `projects/${projectID}/secrets/${secret}/versions/${version}`
    });
    const secretValue = JSON.parse(vs.payload.data.toString());
    return secretValue;
}

export {getSecret};

我想用await getSecrets("SENTRY_DNS")替换process.env.SENTRY_DNS ,但我不能在async function 之外调用 promise ( await )。

Sentry.init({
    dsn: process.env.SENTRY_DNS,
    environment: Config.isBeta ? "Beta" : "Main"
});

function sentryCreateError(message, contexts) {
    Sentry.captureMessage(message, {
        level: "error", // one of 'info', 'warning', or 'error'
        contexts
    });
}

Google Secrets 的最佳做法是什么? 我应该在“配置”文件中加载一次秘密,然后从那里调用值吗? 如果是这样,我不知道该怎么做,你有一个例子吗?

撇开您的代码示例(无论如何我不使用 JS),我会考虑一些不同的问题,这些问题的答案可能会影响设计。 例如:

  1. 这段代码在哪里执行? - 计算引擎、应用引擎、云运行、k8s、云function等。 根据答案 - 存储秘密的方法可能会有所不同。

例如,假设这将是一个云 function。 下一个问题——

  1. 您希望将秘密值存储在特殊的环境变量中,还是存储在秘密管理器中? 第一个选项更快,但不太安全 - 例如,每个可以在控制台中访问云 function 详细信息的人都可能会看到这些环境变量值。

  2. 在初始化时将秘密值加载到 memory 中? 还是在每次调用时? 第一个选项更快,但如果修改秘密值可能会导致一些问题(当某些实例终止并初始化新实例时,用新值逐渐替换旧值)。

第二个选项可能需要一些额外的讨论。 可能可以异步获取值。 在什么情况下可能有用? 我认为 - 只有在您的代码有其他事情要做的情况下,在等待秘密值时,这些值是(可能)完成云 function 的主要工作所必需的。 我们可以剃掉多少? - 可能在 Secret Manager API 调用中使用了几毫秒。 有什么缺点吗? - 代码复杂性,因为将来有人要维护代码。 这种性能提升是否仍然超重? - 我们可能可以回到上面列表中的第 2 项,并考虑在这种情况下将秘密存储在环境变量中。

第一个选项呢? 再次 - 如果性能是优先级 - 回到上面的第 2 项,否则 - 代码的简单性和可维护性是优先级,我们在这里不需要任何异步工作吗? 这个问题的答案可能取决于您公司/团队的技能、知识和财务预算,而不是技术偏好。

  1. 关于存储秘密值的“config”文件...虽然可以在云 function 执行期间将数据存储在伪“/tmp”目录中(实际上是在云函数的 memory 中),但我们不应该期望要在云 function 调用之间保留的数据。 因此,我们回到环境变量(参见上面的第 2 项),或者回到具有 API 访问权限的其他远程位置。 不知道有没有比Secret Manager延迟更好的其他服务,可以作为存储秘密的缓存。 假设我们找到了这样的服务。 现在我们再次陷入了性能与复杂性/可维护性的困境......

一些结束语。 我的背景、经验、预算、要求——可能与你的情况完全不同。 我的假设(即代码用于云功能) - 也可能是完全错误的......因此,我建议以一些批评来考虑我的写作,并使用仅与您的具体情况相关的想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM