【问题标题】:Restrict AWS Lambda invocation to a single Alexa skill将 AWS Lambda 调用限制为单个 Alexa 技能
【发布时间】:2018-01-28 23:41:06
【问题描述】:

我正在尝试学习 Alexa 技能编程,其中我在亚马逊开发者门户中设置了技能界面和相应的 AWS Lambda 函数。该技能运行良好,但我对 Lambda 函数的安全性有疑问。我已选择 Alexa Skill Kit 作为 Lambda 函数的触发器,并且还将请求中的应用程序 ID 与技能的应用程序 ID 进行比较,以验证请求是否适用于该函数。 (https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/handling-requests-sent-by-alexa)。

但即便如此,我如何限制 Lambda 函数被另一个了解 Lambda arn 的技能调用?这不能被滥用来浪费计算资源等吗?

【问题讨论】:

    标签: amazon-web-services aws-lambda alexa alexa-skills-kit


    【解决方案1】:

    ARN 对您来说是完全私有的,您可以决定是否将其用于另一个触发器。如果您仍想限制您可以在 IAM 中创建自定义角色并将该角色分配给 lambda。那么只有那些具有特定角色的触发器才能执行 lambda。

    【讨论】:

    • 谢谢,但是您如何创建 IAM 角色来限制特定 Amazon 开发人员账户对 Lambda 的访问。开发者账户不是 AWS 资源,它是一个单独的门户。
    【解决方案2】:

    您已经回答了自己的问题。由于您在 lambda 函数中检查这个特定的 Alexa 技能 ID,因此几乎不可能从其他任何地方调用它而不是这个技能。例子:

    exports.handler = function(event, context, callback){
      var alexa = Alexa.handler(event, context, callback);
      // security so this set APP_ID from this specific Alexa skill is the onlly one that can execute this code
      alexa.appId = APP_ID;
      alexa.registerHandlers(handlers);
      alexa.execute();
    };
    

    如果您特定的 Alexa 技能仅有权执行此功能,则 APP_ID 是 id。

    希望这可以帮助您前进。

    【讨论】:

    • 不要在 lambda 代码中执行此操作,因为通过触发器的新检查会使此检查变得多余
    【解决方案3】:

    AWS 控制面板中新增的 lambda 函数是为 Alexa 设备创建角色时的一个复选框,通过勾选该框并输入技能 ARN the lambda,您可以仅为特定技能应用程序锁定 lambda 函数函数只能由该应用程序调用。 前面提到的方法包含 alexa.appId = APP_ID; lambda 函数调用中的变量是第二次安全检查,因此建议使用这两种方法。

    【讨论】:

    • 这是不正确的,因为检查 lambda 代码中的技能 ID 是旧方法。现在,当您在 Lambda 触发器中设置检查时,您实际上将 lambda 锁定为来自该应用程序 ID 的访问。也不建议检查 lambda 中的技能 ID,但这是多余的。
    猜你喜欢
    • 2017-07-15
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多