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

Django-Haystack使用具有IAM凭证的Amazon Elasticsearch托管

宋宏毅
2023-03-14
问题内容

我希望使用Amazon的Elasticsearch服务器在Django数据库中搜索长文本字段。但是,我也不想向那些没有登录并且不想通过模糊性或某些IP限制策略依赖安全性的用户公开此搜索(除非它可以与现有的heroku应用完美配合,部署Django应用的位置)。

Haystack似乎在这方面还有很长的路要走,但是似乎没有一种简单的方法来配置它以使用Amazon的IAM凭据来访问Elasticsearch服务。它使用的是Elasticsearch-
py中确实存在此功能

https://elasticsearch-py.readthedocs.org/en/master/#running-with-aws-
elasticsearch-service

from elasticsearch import Elasticsearch, RequestsHttpConnection
from requests_aws4auth import AWS4Auth

host = 'YOURHOST.us-east-1.es.amazonaws.com'
awsauth = AWS4Auth(YOUR_ACCESS_KEY, YOUR_SECRET_KEY, REGION, 'es')

es = Elasticsearch(
    hosts=[{'host': host, 'port': 443}],
    http_auth=awsauth,
    use_ssl=True,
    verify_certs=True,
    connection_class=RequestsHttpConnection
)
print(es.info())

关于使用HTTP授权,我在https://github.com/django-haystack/django-
haystack/issues/1046的问题下找到了它

from urlparse import urlparse
parsed = urlparse('https://user:pass@host:port')
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': parsed.hostname,
        'INDEX_NAME': 'haystack',
        'KWARGS': {
            'port': parsed.port,
            'http_auth': (parsed.username, parsed.password),
            'use_ssl': True,
        }
    }
}

我想知道是否有一种方法可以将两者结合起来,类似于以下内容(由于不仅仅具有用户名和密码,这也产生了错误):

from requests_aws4auth import AWS4Auth
awsauth = AWS4Auth([AACCESS_KEY],[SECRET_KEY],[REGION],'es')


HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': [AWSHOST],
        'INDEX_NAME': 'haystack',
        'KWARGS': {
            'port': 443,
            'http_auth': awsauth,
            'use_ssl': True,
            'verify_certs': True
        }
    },
}

这里的错误:

TypeError at /admin/
must be convertible to a buffer, not AWS4Auth

Request Method:     GET
Request URL:    http://127.0.0.1:8000/admin/
Django Version:     1.7.7
Exception Type:     TypeError
Exception Value:

must be convertible to a buffer, not AWS4Auth

Exception Location:     /usr/lib/python2.7/base64.py in b64encode, line 53

关于如何实现此目标的任何想法?


问题答案:

你是从成功的一步,加入connection_classKWARGS如预期正常工作了。

import elasticsearch

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': [AWSHOST],
        'INDEX_NAME': 'haystack',
        'KWARGS': {
            'port': 443,
            'http_auth': awsauth,
            'use_ssl': True,
            'verify_certs': True,
            'connection_class': elasticsearch.RequestsHttpConnection,
        }
    },
}


 类似资料:
  • 我有一个关于在Lambda函数中运行的跨帐户IAM问题。(我知道人们可能会使用STS,但这个软件包真的不值得保护,我不想通过链接帐户) 账户“一”。 账户“B” Lambda是只读的,但是我相信boto3不会将凭据写入~/. aws,如果我使用boto3.client(不是会话)。不过我也把AWS_CONFIG_FILE设为 /tmp以防万一。它仍然失败。我怀疑我的提议是不可能的,因为LAMBDA

  • django-haystack 为Django提供了模块化的搜索,它提供一个统一的、友好的API,允许您插入不同的搜索后端(如Solr,Elasticsearch,Whoosh,Xapian,等等)而不需要修改代码。

  • 我是AWS世界的新手,我不是来自安全背景的人,所以围绕AWS IAM和SMTP设置的概念让我头晕目眩。 我已经按照所有步骤安装了AWS PHP SDK,验证了域(以及从AWS控制台成功发送了一些测试电子邮件)和一些我想发送测试电子邮件的个人电子邮件地址,但我没有得到的部分是SMTP/IAM。 我有他们提供的Amazon基本脚本,但我真的不明白在创建SMTP凭据和/或IAM时需要做什么,我搜索了所有

  • 我正在使用ActiveStorage将文件上载到S3存储桶。如果有人熟悉Heroku Bucketer插件,我用它测试了一段时间ActiveStorage,并将文件上传和下载到bucket中。 出于某些原因,我必须使用IAM角色将凭据设置为新的AmazonS3 bucket,其中只包含bucket名称和区域。在ActiveStorage RubyOnRails指南中,它说: 如果要使用环境变量、标

  • 所以我安装了pip-install-django-haystack或者我的项目virtualenv文件夹中的任何命令,我也安装了solr,但是现在我对该怎么做有些困惑。 我一直收到一个错误,说solr后端需要安装pysolr?我不知道我在哪里运行这个命令?“/manage.py build\u solr\u schema” 我一直试图参考《草垛指南》,但它有点模糊。请帮帮我!!谢谢

  • 我想使用boto3上传一个文件到AWS S3。但我只能临时访问S3,这是由一个不在我控制之下的Web服务提供的。我获得了以下凭据信息: 据我所知,例如,这些信息可以用于POST请求。但我无法找到如何将此信息与boto3命令结合使用 通常需要aws_访问密钥id和aws_机密访问密钥。这篇文章建议,这应该是可能的: 您应该通过AWS安全令牌服务(STS)生成临时凭证,而不是签署URL(通常在通过we