测试环境下如何让Elasticsearch对接S3 Mock创建快照并规避AWS凭证问题?
让Elasticsearch S3仓库绕过凭证验证(适配S3 Mock场景)
我之前在测试环境用s3rver做S3 mock时,也碰到过一模一样的"Unable to load credentials from service endpoint"错误。本质原因是Elasticsearch的repository-s3插件默认会走AWS的凭证链去查找合法凭证,哪怕你连接的是本地mock服务。要完全绕开AWS服务,只需要在仓库配置里加几个关键参数就行,下面是两种可行的方案:
方案一:仓库级配置(推荐,无需重启ES)
直接在注册仓库的请求里添加假的凭证信息、开启路径风格访问,并跳过签名验证。s3rver不需要真实的AWS凭证,随便填字符串就能通过校验,同时让ES停止尝试去获取AWS凭证:
PUT _snapshot/my_s3_repository { "type": "s3", "settings": { "bucket": "rtbackup", "endpoint": "localhost:9495", "protocol": "http", "access_key": "any_fake_key", "secret_key": "any_fake_secret", "path_style_access": true, "skip_signature": true } }
参数说明:
access_key/secret_key:随便填任意字符串即可,目的是让ES跳过凭证链的自动查找流程path_style_access: true:s3rver默认使用路径风格的bucket访问(比如http://localhost:9495/rtbackup),必须开启这个参数才能和mock服务正确通信skip_signature: true:告诉ES不要对请求进行AWS签名,s3rver不需要验证签名
方案二:全局配置(适合多个仓库共用mock)
如果需要在多个快照仓库里复用这个mock配置,可以修改elasticsearch.yml文件,添加全局的S3客户端配置,然后重启ES:
s3.client.default.access_key: any_fake_key s3.client.default.secret_key: any_fake_secret s3.client.default.skip_signature: true s3.client.default.path_style_access: true s3.client.default.endpoint: localhost:9495 s3.client.default.protocol: http
重启后,注册仓库的请求就可以简化成:
PUT _snapshot/my_s3_repository { "type": "s3", "settings": { "bucket": "rtbackup" } }
这样配置后,ES就会完全和AWS的凭证系统脱钩,所有快照操作都会直接和你的本地s3rver服务交互,完全满足测试需求。
内容的提问来源于stack exchange,提问作者smrt28
相关产品推荐
相关产品推荐

