Можно ли предоставить дополнительные разрешения функции лямбда PostAuthenticate, предоставляемой с помощью AWS Amplify?

TL;DR: Можно ли вручную изменить шаблон Amplify CloudFormation для конфигурации функции пост-аутентификации, чтобы предоставить разрешения (например) для IoT attachPrincipalPolicy?

Я использую AWS Amplify и amplifyCLI для настройки нового проекта. В целом, Amplify очень упростил задачу, однако я застрял с этим чувством, что с Amplify можно зайти "так далеко", прежде чем что-то станет трудным или невозможным с помощью проекта, управляемого Amplify.

Интересующий меня вариант использования связан с настройкой PubSubс IoT - инструкции AWS объясняют, как заставить это работать, но я бы назвал это скорее "доказательством концепции", чем "что-то, что вы должны использовать в чем-либо, близком к производственному" - это включает вызов вручнуюaws iot attach-principal-policy --policy-name 'myIoTPolicy' --principal '<YOUR_COGNITO_IDENTITY_ID>' на каждую личность Cognito.

Вместо этого я хотел бы использовать лямбда-функцию / обработчик событий Post Authentication для вызова attachPrincipalPolicy, когда пользователь входит на веб-сайт (потенциально сначала проверяя, не прикреплена ли политика!).

Возможно, очевидно, что это не "просто работает", я тестировал

var iot = new AWS.Iot();

  var params = {
    policyName: 'myIoTPolicy', /* required */
    principal: 'XYZ123XYZ123' /* required */
  };

  try {
    iot.attachPrincipalPolicy(params, function (err, data) {
      if (err) console.log(err, err.stack); // an error occurred
      else console.log(data);           // successful response

      callback(null, event);
    });
  } catch (e) {
    console.log(e);           // successful response
  }

и в итоге возникла ошибка типа

AccessDeniedException: User: arn:aws:sts::123123123123123:assumed-role/project82382PostAuthentication-master/project82382PostAuthentication-master is not authorized to perform: iot:AttachPrincipalPolicy on resource: XYZ123XYZ123

Суть вопроса в том, как мне предоставить разрешения этой лямбда-функции таким образом, чтобы они не нарушались, когда / если я изменяю проект с помощью Amplify CLI? Например, теоретически я мог бы изменитьproject82382PostAuthentication-cloudformation-template.json и добавить какую-то конфигурацию, которая давала бы разрешение на выполнение iot:AttachPrincipalPolicy, но затем это будет удалено. Я бы подумал, если / когда я изменю конфигурацию чего-то, что заставит Amplify CLI регенерировать шаблоны CloudFormation?

2 ответа

Хотя это довольно ручной процесс, перейдите по ссылке./amplify/backend/function/your-function-name/your-function-name-cloud-formation-template.json и найдите "lambdaexecutionpolicy" -> "Properties" -> " Документ политики "->" Заявление ". Это набор политик. Просто добавьте в массив еще один объект с тем, что вам нужно. Например,

{
  "Effect": "Allow",
  "Action": [
    "sns:*"
  ],
  "Resource": "*"
}

Тогда беги amplify statusи вы должны увидеть ожидающее обновление вашей лямбды. Бежать amplify push и эти изменения будут развернуты в облаке.

Я смог сделать это, обновивamplify/backend/function/{function-name}/custom-policies.jsonфайл.

Я хотел иметь возможность вызывать другую лямбда-функцию, которая находится за шлюзом API, чтобы она выглядела так, где «путь» — это путь к моей конечной точке, а «*» — подстановочные знаки:

См. документы aws

      [
  {
    "Effect": "Allow",
    "Action": [
      "execute-api:Invoke"
    ],
    "Resource": [
      "arn:aws:execute-api:*:*:*/*/POST/{path}"
    ]
  }
]

В случае с sns, я думаю, вы могли бы использовать что-то вроде разрешений, которые @Demetrios опубликовал в своем ответе.

      [
  {
    "Effect": "Allow",
    "Action": [
      "sns:*"
    ],
    "Resource": "*"
  }
]
Другие вопросы по тегам