我想从执行角色有权执行该 API 网关的执行 AWS Lambda 调用授权设置为 AWS_IAM 的 AWS API 网关端点。
无论如何,我是否可以使用我的 Lambda 的当前执行角色对 API Gateway 的 HTTPS 请求进行签名?
编辑:
查看http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html,我可以使用 SDK 调用 AssumeRole 来承担有权执行 Api Gateway 的角色,然后提取可用于签署请求的密钥。
在发送数据之前,我使用 JSON.stringify 到数据,它看起来像这样
{"data": [{"key1": value1, "key2": value2}, {"key1": value1, "key2": value2}]}
Run Code Online (Sandbox Code Playgroud)
但是一旦它通过 AWS API Gateway 并且 Kinesis Firehose 将它放入 S3,它看起来像这样
{
"key1": value1,
"key2": value2
}{
"key1": value1,
"key2": value2
}
Run Code Online (Sandbox Code Playgroud)
JSON 对象之间的分隔符逗号不见了,但我需要它来正确处理数据。
API 网关中的模板:
#set($root = $input.path('$'))
{
"DeliveryStreamName": "some-delivery-stream",
"Records": [
#foreach($r in $root.data)
#set($data = "{
""key1"": ""$r.value1"",
""key2"": ""$r.value2""
}")
{
"Data": "$util.base64Encode($data)"
}#if($foreach.hasNext),#end
#end
]
}
Run Code Online (Sandbox Code Playgroud) json amazon-web-services amazon-kinesis aws-api-gateway amazon-kinesis-firehose
我一直在为下面的错误而苦苦挣扎。我已经尝试了很多教程和 stackoverflow 答案,但没有一个解决方案可以解决我的问题。
从源“ http://localhost:3000 ”访问 XMLHttpRequest at ' https://xxx '已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否 'Access-Control-Allow-Origin ' 请求的资源上存在标头。
我正在使用 SAM 无服务器来创建我的 api。
模板.yaml:
Globals:
Function:
Timeout: 10
Api:
Cors:
AllowMethods: "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'"
AllowHeaders: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
AllowOrigin: "'*'"
Run Code Online (Sandbox Code Playgroud)
我的 lambda 函数: 我的 GET 响应和 OPTIONS 响应都返回以下标头:
headers: {
"Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'",
"Access-Control-Allow-Origin": "'*'",
"Access-Control-Allow-Methods": "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'"
}
Run Code Online (Sandbox Code Playgroud)
我的 API 使用放大进入我的 ReactJs 应用程序:
API.get(apiName, path, {
headers: {
"Access-Control-Allow-Origin": "*",
// "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with",
// "Access-Control-Allow-Methods": "OPTIONS,POST,GET,PUT,DELETE",
// 'Content-Type': 'application/json'
}
})
Run Code Online (Sandbox Code Playgroud)
我已经在我的 template.yaml、我的 lambda 函数和我的 reactJs 项目中尝试了 Access-Control-Allow-Headers、Access-Control-Allow-Methods …
javascript sam aws-cloudformation aws-api-gateway aws-serverless
我正在使用 AWS Lambda 和 API Gateway 构建无服务器应用程序。为了防止 DDOS 攻击执行大量请求并花费我很多钱,我设置了一个带有请求配额的使用计划(例如 10K 请求/月)。这需要调用者将 API 密钥作为标头传递。
这看起来效果很好,但我还需要为此服务启用 CORS。为此,我需要允许未经授权的 OPTIONS 请求(“CORS 预检”请求),因为浏览器不支持在那里发送任何特殊标头。但后来我似乎找不到强制执行配额的方法,我又回到了原点:这些请求的数量不受控制可能会花费不可预见的金额。有什么办法可以排除这种可能性吗?
问题:我想使用Facebook身份验证授权我的Amazon API Gateway托管REST API用户.
我的理解:我知道Amazon Cognito可用于验证用户身份,称为联合身份.然后,我看到使用Amazon Cognito您的用户池验证API客户端,该客户端对Cognito用户池进行身份验证.我还发现使用Amazon API Gateway自定义授权器可以使用自定义授权.但是,我没有找到链接API网关使用Cognito Federated Identities(即Facebook这里)进行身份验证.我们是否可以使用与联合身份用户池相同的过程,还是应该像在自定义授权人中那样使用?我有点困惑.任何帮助是极大的赞赏.
提前致谢.
authentication amazon-web-services amazon-cognito aws-api-gateway amazon-cognito-facebook
我正在使用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
我有一个简单的C#Aws Lambda函数,它成功通过Lambda控制台测试进行测试,但如果从API网关(我从Lambda触发器选项生成)调用了502(Bad Gateway)失败,并且如果我使用postman. (此初始功能具有开放访问权限(无安全性))
// request header
Content-Type: application/json
// request body
{
"userid":22,
"files":["File1","File2","File3","File4"]
}
Run Code Online (Sandbox Code Playgroud)
我在日志中得到的错误是:
Wed Feb 08 14:14:54 UTC 2017 : Endpoint response body before transformations: {
"errorType": "NullReferenceException",
"errorMessage": "Object reference not set to an instance of an object.",
"stackTrace": [
"at blahblahmynamespace.Function.FunctionHandler(ZipRequest input, ILambdaContext context)",
"at lambda_method(Closure , Stream , Stream , ContextInfo )"
]
}
Run Code Online (Sandbox Code Playgroud)
似乎发布的对象没有传递给lambda输入参数.
代码如下
// Lambda function
public LambdaResponse FunctionHandler(ZipRequest input, ILambdaContext context)
{
try
{
var logger = context.Logger;
var …Run Code Online (Sandbox Code Playgroud) 我有一个代理到 AWS Lambda 函数的 API 网关资源。这对于传递尾随路径参数 ( /periodicals/{tail+})效果很好,但由于我希望这些参数是可选的,因此我还向ANY更高层的资源 ( /periodicals)添加了一个方法:
从 AWS 控制台中测试该方法时,这很有效。但是,直接从我的浏览器对该资源执行请求会导致以下响应:
{"message":"Missing Authentication Token"}
Run Code Online (Sandbox Code Playgroud)
有了这个标题:
x-amzn-errortype: MissingAuthenticationTokenException
Run Code Online (Sandbox Code Playgroud)
它还有一个x-cache带有值的标题Error from cloudfront,所以我猜它可能与 CloudFront 有关。我还没有明确设置 CloudFront,也不知道如何检查?
我想我阅读了有关此错误消息的每个线程,但它们似乎都不适用于我:

/periodicals/whatever(即{tail+}资源)时,它工作正常,但对于/periodicals.ANY.
感谢@Lakindu,一个有趣的观察是在 Stages 视图中的资源下方没有列出任何方法:
我还能做些什么来找出问题所在?
我正在尝试在AWS上创建一个多区域无服务器应用程序.我按照这里给出的说明进行操作.我正在使用无服务器框架,它使用Cloudformation脚本在AWS上创建所有资源.
我想为API网关创建一个自定义域作为区域端点.创建区域端点时,它会生成目标域.我想知道如何在Cloudformation脚本中获取目标域的值?
当我创建Edge优化端点时,我使用该DistributionDomainName属性获取CloudFront部署的值.但是,在创建区域端点时,我没有看到目标域名的任何属性.我尝试使用DistributionDomainName区域端点的属性,但它会抛出一个错误,表示没有DistributionDomainName.
以下是我脚本的一部分 -
# Creates a custom domain for the ApiGateway
customDomain:
Type: 'AWS::ApiGateway::DomainName'
Properties:
DomainName: ${self:custom.domain}
EndpointConfiguration:
Types:
- REGIONAL
RegionalCertificateArn: ${self:custom.certificateArn}
# Insert a DNS record in route53 hosted zone to redirect from the custom domain to CF distribution
dnsRecord:
Type: AWS::Route53::RecordSet
Properties:
Region: ${self:provider.region}
SetIdentifier: ${self:provider.region}
HostedZoneId: ${self:custom.hostedZoneId}
Name: ${self:custom.domain}
Type: CNAME
TTL: 60
ResourceRecords:
- "Fn::GetAtt": [customDomain, DistributionDomainName]
Run Code Online (Sandbox Code Playgroud)
请帮忙.谢谢!
UPDATE
Cloudformation现在通过RegionalDomainName属性返回区域域名.它可以用作Fn:GetAtt : [customDomain, …
regional amazon-web-services aws-cloudformation aws-api-gateway serverless-framework
理想情况下,我想锁定我的ALB,以便只能通过API网关访问它.
我已经研究过是否我可以API网关与入站规则联系起来 - 不过,我发现,API网关不能与IP地址或安全组关联.我也研究了面向内部的ALB,但由于VPC链接仅支持NLB,因此我无法使用它们.
任何帮助将不胜感激 - 我一直在寻找网关设置,但找不到此选项.
解决这个问题的最佳方法是什么,以便尽可能限制ALB?
aws-api-gateway ×10
aws-lambda ×4
c# ×1
cors ×1
javascript ×1
json ×1
node.js ×1
regional ×1
sam ×1
signing ×1