Aws4 singning:任务1:创建规范请求中提到的URI参数是什么

时间:2019-03-06 07:39:04

标签: node.js amazon-web-services signing

在AWS文档https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html

Step2:规范URI是URI绝对路径部分的URI编码版本,它是URI中从HTTP主机到问号字符(“?”)的所有内容,该字符开始查询字符串参数(如果有的话)。是什么意思?

您能否用此示例请求https://customer-service.example.com/dev/customer/?name=alex&country=us

进行说明

1 个答案:

答案 0 :(得分:1)

请参考aws4 npm软件包。 It is well documented in it's github's page

在其文档中,AWS建议使用aws-sdk,因为URL签名对于一个非常简单的任务(如获取s3对象)可能会变得乏味。我们使用aws4是因为在我们的代码中导入aws-sdk会带来不必要的依赖。

以下是列出来自aws secretmanager的机密的示例。

在下面的示例中,

  • AWS服务由以下服务指示:“ secretsmanager”
  • 动作由“ X-Amz-Target”指示:“ secretsmanager.ListSecrets”

您可以参考相应的aws服务的API来修改以下示例以供您使用。

请注意以下示例,假定ec2已分配了正确的角色来执行此请求。这就是为什么在下面的示例中将看到它正在使用sts的原因。

如果情况不同,请检查documentation,以检查如何通过aws4 api传递密钥。

var http  = require('http'),
    https = require('https'),
    aws4  = require('aws4')

request(aws4.sign({service: 'sts', path: '/?Action=GetSessionToken&Version=2011-06-15'}))

function request(o) { https.request(o, function(res) { res.pipe(process.stdout) }).end(o.body || '') }

request(aws4.sign({
    service: 'secretsmanager',
    region: 'us-east-1',
    method: 'POST',
    path: '/',
    headers: {
        "Accept-Encoding": "identity",
        "X-Amz-Target": "secretsmanager.ListSecrets",
        "Content-Type": "application/x-amz-json-1.1"
    },
    body: '{}'
  }))