Как я могу контролировать доступ пользователей к данным Amazon DynamoDB через IAM?

Существует ли AWS Identity and Access Management (IAM), чтобы пользователь мог редактировать или удалять только элементы в таблица Amazon DynamoDB, которую он добавил раньше?

Ответ 1

Это стало возможным после того, как AWS добавил Fine-Grained Access Control для Amazon DynamoDB, что облегчает AWS Политики идентификации и управления доступом (IAM) для регулирования доступа к элементам и атрибутам, хранящимся в таблицах DynamoDB.

Вступительное сообщение в блоге иллюстрирует выдающуюся детализацию этой функции и упрощает ее для многих случаев использования в реальном мире:

  • Горизонтальный. Вы можете выборочно скрыть или разоблачить определенные элементы DynamoDB в определенной таблице, сопоставляя значения хэш-ключей
  • Вертикальный. Вы можете выборочно скрывать или публиковать определенные атрибуты всех элементов DynamoDB в определенной таблице, сопоставляя имена атрибутов
  • Комбинированный. Вы можете выполнять горизонтальное и вертикальное управление в одной и той же политике.

См. Fine-Grained Access Control для Amazon DynamoDB для получения дополнительной информации об этой способности определять, кто может обращаться к отдельным элементам данных и атрибутам в Amazon DynamoDB таблицы и индексы, а также действия, которые могут быть выполнены на них.

  • Это также включает конкретный пример того, как включить идентификатор пользователя в первичный ключ таблицы Amazon DynamoDB и скрывать информацию как по горизонтали, так и по горизонтали вертикально через соответствующее условие IAM после этого на основе вызывающего пользователя.

Добавление

Широкий охват/влияние этой новой функциональности также подчеркивается в Werer Vogels Упрощение управления данными мобильных приложений с помощью Fine-Grained Access Control DynamoDB:

Благодаря Fine-Grained Access Control мы решаем эту проблему, позволяя вам создавать политики доступа, включающие условия, описывающие дополнительные уровни фильтрации и управления. Это устраняет необходимость в прокси-слое, упрощает стек приложений и приводит к экономии затрат.

[...]

С сегодняшнего запуска приложения, работающие на мобильных устройствах, могут отправлять рабочие нагрузки в таблицу DynamicDB, строку или даже столбец без прохождения промежуточного прокси-уровня. [...] Эта возможность позволяет приложениям, работающим на мобильных устройствах, изменять только строки, принадлежащие определенному пользователю. Кроме того, объединяя данные пользователей в таблице DynamoDB, вы можете получить информацию в реальном времени о базе пользователей в больших масштабах, не пройдя дорогие объединения и пакетные подходы, такие как разброс/сбор.

Ответ 2

Я уверен, что ответ на ваш вопрос - да. Вероятно, вам придется использовать AWS Cognito с политикой роли IAM.

Возможно, вам придется немного поиграть с этим, но если вы добавите следующую политику:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:UpdateItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:ap-southeast-2: NUMBER:table/myapplication_product"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:LeadingKeys": [
                        "${cognito-identity.amazonaws.com:sub}"
                    ]
                }
            }
        }
    ]
}

Во-первых, это ограничит доступ к ресурсу dynamodb только указанным методам, но блок "Условие" дополнительно ограничит доступ к идентификаторам, которые соответствуют хеш-кнопке, которую вы пытаетесь изменить, - очевидно, это не влияет на Сканирование (только GetItem и UpdateItem). Теперь точно, как вы сопоставляете эти ключи, это вождение, о котором я говорил, но решение там где-то. Надеюсь, это поможет.

Ответ 3

Вы можете добавить пользователя IAM, который ограничен действиями DynamDB PutItem/UpdateItem/DeleteItem и который ограничен конкретной таблицей ARN. См. Использование IAM для контроля доступа к ресурсам DynamoDB Amazon.

Вы можете использовать ARN на уровне ресурсов в политиках IAM для всех действий Amazon DynamoDB, за исключением ListTables.

Нет встроенного способа ограничить обновление таблиц "пользователем, создавшим таблицу", но вы могли бы script, что при создании таблицы, я думаю.

Ответ 4

Я не считаю, что это возможно. Роли IAM в основном контролируют, какие вызовы API могут сделать клиент. Как только клиент получит разрешение на выполнение действия, DynamoDB не регистрирует это действие и не прикрепляет его к клиенту.

Если вам нужно подобное поведение, вероятно, вы должны сохранить атрибут в своей таблице, который обновляется с некоторыми метаданными о том, что пользователь сделал операцию.