在我的html中显示AWS cognito池ID是否安全?

时间:2016-10-03 17:33:00

标签: amazon-web-services amazon-s3 aws-lambda aws-sdk amazon-cognito

我正在使用AWS Cognito,Lambda,S3和其他十几项服务构建无服务器网站。我的登录页面中的HTML / JS具有cognito池ID。这有多安全?我知道隐藏敏感内容是最佳做法。但这不是客户端服务器。如果我诚实,它的所有客户。我通过lambda调用访问一些敏感数据。但即使这个调用也需要一些纯文本敏感的输入,比如用户ID。

    <script src="https://sdk.amazonaws.com/js/aws-sdk-2.3.7.min.js">   </script>
    <script>
    AWS.config.region = 'XX-XXXX-1';
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'XX-XXXX-1:XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX'
    });
    var lambda = new AWS.Lambda();
    </script>

我真的不喜欢poolID可见。攻击者可以复制此攻击并强制使用我的认知ID。有什么想法可以隐藏吗?

3 个答案:

答案 0 :(得分:2)

使用标识池ID来创建客户端是一项要求,并且保持客户端是非常常见的。它并不是一个主要的风险,而且你可以通过一些修补来限制它们。

您可以通过Cognito创建的角色和链接到池来降低暴露身份池ID的风险。通过这些,您可以缩小Cognito将为未经身份验证/验证的用户生成的凭据。 This blog post有更多关于如何做到这一点。您可以更进一步,通过大大限制未经身份验证的用户的权限,直到他们登录到经过身份验证的身份。

答案 1 :(得分:0)

我也有同样的担忧,并计划使用php或node.js来保持服务器端的Cognito池ID和客户端ID(例如EC2)。然而,我发现亚马逊改变主意并且不包括Cognito User Pools客户端SDK支持,我感到很沮丧。 Has anyone connected to a user pool from a lambda written in Node

希望这将包含在未来版本中。

我怀疑php也是如此。

另一种方法是使用javaScript混淆器之一作为这个: javascriptObfuscator列表中的{{3}}隐藏了只看页面源的键或ID。

答案 2 :(得分:0)

您可以毫不费力地将池和其他Cognito ID放在HTML中(如果您已经仔细定义了未经授权的策略),但您可能希望使用API​​ Gateway(内置Cognito授权程序)来处理调用其他后端服务(如DynamoDB或S3)而不是直接从前端js使用它们。这里描述的是:

https://aws.amazon.com/blogs/mobile/aws-mobile-app-backend-with-hybrid-apps/