Middy在NodeJS AWS Lambda中没有从secret Manager获得秘密



我使用Middy从NodeJS AWS Lambda中的Secret Manager获取机密。我确实为Lambda创建了一个角色来访问参数路径,但由于某种未知原因,该值没有设置上下文对象或环境变量。

process.env.SSM_PATH的值为LAMBDA。

这是我正在使用的代码。

'use strict';
const middy = require('middy');
const { ssm } = require('middy/middlewares');

const handler = async (event, context) => {
console.log(context);
console.log(process.env)
console.log(event);
};
exports.handler = middy(handler).use(ssm({
setToContext: true,
paths: {
'PARAMETER': `/${process.env.SSM_PATH}/PARAMETER`
}
}));

这是IAM针对Lambda的政策的一部分。

{
"permissionsBoundary": {},
"roleName": "monitor_lambda_role",
"policies": [
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "sqs:sendMessage",
"Resource": "arn:aws:sqs:us-east-1::signed-resources-sqs"
},
{
"Sid": "",
"Effect": "Allow",
"Action": "ssm:GetParametersByPath",
"Resource": "arn:aws:ssm:us-east-1::parameter/LAMBDA/*"
},
{
"Sid": "",
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "arn:aws:ssm:us-east-1::alias/aws/ssm"
}
]
},
"name": "InlinePolicy",
"arn": "arn:aws:iam:::policy/InlinePolicy"
}
}

可能是因为lambda以异步方式运行,它没有等待ssm中间件获取机密?

我解决了我的问题。

有两个选项可以指定要读取的机密:

路径(对象((可选*(:从中获取参数的SSM路径的映射,其中键是目标名称的前缀,值是SSM路径。示例:{paths:{DB_:'/dev/service/DB'}}

名称(对象((可选*(:要从SSM获取的参数映射,其中密钥是目的地,值是SSM中的param名称。示例:{names:{DB_URL:"/dev/service/DB_URL"}}

在我的特定情况下,我应该使用names选项。

最新更新