当前位置: 首页 > 面试题库 >

从node.js创建对AWS ES实例的有效签名请求

奚高扬
2023-03-14
问题内容

我正在尝试找到一个如何连接到node.js中的AWS ES实例的示例,然后通过一个简单的请求访问ES集群。

我正在尝试使用elasticsearch
node软件包
以及一个名为http-aws-
es的
开源插件来执行此操作。

我已经将aws ES访问策略配置为如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<account-id>:root"
      },
      "Action": "es:*",
      "Resource": "example-domain.us-east-1.es.amazonaws.com:<account-id>:domain/*"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "example-domain.us-east-1.es.amazonaws.com:<account-id>:domain/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "<my-ip>"
        }
      }
    }
  ]
}

因此,我希望能够通过IP地址或链接到我的AWS帐户的IAM用户在es实例上发出放置和获取请求。

我在node.js中尝试以下代码:

var aws_access_key = 'example';
var aws_secret_key = 'key';

var es = require('elasticsearch').Client({
    hosts: 'example-domain.us-east-1.es.amazonaws.com',
    connectionClass: require('http-aws-es'),
    amazonES: {
        region: 'us-east-1',
        accessKey: aws_access_key,
        secretKey: aws_secret_key
    }
});

es.ping({
    // ping usually has a 3000ms timeout
    requestTimeout: Infinity,

    // undocumented params are appended to the query string
    hello: "elasticsearch!"
}, function (error) {
    if (error) {
        console.log(error);
        console.trace('elasticsearch cluster is down!');
    } else {
        console.log('All is well');
    }
});

当前返回授权错误:

{ [Error: Authorization Exception]
  status: 403,
  displayName: 'AuthorizationException',
  message: 'Authorization Exception' }

我还没有看到通过在node.js中使用签名策略来使用aws ES实例的有效示例。有人有见识吗?


问题答案:

事实证明,除了一步之遥,我几乎可以正确回答问题中的所有内容。

上面的代码中与aws_access_key和关联的IAM用户aws_secret_key必须具有特定的权限才能与elasticsearch实例进行交互。因此,我登录到AWS控制台,并向需要与elasticsearch实例进行交互的IAM用户添加了以下策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1480915344000",
            "Effect": "Allow",
            "Action": [
                "es:*"
            ],
            "Resource": [
                "arn:aws:es:us-east-1:<account-id>:domain/*"
            ]
        }
    ]
}


 类似资料:
  • 我试图使用以下工作流程创建PAdES签名: PDF准备签名,哈希在浏览器中计算 哈希发送到后端 后端形成分离的CAdES签名 分离的CAdES被发送回组装PAdES签名的浏览器 我们有一个PDF签名的工作示例,其工作原理如下: 准备好PDF,并在浏览器中计算哈希值 这很好用。 然而,现在我们在后端使用DSS库,而不是BouncyCastle,因为我们正在尝试创建PAdES签名。因此,DSS lib

  • PDF下载示例:https://drive.google.com/file/d/12wv1Pb7gh4vCKOGhX4cZ3aOrLSiOo4If/view?usp=sharing 因此,当PDF在A.Reader(连续版本)中打开时,它表示证书无效,因为对该文档所做的更改导致签名无效。 但我看不出有什么变化。我们自己的应用程序只添加了一个签名(证书),为数千个其他PDF添加了正确的签名。未执行其

  • 问题内容: 我使用一些手动创建的训练数据来训练IBK分类器,如下所示: 然后我建立分类器: 我想用未标记的类创建一个新实例并对该实例进行分类,但我没有运气尝试了以下方法。 我刚收到以下错误 看起来我在创建新实例时做错了什么。如何准确创建一个未标记的实例? 提前致谢 问题答案: 问题在于此行: 当您尝试分类时,Weka会引发异常,因为没有与之关联的Instances对象(即,数据集)-因此,它对类属

  • 我试图使用“crypto/x509”包生成CSR,但没有找到在其主题中添加“EmailAddress”字段的方法。 根据文档,CertificateRequest结构有一个“EmailAddresss[]String”字段,但它被序列化到SAN扩展中。下面是我使用的测试代码:http://play.golang.org/p/otobatyutm 另外,我使用“OpenSSL Req”程序创建了一个

  • 问题内容: 目前,我有一个客户端-服务器应用程序,给定一个PDF文件,使用服务器证书对其进行签名,将签名与原始文件一起附加,然后将输出返回给客户端(所有这些操作均通过PDFBox实现)。 我有一个签名处理程序,这是我的外部签名支持(其中内容为PDF文件) 它工作正常,但我在想-如果PDF文件太大而无法上传怎么办?例如:100mb …这将永远!鉴于此,我想弄清楚,如果不对PDF文件签名,是否可以仅对