Мидди не получает секрет от Secret Manager в NodeJS AWS Lambda

#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 опцию.