aws-lambda - 如何将策略附加到每个 Cognito 身份
问题描述
我想将 IoT 策略附加到为我的应用程序的联合用户提供的 Cognito 身份。我正在尝试在我的用户池的确认后触发器中使用 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"
如果我将主体定义为类似的错误
const principal = context.cognito_identity_id; //error: "Missing required key 'target' in params"
根据 IoT 文档,“当您使用通过 Amazon Cognito 身份池获得的 AWS 凭证调用函数时,您的 Lambda 函数中的上下文对象包含 context.cognito_identity_id 的值。” 谁能告诉我该怎么做?
我应该补充一点,我想为桌面用户和移动用户附加此策略。Lambda 文档暗示上下文对象的身份属性仅适用于移动应用程序。如果这是真的,那么是否有另一种方法可以将 IoT 策略附加到所有 Cognito 身份、移动设备和桌面设备?
谢谢
解决方案
To sum up, You will not be able to get identity id in Cognito's post confirmation trigger.
To overcome it, Client can invoke separate Lambda function (once user is confirmed) and in that Lambda you can attach policy, because here you will get identity id.
Other alternative which I don't prefer is client themselves attach a policy after user confirmation.
Attach Policy API - https://docs.aws.amazon.com/iot/latest/apireference/API_AttachPolicy.html
推荐阅读
- java - MediaPlayer 在未声明为私有时不起作用
- perl - 在 Perl 中,如何取消引用作为参数传递的临时哈希?
- ruby - 未初始化的常量Phash
- reactjs - 嵌入 React + React-Router 的 Botkit 导致 404 错误
- python - Why does mypy complain about Any as return annotation and how should I annotate a return value that can be anything?
- javascript - 如何在 Javascript 请求承诺中分配变量
- ruby-on-rails - 如何根据字段的值使用葡萄实体?
- java - 仅使用数学将数字小数部分作为整数
- python - 如何使用文本文件中的值在 python 中创建曲面图?
- python - understanding iteration of python values