#node.js #amazon-web-services #aws-lambda
#node.js #amazon-веб-сервисы #aws-lambda
Вопрос:
Я использую Middy для получения секретов от Secret Manager в NodeJS AWS Lambda. Я создал роль для Lambda, чтобы получить доступ к параметру path, но по какой-то неизвестной причине значение не задается ни объектом контекста, ни переменными среды.
Значением 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 для получения секретов?
Комментарии:
1. Лол. Я думал, что Middy — это имя вашего коллеги. Можете ли вы опубликовать политику ролей IAM?
2. @Asdfg Я обновил вопрос. Спасибо.
3. путь к параметру не совпадает. Попробуйте resource * и посмотрите, работает ли это. Если это так, обновите путь в политике.
4. Вам следует подумать об обновлении версии middy, которую вы используете. Было сделано немало улучшений в производительности и безопасности, поскольку ожидается, что альфа-версия 0.x. 2.x выйдет в ближайшие недели.
Ответ №1:
Я решаю свою проблему.
Существует два варианта указания секретов, которые вы хотите прочитать:
пути (object) (необязательно *): карта путей SSM для извлечения параметров, где ключ — это префикс имени назначения, а значение — путь SSM. Пример: {пути: {DB_: ‘/dev/service/db’}}
имена (object) (необязательно *): карта параметров для извлечения из SSM, где ключ является местом назначения, а значение — именем параметра в SSM. Пример: {имена: {DB_URL: ‘/dev/service/db_url’}}
В моем конкретном случае я должен использовать names
опцию.