小编evd*_*vdh的帖子

AWS API Gateway/Cognito Userpools/Lambdas无法传递呼叫者凭据

我正在使用Lambda后端开发AWS API Gateway实现.我使用API​​ Gateway与Cognito Userpools(相当新的)集成,而不是使用Lambda构建自定义授权程序(这是在集成之前的推荐方式).

我创建了一个概念验证(javascript),用Cognito对用户进行身份验证,然后使用这些凭据调用API Gateway.因此,基本上,对API网关的结束调用是使用我在Authorization标头中从Cognito(result.idToken.jwtToken)收到的JWT令牌.这一切都有效,我可以验证只有使用此令牌才能访问API.

一切正常,但现在我想在我的Lambda中访问Cognito身份; 例如身份ID或姓名或电子邮件.我已经阅读了如何映射所有参数,但实际上我只是在集成请求中使用标准的"Method Request Passthrough"模板.我记录了lambda中的所有参数,所有'cognito'参数都是空的.

我查看了许多类似的问题,并且他们都建议在集成请求中启用"使用调用者凭据调用"复选框.这很有道理.

但是,只有在使用AWS_IAM作为授权时才能启用此复选框,如果您选择了您的cognito UserPool ,则不能启用此复选框.所以它是不可能选择它并且实际上是禁用的.

在这种情况下有人知道该怎么做吗?这仍然在进行中,还是有理由不能启用此功能并在Lambda中获取认证凭据?

非常感谢.

amazon-web-services amazon-cognito aws-lambda aws-api-gateway

10
推荐指数
1
解决办法
1525
查看次数

AWS / Lambda / Java上的Elasticsearch客户端-2.5秒的客户端启动时间

我们正在使用AWS Lambda(Java)和elasticsearch客户端连接到AWS上的托管Elasticsearch实例。我在大约2.5秒的第一次请求上遇到了漫长的等待时间(冷启动时)。之后,它很快。我真的无法弄清楚这种延迟来自何处,我正在尝试对其进行优化。

private void testPerformanceElasticSearch() throws Exception {
        log.info("1. Before testing elasticsearch client");
        AWS4Signer signer = new AWS4Signer();
        signer.setServiceName("es");
        signer.setRegionName("eu-west-1");
        HttpRequestInterceptor interceptor = new AWSRequestSigningApacheInterceptor("es", signer, new DefaultAWSCredentialsProviderChain());
        String endpoint = "https://" + Utils.getEnvironmentVariable("ELASTIC_SEARCH_ENDPOINT");
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(RestClient.builder(HttpHost.create(endpoint)).setHttpClientConfigCallback(hacb -> hacb.addInterceptorLast(interceptor)));
        log.info("2. After getting elasticsearch client");
        log.info("3. Before doing a elasticsearch query");
        log.info("4");
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        log.info("5");
        TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("userId", "abc");
        log.info("6");
        boolQueryBuilder.must(termsQueryBuilder);
        log.info("7");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        log.info("8");
        searchSourceBuilder.query(boolQueryBuilder);
        log.info("9");
        SearchRequest searchRequest = new SearchRequest("users");
        log.info("10"); …
Run Code Online (Sandbox Code Playgroud)

java amazon-web-services elasticsearch

8
推荐指数
2
解决办法
546
查看次数