小编Mik*_*ick的帖子

aws-sam-local环境变量

我在这里阅读自述文件:https://github.com/awslabs/aws-sam-local

我已经写在python 3.6拉姆达及其类似HelloWorld示例这里:https://github.com/awslabs/aws-sam-local/tree/develop/samples/hello-world/python

template.yml看起来像这样:

AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: MyFunction1 API
Resources:
  MyFunction1:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: MyFunction1
      Handler: lambda_module.lambda_handler
      Runtime: python3.6
      CodeUri: lambda.zip
      MemorySize: 128
      Timeout: 10
      Policies:
        -AWSLamdbaBasicExecutionRole
      Events:
        BingLambdaEndpoint:
          Type: Api
          Properties:
            Path: MyFunction1/search
            Method: get
Run Code Online (Sandbox Code Playgroud)

我在lambda中有环境变量但在启动时无法连接它们.文档说我可以创建一个environments.json文件并在invoke命令上附加以下内容:使用--env-vars invoke参数

我的环境文件看起来像示例,我收到一个错误: Unable to find environment variable: api_key

environment.json看起来像这样:

{
  "MyFunction1": {
    "api_key": "123456789",
    "BUCKET_NAME": "testBucket"
  }
}
Run Code Online (Sandbox Code Playgroud)

命令我运行是这样的:

sam local invoke MyFunction1 --env-vars environment_variables.json -e event.json
Run Code Online (Sandbox Code Playgroud)

有人能提供额外的见解吗?

aws-lambda aws-sam-cli serverless

18
推荐指数
4
解决办法
1万
查看次数

IHttpPromise使用TypeScript 2.5错误地扩展了IPromise

我开始使用Typescript 2.5,现在我收到了Angular打字稿定义文件中代码的消息:

interface IHttpPromise<T> extends IPromise<T> {
    success(callback: IHttpPromiseCallback<T>): IHttpPromise<T>;
    error(callback: IHttpPromiseCallback<any>): IHttpPromise<T>;
    then<TResult>(successCallback: (response: IHttpPromiseCallbackArg<T>) => IPromise<TResult>, errorCallback?: (response: IHttpPromiseCallbackArg<any>) => any): IPromise<TResult>;
    then<TResult>(successCallback: (response: IHttpPromiseCallbackArg<T>) => TResult, errorCallback?: (response: IHttpPromiseCallbackArg<any>) => any): IPromise<TResult>;
}
Run Code Online (Sandbox Code Playgroud)

现在收到一条错误消息:

Severity    Code    Description Project File    Line    Suppression State Error TS2430  (TS) Interface 'IHttpPromise<T>' incorrectly extends interface 'IPromise<T>'.   Types of property 'then' are incompatible.
    Type '{ <TResult>(successCallback: (response: IHttpPromiseCallbackArg<T>) => IPromise<TResult>, errorCa...' is not assignable to type '{ <TResult>(successCallback: (promiseValue: T) => IHttpPromise<TResult>, errorCallback?: …
Run Code Online (Sandbox Code Playgroud)

javascript typescript angular

8
推荐指数
1
解决办法
3239
查看次数

我的身份池 ID 有多敏感?

背景

我一直在研究消耗 AWS 资源(主要是 API 网关后面的 Lambda)的前端 javascript 应用程序。API 网关资源受 IAM 保护,应用程序相应地使用 Cognito 提供的大部分内容。

这包括启用了未经身份验证的身份的身份池,以及与 Cognito 用户池和多个社交和自定义 OIDC 提供商的联合。Cognito 仅通过我们的前端 JavaScript 代码使用亚马逊的 SDK 进行交互。

未经认证的身份

ID 池 id 的敏感性适用于我的所有用例,但我对未经身份验证的用例最为好奇。我们一直在遵循似乎是Amazon 建议的方法:使用 Cognito 或 STS 获取 IAM 密钥,并使用这些密钥访问 AWS 资源。 我什至一直在传播这个福音。

这一切都很好,但它确实需要我向前端公开我的身份池 ID。身份池 ID 是您为未经身份验证的 IAM 角色获取 IAM 密钥所需的唯一信息。

从理论上讲,任何攻击者都可以使用我使用的相同 Amazon SDK 获取我的身份池 ID 并开始滥用我的资源(允许用于 Unauth IAM 角色)。

问题

  • 一般来说,我应该考虑一个身份池 id 有多敏感?可以向任何人展示这个吗?
  • 如果我决定它足够灵敏不会暴露到浏览器,我该如何处理呢?我在哪里以及如何隐藏它并获得它?
  • 在任何情况下,我应该“烘焙”一种经常旋转 id 的方法吗?
  • 是否有(类型的)用例可以公开 id,哪些用例不能公开?

我正在寻找的答案

正如上面链接的答案中所指出的,我的理解是未经身份验证的身份并不是万无一失的,并且只能提供合理的置信度,即它是您的应用程序的另一端。换句话说,虽然并非不可能,但有人使用此模型滥用您的 AWS 后端至少是相当困难的。 …

