【问题标题】:How to attach a policy to every Cognito identity如何将策略附加到每个 Cognito 身份
【发布时间】:2021-10-30 09:52:27
【问题描述】:

我想将 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-lambda aws-iot aws-userpools


    【解决方案1】:

    综上所述,您将无法在 Cognito 的确认后触发器中获取身份 id

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

    我不喜欢的其他选择是客户自己在用户确认后附加政策。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2016-12-17
      • 1970-01-01
      相关资源
      最近更新 更多