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模板吗?
答案 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
,这些更改将部署到云中。