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

Posted

技术标签:

【中文标题】是否可以向使用 AWS Amplify 预置的 lambda PostAuthenticate 函数授予额外权限?【英文标题】:Can additional permissions be given to a lambda PostAuthenticate function provisioned with AWS Amplify? 【发布时间】:2020-03-26 05:28:30 【问题描述】:

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

我正在使用 AWS Amplify 和 amplify CLI 来设置一个新项目。总体而言,Amplify 让事情变得非常简单,但我一直认为您只能在 Amplify 受控项目变得困难或不可能完成之前,使用 Amplify 走“这么远”。

我感兴趣的用例与使用 IoT 设置 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 的权限,但是我认为如果/当我更改导致Amplify CLI 重新生成的某些配置时,这将被删除CloudFormation 模板?

【问题讨论】:

你弄明白了吗?是否可以以编程方式将策略附加到 IAM? 想知道同样的事情...需要让我的 lambda 执行角色访问机密管理器 【参考方案1】:

虽然这是一个相当手动的过程,但转到 ./amplify/backend/function/your-function-name/your-function-name-cloud-formation-template.json 并找到“lambdaexecutionpolicy”->“Properties” ->“政策文件”->“声明”。这是一系列政策。只需使用您需要的任何内容将另一个对象添加到数组中。例如,


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

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

【讨论】:

Dharman,感谢您编辑我的答案并删除“我希望这会有所帮助!”我想这是获得 18.2k 代表的一种方法。 另外,SO 不像百科全书。它实际上是关于技术问题和答案。尽管我的回答在技术上很准确,但我希望我的回答能帮助他们的特殊需求。您无需以自己的感知方式四处改变答案的“风格”。 你让我免于再调试 2 个小时

以上是关于是否可以向使用 AWS Amplify 预置的 lambda PostAuthenticate 函数授予额外权限?的主要内容,如果未能解决你的问题,请参考以下文章

AWS Amplify iOS:查找用户是不是登录的最可靠方法是啥

是否可以在没有 Cognito 用户池的情况下使用 AWS Amplify Analytics?

AWS Amplify,如何检查用户是不是登录?

AWS Amplify CLI CloudFront S3 限制

使用 AWS Amplify 和 AWS Cognito 进行数据特定授权

在 Cogntio/AWS Amplify 中支持多个用户池或组织?