如何在 serverless.yml 中引用秘密管理器中的对象值?

Zha*_* Yi 12 amazon-web-services serverless-framework aws-secrets-manager

我正在通过serverless. 并且需要在部署期间从secretmanager读取值。我已阅读此文档:https://www.serverless.com/framework/docs/providers/aws/guide/variables/#reference-variables-using-the-ssm-parameter-store

它显示了如何阅读它:

custom: supersecret: ${ssm:/aws/reference/secretsmanager/secret_ID_in_Secrets_Manager~true} 但是,它可用于从秘密管理器读取字符串值。我的秘密是一个包含key/value成对的对象。我怎样才能读懂key里面的秘密?

我尝试过这样的事情:

custom: supersecret: ${ssm:/aws/reference/secretsmanager/secret_ID_in_Secrets_Manager:MY_KEY~true}

custom: supersecret: ${ssm:/aws/reference/secretsmanager/secret_ID_in_Secrets_Manager/MY_KEY~true}

但他们都没有工作。

yve*_*ine 14

Serverless 将为您解析该对象。

假设你的内容secret_ID_in_Secrets_Manager如下所示:

{
  "foo": "foo",
  "bar": "bar"
}
Run Code Online (Sandbox Code Playgroud)

然后,如果您像这样定义自定义变量serverless.yml

custom:
  supersecret: ${ssm:/aws/reference/secretsmanager/secret_ID_in_Secrets_Manager~true}
Run Code Online (Sandbox Code Playgroud)

那么这将解决:

custom:
  supersecret:
    foo: foo
    bar: bar
Run Code Online (Sandbox Code Playgroud)

serverless.yml您可以使用${self:custom.supersecret.foo}和在内部引用它们${self:custom.supersecret.bar}

请参阅无服务器文档并搜索变量也可以是对象,因为 AWS Secrets Manager 不仅可以以纯文本形式存储密钥,还可以以 JSON 形式存储密钥。

  • 请记住,无服务器框架即将切换到新的 SSM 变量解析(在发表评论时,可以使用“variablesResolutionMode: 20210326”手动启用)。在此模式下,必须省略“~true”。否则,它将被视为秘密名称的一部分 (12认同)