AWS DynamoDB Проблема: пользователю не разрешено выполнять: dynamodb: PutItem на ресурсе

Я пытаюсь получить доступ к DynamoDB из моего приложения Node, развернутого на AWS ElasticBeanStalk. Я получаю сообщение об ошибке "Пользователь не уполномочен выполнять: dynamodb: PutItem on resource"

Он отлично работает локально, только когда я развертываю AWS, он перестает выполнять.

Кто-нибудь знает исправление? Спасибо заранее!

Ответ 1

Запрещенный доступ к dynamoDB обычно является проблемой политики. Проверьте политики IAM/Role, которые вы используете. Быстрая проверка заключается в том, чтобы добавить

AmazonDynamoDBFullAccess 

в своей роли, перейдя на вкладку "Разрешения" в консоли AWS. Если после этого это работает, значит, вам нужно создать правильную политику доступа и прикрепить ее к своей роли.

Ответ 2

Проверьте ключ доступа, который вы используете, чтобы подключиться к DynamoDB в вашем приложении Node на AWS. Этот ключ доступа будет принадлежать пользователю, который не имеет необходимых привилегий в IAM. Итак, найдите пользователя IAM, создайте или обновите соответствующую политику, и вам должно быть хорошо.

Для Beanstalk вам нужно настроить правила пользователя при публикации. Ознакомьтесь с официальными документами здесь.

И посмотрите пример отсюда тоже, любезно предоставлен @Тират Шах.

Ответ 3

Ответ уже дан, но это лучшая практика использования политики для вашего пользователя или роли AWS.

Получить объект только из определенной таблицы

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeTable",
                "dynamodb:GetItem"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:<account_number>:table/dev-panels"
        }
    ]
}

Проверять

aws dynamodb describe-table --table-name dev-panels

Положить объект

 {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "dynamodb:DescribeTable",
                    "dynamodb:PutItem"
                ],
                "Resource": "arn:aws:dynamodb:us-west-2:<account_number>:table/dev-panels"
            }
        ]
    }

Разрешить все действия на одном столе.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllAPIActionsOnBooks",
            "Effect": "Allow",
            "Action": "dynamodb:*",
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/<youtable_name>"
        }
    ]
}

Чтобы проверить роль или пользователя

aws dynamodb put-item --table-name dev-panels --item file://user.json --return-consumed-capacity TOTAL

user.json

    {
        "Name": {"S": "adiii"},
    }