Добавить авторизацию для функции, созданной с помощью кнопки «Усилить - PullRequest
0 голосов
/ 07 марта 2019

Я создал лямбда-функцию для добавления новых пользователей, созданных в моем приложении React, в группу в моем пуле cognito.

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

Теперь, когда я запускаю функцию, я получаю следующую ожидаемую ошибку:

Пользователь: [отредактирован] не авторизован для выполнения: cognito-idp: AdminAddUserToGroup на ресурсе: [отредактировано]

Пока что я добавил эту дополнительную политику к роли в CustomResources.json:

{
  "PolicyName": "CognitoAuthLambdaFunction",
  "PolicyDocument": {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": ["cognito-idp:AdminAddUserToGroup"],
        "Resource": [
          {
            "Fn::Sub": [                        
              "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:setUsersGroup-${env}",
              { "env": { "Ref": "env" } }
            ]
          }
        ]
      }
    ]
  }
}

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

1 Ответ

0 голосов
/ 07 марта 2019

Я предполагаю, что указанная вами в вопросе политика - это политика Lambda Execution, т. Е. Та, которая была передана Lambda во время выполнения. Эта политика разрешит вашему коду, работающему в Lambda, вызывать заданный список API.

Если мое предположение верно, в политике есть ошибка, поскольку свойство ресурса ссылается на саму вашу функцию Lambda (ARN начинается с arn:aws:lambda), тогда как оно должно ссылаться на пул пользователей, которому вы хотите предоставить доступ. (ARN должен начинаться с arn:aws:cognito-identity).

См. https://docs.aws.amazon.com/cognito/latest/developerguide/resource-permissions.html

Предполагая, что пул пользователей Cognito создан в том же шаблоне CloudFormation, вы можете получить доступ к ARN пула пользователей Cognito, используя встроенную функцию Fn::GetAtt, например

{ "Fn::GetAtt" : [ "logical_resource_id_cognito_user_pool", "ARN" ] }

См. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html для атрибутов, доступных для AWS::Cognito::UserPool тип ресурса.

...