javascript amazon-web-services amazon-cognito aws-cognito

5
推荐指数
0
解决办法
1228
查看次数

编排AWS lambda函数

背景

我有一个 API 网关端点,它代理 Lambda 函数 (Lambda A),供我的 React 应用程序获取客户数据。

此 lambda 函数进行 API 调用来获取客户数据,但响应的格式还有很多不足之处。所以我想重新格式化它。

我没有将这种重新格式化逻辑填充到 Lambda A 中,而是编写了一个单独的 Lambda 函数 (Lambda B)。当我的 API 网关端点被命中时,我需要调用这两个函数,第一个函数的输出是第二个函数的输入。

第一个想法:阶跃函数

Step 函数看起来很自然,但可以在阶段之间传递的数据有效负载的大小有 32kb 的限制。我们的 json blob 客户数据经常超出此范围。

我听说针对这种情况提供的唯一“最佳实践”是将有效负载写入 S3,然后将对象密钥传递到下一阶段。

这很好,但我对必须向 S3 写入和删除如此多的短期对象感到不高兴。每天可能有数十或数十万个此类请求。所以我(暂时)放弃了阶跃函数方法。

目前的方法

我目前正在使用 javascript SDK 直接从 Lambda A 调用 Lambda B。这有相当多的缺点;值得注意的是,我有时会同时运行两个 lambda,但没有任何性能优势。换句话说,我付钱让 Lambda A 坐在那里等待 Lambda B 的响应(我也付钱)。

这感觉像是一种反模式,而且我听说过它具有这样的特征。

问题

这似乎是一个相对常见的场景 - 进行 API 调用(函数 A),然后执行一些附加逻辑来补充、重新格式化或以其他方式修改该响应(函数 B),然后将其传回调用者。

当然,我不是第一个想要使用两个 Lambda 函数来做这样的事情的人。

  • 假设我不能使用步骤函数,我可以选择使用两个 lambda 函数执行此操作吗?

  • 除了使用 S3 之外,还有其他方法可以解决 Step Functions 的 32kb 有效负载大小限制吗?

  • 如果我愚蠢地想避免使用 S3/Step …

javascript amazon-web-services aws-lambda aws-api-gateway aws-step-functions

5
推荐指数
1
解决办法
584
查看次数

尽管配置,用户池仍允许两个用户使用相同的电子邮件

背景

aws-amplify用来与Cognito互动。因此,当用户向我的应用注册时,我会致电Auth.signUp()。我仅将用户名(电子邮件)和密码传递给此功能。

我的用户池配置为仅允许通过电子邮件登录:

用户池属性配置


错误?

在我的前端代码中,我不小心将事件侦听器注册了两次,因此Auth.signUp()被两次调用(同时或至少快速连续地)使用相同的参数。

这导致使用相同的电子邮件在我的用户池中创建了两个用户。我对用户池配置的了解表明,这不可能。


比赛条件?

我的第一个想法是,由于我将两个请求如此紧密地发送在一起,因此这可能是不可避免的竞争条件。如果我在两次调用之间引入了人为的暂停(断点或setTimeout说),则一切都会按预期进行。

但是,即使请求之间的间隔很小,第二个请求也确实会返回我期望的错误响应:

{ code: 'InvalidParameterException',
  name: 'InvalidParameterException',
  message: 'Alias entry already exists for a different username' 
}
Run Code Online (Sandbox Code Playgroud)

令人遗憾的是,此响应具有误导性,因为我确实在该请求池中创建了第二个(重复的)用户。


MCVE

通过Auth.signUp在节点脚本或浏览器中同时执行两次,很容易重现这一点。 该存储库包含这两个示例。


问题

  • 这是Cognito的合法错误吗?
  • preSignUp Lambda是否可以触发我唯一的防御方式?如果是这样,那么该实现的大招会是什么样子?

javascript amazon-web-services amazon-cognito aws-amplify

5
推荐指数
1
解决办法
962
查看次数

AWS SigV4 请求签名不匹配

尝试使用 Rest API 创建事物类型时,我收到带有以下错误消息的无效请求。我不是在使用 aws-sdk,而是在使用 python rest 客户端。

我按照此处给出步骤使用 sigv4 签署请求。那里给出的示例用于列出事物类型。所以我使用的凭据是正确的。错误信息 :

响应代码:403

{"message":"我们计算的请求签名与您提供的签名不匹配。请检查您的 AWS 秘密访问密钥和签名方法。有关详细信息,请参阅服务文档。"}

我正在使用的代码:

# See: http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html
# This version makes a POST request and passes request parameters
# in the body (payload) of the request. Auth information is passed in
# an Authorization header.
import sys, os, base64, datetime, hashlib, hmac
import requests  # pip install requests

# ************* REQUEST VALUES *************
method = 'POST'
service = 'execute-api'
api = 'https://iot.eu-west-2.amazonaws.com/thing-types/GasSensor'
request_parameter='{"thingTypeProperties":{"searchableAttributes": …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services python-requests aws-iot

2
推荐指数
1
解决办法
3640
查看次数