我希望使用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_class
到KWARGS
如预期正常工作了。
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