首页 > 解决方案 > 如何将策略附加到每个 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 身份、移动设备和桌面设备?

谢谢

标签: aws-lambdaaws-iotaws-userpools

解决方案


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


推荐阅读