我有一个具有两个端点的API网关:
NONE
。委托(delegate)给一个名为fooLambda
的lambda。 AWS_IAM
。 客户端应该调用端点1以从
fooLambda
获取凭据,以便客户端可以成功调用端点2。我正在使用AWS Node.js sdk和
aws4
npm模块对aws请求进行签名。这是我的fooLambda
的一些伪代码:// get the role using this...
STS.assumeRole({
RoleArn: 'arn of my role that can call endpoint 2',
RoleSessionName: 'foobar',
})
// parse the sts creds like this....
const stsCredentials = STS.credentialsFrom(assumeRoleResponse)
// get a collection of signed headers like so
const signedHeaders = aws4.sign({
service: 'execute-api',
region: process.env.REGION,
}, {
secretAccessKey: stsCredentials.secretAccessKey,
accessKeyId: stsCredentials.accessKeyId,
sessionToken: stsCredentials.sessionToken,
}).headers;
// return the following headers to the client
return {
authorizationHeader: signedHeaders['Authorization'],
stsSecurityToken: signedHeaders['X-Amz-Security-Token'],
}
现在,我的意图是客户端可以将这两个 header 附加到他们的请求上,以便它们可以成功调用端点2,但是我收到一条错误消息,说安全 token 无效,但我不确定为什么。
更新:当我使用Postman的AWS Signature Authorization类型并提供我的accessKey,secretKey,aws区域,服务名称和 session token 参数时,它将创建授权 header ,并且对端点2的请求成功!
检查 postman 生成的授权 header 后,似乎授权 header 具有不同的签名。所以现在的问题是:“ postman 如何生成正确的授权 header ,而aws4却不是?”
最佳答案
使用aws4.sign
函数时,必须提供请求将具有的路径。否则,签名的请求与发出的实际请求之间将不匹配,AWS会拒绝。
关于amazon-web-services - 从临时凭证正确生成AWS auth header ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52939247/