1

Я пытаюсь получить доступ к пользовательским данным в таблице DynamoDB, используя identity level fine grained access. Для аутентификации пользователей я использую Authenticated Identities разработчика.Доступ к мелкозернистым данным DynamoDB с Lambda

Для достижения этой цели моя политика включает в себя:

{ 
     "Action": [ 
      "dynamodb:GetItem", 
      "dynamodb:UpdateItem" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:dynamodb:eu-west-1:817949094961:table/Users", 
     "Condition": { 
      "ForAllValues:StringEquals": { 
       "dynamodb:LeadingKeys": [ 
        "${cognito-identity.amazonaws.com:sub}" 
       ] 
      } 
     } 
    } 

При попытке получить доступ к данным пользователя из DynamoDB таблицы - в функции лямбда-я получаю следующее сообщение об ошибке:

Error in updateUser: AccessDeniedException: User: arn:aws:sts::12312313:assumed-role/LambdAuthEditAccount/awslambda_123_20160410184653936 is not authorized to perform: dynamodb:UpdateItem on resource: arn:aws:dynamodb:eu-west-1:12312312:table/Users"}

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

Мне интересно, не должна ли роль, предполагаемая Лямбдой (включенной в вышеприведенную ошибку), не разрешать аутентифицированную роль пользователя?

ответ

3

Вышеуказанная политика не будет работать для роли, принимаемой лямбда-функцией, поскольку для нее требуется идентификатор id, выпущенный Cognito, чтобы взять на себя роль и получить учетные данные. Вы можете попробовать следующий подход: 1) Передайте идентификатор личности и токен (полученный от GetOpenIdTokenForDeveloperIdentity) в функцию лямбда. 2) Вызовите getCredentialsforIdentity из лямбда-функции и передайте идентификатор идентификатора и выше маркера на карте логинов. 3) Используйте эти учетные данные для доступа к dynamoDB.

Смежные вопросы