AWS Безсерверная авторизация на уровне строк DynamoDB с функциями Cognito и Lambda - PullRequest
0 голосов
/ 21 марта 2020

Хорошо, поэтому у меня в настоящее время почти все работает, следуя этому руководству здесь и частям нескольких других.

https://aws.amazon.com/blogs/mobile/building-fine-grained-authorization-using-amazon-cognito-user-pools-groups/

Однако вместо того, чтобы давать пользователям прямой доступ к DynamoDB, я запускаю его через шлюз API и затем лямбда-функцию, используя заголовок авторизации и идентификатор сеанса Cognito.

у меня эта часть работает.

В моей лямбде Я вызываю функцию обновления

const data = await documentClient.update(params).promise();

У меня есть политика AWSLambdaBasicExecutionRole, и к моей роли функции лямбда добавлена ​​следующая политика, разрешающая доступ на уровне строк для обновления

"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor1",
        "Effect": "Allow",
        "Action": [
            "dynamodb:UpdateItem"
        ],
        "Resource": [
            "arn:aws:dynamodb:us-east-2:mydynamodbid:table/userdata"
        ],
        "Condition": {
            "ForAllValues:StringEquals": {
                "dynamodb:LeadingKeys": "${cognito-identity.amazonaws.com:sub}"
            }
        }
    }
]

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

Я получаю следующую ошибку, хотя

 "User: arn:aws:sts::**********:assumed-role/db-crud/update-user-info-by-id is not 
authorized to perform: dynamodb:UpdateItem on resource: arn:aws:dynamodb:us-east-
2:************:table/userdata"

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

Это поток, который я иду, и это относится к шагу 6 enter image description here

...