是否可以向使用 AWS Amplify 预置的 lambda PostAuthenticate 函数授予额外权限?

sho*_*one 4 amazon-web-services aws-lambda aws-amplify aws-amplify-cli

TL;DR: 是否可以手动更改用于身份验证后功能配置的 Amplify CloudFormation 模板以授予(例如)IoT AttachPrincipalPolicy权限?

我正在使用 AWS Amplify 和amplifyCLI 来设置一个新项目。总体而言,Amplify 让事情变得非常简单,但我一直有这样的感觉,即在事情变得困难或无法通过 Amplify 控制的项目完成之前,您只能使用 Amplify 走“到目前为止”。

我感兴趣的用例与物联网的设置有关PubSub- AWS 说明涵盖了如何使其工作,但我将其称为“概念验证”,而不是“您应该在接近生产的任何地方使用的东西” -它涉及手动调用aws iot attach-principal-policy --policy-name 'myIoTPolicy' --principal '<YOUR_COGNITO_IDENTITY_ID>'每个 Cognito 身份。

相反,我想做的是,当用户登录网站时,使用身份验证后lambda 函数/事件挂钩来调用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
  }
Run Code Online (Sandbox Code Playgroud)

并最终出现类似的错误

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

问题的核心是,如何以一种在使用 Amplify CLI 修改项目时不会中断的方式授予此 lambda 函数权限?例如,理论上我可以更改project82382PostAuthentication-cloudformation-template.json并添加某种配置来授予执行权限iot:AttachPrincipalPolicy,但是这将被删除我想如果/当我更改某些配置导致 Amplify CLI 重新生成 CloudFormation 模板时?

Dem*_*her 8

尽管这是一个手动过程,但请转到 ./amplify/backend/function/your-function-name/your-function-name-cloud-formation-template.json 并找到“lambdaexecutionpolicy” -> “Properties” -> “政策文件”->“声明”。这是一系列政策。只需将另一个对象添加到数组中即可,无论您需要什么。例如,

{
  "Effect": "Allow",
  "Action": [
    "sns:*"
  ],
  "Resource": "*"
}
Run Code Online (Sandbox Code Playgroud)

然后运行amplify status,您应该会看到 lambda 的待更新。运行amplify push这些更改将部署到云中。

  • 达曼,感谢您编辑我的答案并删除“我希望这有帮助!” 我想这是达到 18.2k 代表的一种方法。 (2认同)