如何将策略附加到每个Cognito身份



我想将物联网策略附加到给予我的应用程序的联邦用户的Cognito身份。我试图在我的用户池的Post确认触发器中使用Lambda函数来做到这一点。下面是我的函数:

const AWS = require('aws-sdk');
const iot = new AWS.Iot();
exports.handler = async function(event, context) {
const policyName = 'arn:aws:iam::XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const target = context.identity.cognitoIdentityId;
await iot.attachPolicy({ target, policyName }).promise();
const response = {
statusCode: 200,
body: JSON.stringify('Policy attached.'),
};
return response;
};

当这个函数运行时我得到一个错误:

"cannot read property 'cognitoidentityid' of undefined"

如果将principal定义为

,则出现类似错误
const principal = context.cognito_identity_id; //error: "Missing required key 'target' in params"

根据Iot文档," Lambda函数中的context对象包含context的值。cognito_identity_id,当您使用通过Amazon cognito_identity池获得的AWS凭证调用该函数时。"有人能告诉我怎么做吗?

我应该补充说,我想为桌面和移动用户附加此策略。Lambda文档暗示上下文对象的identity属性仅为移动应用程序提供。如果这是真的,那么是否有一种不同的方式将物联网策略附加到所有Cognito标识,移动和桌面一样?

感谢

总而言之,您将无法在Cognito的post确认触发器中获得身份id

为了克服它,客户端可以调用单独的Lambda函数(一旦用户被确认),并且在Lambda中可以附加策略,因为在这里您将获得身份id

我不喜欢的另一种选择是客户端自己在用户确认后附加一个策略。

附加策略API - https://docs.aws.amazon.com/iot/latest/apireference/API_AttachPolicy.html

最新更新