TL;DR: 是否可以手动更改用于身份验证后功能配置的 Amplify CloudFormation 模板以授予(例如)IoT attachPrincipalPolicy 权限?
我正在使用 AWS Amplify 和amplify
CLI 来设置一个新项目。总体而言,Amplify 让事情变得非常简单,但我一直认为您只能在 Amplify 控制项目变得困难或不可能完成之前使用 Amplify “到目前为止”。
我感兴趣的用例与PubSub
使用 IoT进行设置有关——AWS 的说明介绍了如何使其工作,但我将其称为“概念证明”而不是“您应该在任何接近生产的东西中使用的东西”——它涉及手动调用aws iot attach-principal-policy --policy-name 'myIoTPolicy' --principal '<YOUR_COGNITO_IDENTITY_ID>'
每个 Cognito 身份。
相反,我想做的是在用户登录网站时使用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 模板的某些配置时,这将被删除?