是否可以向通过AWS Amplify预置的lambda PostAuthenticate函数赋予其他权限?

时间:2019-12-01 10:40:48

标签: amazon-web-services aws-lambda aws-amplify aws-amplify-cli

TL; DR: 是否可以手动更改用于Post Authentication功能配置的Amplify CloudFormation模板,以授予(例如)IoT attachPrincipalPolicy的权限?

我正在使用AWS Amplify和amplify CLI来设置一个新项目。总体而言,Amplify使事情变得非常容易,但是我一直坚信,只有在Amplify受控项目难以或不可能完成事情之前,您才能对Amplify进行“深入了解”。

我感兴趣的用例与通过物联网设置PubSub-the AWS instructions cover how to get this working有关,但是我将其称为“概念证明”,而不是“您应该在任何封闭的地方使用的东西”投入生产”-它涉及在每个Cognito身份上手动调用aws iot attach-principal-policy --policy-name 'myIoTPolicy' --principal '<YOUR_COGNITO_IDENTITY_ID>'

相反,我想做的是当用户登录网站时使用 Post Authentication 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
  }

并最终出现类似错误

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的权限,但是我想如果/当我更改引起某些问题的配置时,可以将其删除放大CLI以重新生成CloudFormation模板吗?

1 个答案:

答案 0 :(得分:0)

尽管这完全是手动过程,但请转到./amplify/backend/function/your-function-name/your-function-name-cloud-formation-template.json并找到“ lambdaexecutionpolicy”->“属性” ->“政策文件”->“声明”。这是一系列策略。只需根据需要添加另一个对象即可。例如,

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

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