无服务器-如何将AWS Secret Manager作为环境变量访问

时间:2019-07-17 10:02:56

标签: node.js aws-lambda serverless-framework

当前,我正在访问AWS参数存储值作为环境变量。像这样在无服务器yml中定义它:

environment:
    XYZ_CREDS: ${ssm:xyzCreds}

在代码中,我这样访问process.env.XYZ_CREDS
我需要将此值移至AWS Secret Manager,并以相同的方式访问xyzCreds。
基于serverless document,我尝试这样-

  custom:
    xyzsecret: ${ssm:/aws/reference/secretsmanager/XYZ_CREDS_SECRET_MANAGERa~true} 
  environment:
    XYZ_CREDS: ${self:custom.xyzsecret}}

但是它不起作用。请帮忙!

3 个答案:

答案 0 :(得分:1)

鉴于您在Secrets Manager中的秘密名称正确。我认为您在解密之前可能要在管理者后面加上“ a”。

答案 1 :(得分:0)

秘密管理器以键值/ json格式存储。因此请分别指定变量

例如。

   environment:
     user_name: ${self:custom.xyzsecret}.username
     password: ${self:custom.xyzsecret}.password 

否则,传递秘密管理器名称并使用代码中的aws-sdk解密

 environment:
     secretkey_name:XYZ_CREDS_SECRET_MANAGERa

答案 2 :(得分:0)

我自己为这个问题苦苦挣扎后,找到了适合我的解决方案。

假设我们有一个秘密的XYZ_CREDS,用于存储用户名和密码的ket-value对。 AWS Secrets Manager以JSON格式存储它们:{"user": "test", "password": "xxxx"}

以下是将用户名和密码放入Lambda函数环境变量中的方法:

custom:
  xyzsecret: ${ssm:/aws/reference/secretsmanager/XYZ_CREDS~true}
myService:
  handler: index.handler
  environment:
    username: ${self:custom.xyzsecret.user}
    password: ${self:custom.xyzsecret.password}

我正在使用无服务器1.73.1部署到cloudformation。

希望这对其他人有帮助。