Как я могу заставить свою лямбда-функцию dynamodb проверять личность пользователя?

Я настроил лямбда-триггер Dynamodb, используя эту документацию. Функция успешно запускается при обновлении таблицы dynamodb, и я могу нормально просматривать выходные данные.

Я хочу найти личность пользователя, обновившего таблицу dynamodb, но эта информация, похоже, не включена в событие. Как я могу это сделать?

Событие выглядит так:

{
"Records": [
    {
        "eventID": "1725dad5b286b22b02cffc28e5006437",
        "eventName": "INSERT",
        "eventVersion": "1.1",
        "eventSource": "aws:dynamodb",
        "awsRegion": "us-west-2",
        "dynamodb": {
            "ApproximateCreationDateTime": 1607759729,
            "Keys": {
                "receiver": {
                    "S": "c2217b13-12e8-42a4-a1ab-627f764493c9"
                },
                "sender": {
                    "S": "6fad5bc8-a389-4d73-b171-e709d5d8bdd8"
                }
            },
            "NewImage": {
                "createdAt": {
                    "S": "2020-12-12T07:55:29.105Z"
                },
                "receiver": {
                    "S": "c2217b13-12e8-42a4-a1ab-627f764493c9"
                },
                "sender": {
                    "S": "6fad5bc8-a389-4d73-b171-e709d5d8bdd8"
                },
                "__typename": {
                    "S": "FriendRequest"
                },
                "updatedAt": {
                    "S": "2020-12-12T07:55:29.105Z"
                }
            },
            "SequenceNumber": "4092400000000003379896405",
            "SizeBytes": 261,
            "StreamViewType": "NEW_AND_OLD_IMAGES"
        },
        "eventSourceARN": "arn:aws:dynamodb:us-west-2:213277979580:table/FriendRequest-rmzuppsajfhzlfgjehczargowa-apisecure/stream/2020-12-11T07:48:02.462"
    }
]

}

Зачем вам идентификатор пользователя? И создается ли запись ddb пользователем с помощью консоли ddb или aws cli? Или каким-то внутренним приложением?

Sarthak Jain 12.12.2020 09:56

Интерфейсное приложение используется для обновления файла dynamodb. В целях безопасности я надеялся сделать лямбда-функцию для проверки пользователя, выполняющего обновление. Поскольку это не представляется возможным, я попытаюсь добавить поле идентификатора пользователя в элемент dynamodb, который каким-то образом заполняется автоматически.

Sean 13.12.2020 06:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
524
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

DynamoDB не предоставляет идентификатор пользователя, создавшего запись. Единственный способ добиться этого — сделать так, чтобы идентификатор пользователя был частью элемента DynamoDB. Но это означает, что ваше приложение должно идентифицировать пользователя и записать этот атрибут.

Но это, очевидно, не сработает, если элемент вставляется с помощью консоли AWS. В этом случае вашему пользователю потребуется ввести свой собственный идентификатор (или идентификатор другого пользователя) вручную.

У нас есть аналогичный сценарий, в котором мы хотели бы отслеживать, кто (пользователь) или что (сервис) сделал последнее обновление записи. сначала наша арка выглядит так:

User/Service changes -> API Lambda -> DynamoDB Stream -> Lambda (normalizes stream data) -> Service Event SNS Topic

Все службы или функции, которые заботятся об изменениях, присоединяются к теме SNS, а НЕ к потоку.

Это отлично работает с вставкой/обновлением, у нас есть поле внутреннего использования, в котором мы храним эти данные, они не возвращаются через API CRUD. что-то вроде: updated_by: app:service:region:user/1

Когда мы получаем запись, мы знаем, что этот элемент был обновлен пользователем с идентификатором 1. Поэтому, когда мы создаем тему sns, мы добавляем атрибут сообщения с этим значением.

Удаление немного сложнее, так как вы не можете обновлять и удалять элемент одновременно. то, как мы делаем это в настоящее время, заключается в создании события удаления вручную при удалении, поэтому вместо того, чтобы полагаться на поток, мы асинхронизируем лямбда-функцию и передаем данные пользователя/службы.

User/Service changes -> API Lambda -> Lambda (normalizes stream data) -> Service Event SNS Topic

Другие вопросы по теме