有同学咨询,在使用Elasticsearch时,出现WARN提示信息的,如何解决这个问题?如果不影响使用的话,是否可以隐藏掉这个警告信息呢?
警告信息如下:
[WARN][org.elasticsearch.entitlement.runtime.policy.PolicyManager.repository-s3.ALL-UNNAMED.software.amazon.awssdk.profiles] [localhost] Not entitled: component [repository-s3], module [ALL-UNNAMED], class [class software.amazon.awssdk.profiles.ProfileFileLocation], entitlement [file], operation [read], path /home/<acct>/.aws/credentials
org.elasticsearch.entitlement.runtime.api.NotEntitledException: component [repository-s3], module [ALL-UNNAMED], class [class software.amazon.awssdk.profiles.ProfileFileLocation], entitlement [file], operation [read], path /home/<acct>/.aws/credentials故障分析
经过丁老师分析,这个警告信息是Elasticsearch的权限管控(Entitlement)机制阻止了S3仓库插件读取亚马逊AWS凭证文件,原因是当ES检测到repository-s3组件后尝试读取 /home/<acct>/.aws/credentials 文件,但未授予文件读取权限,导致抛出NotEntitledException。由于Elasticsearch从8.x版本开始引入了Entitlement(权限授权) 机制,用于严格管控内置和第三方组件对系统资源的访问,目的是提升安全性。
问题解决
该故障有4种解决方式,具体如下:
解决方式一:通过ES配置放行S3凭证文件读取权限(推荐)
修改Elasticsearch的配置文件(elasticsearch.yml),授予repository-s3组件读取AWS凭证文件的权限:
# 1.放行repository-s3读取.aws/credentials文件的权限
entitlement:
repository-s3:
file:
read:
paths:
- "/home/<acct>/.aws/credentials" #替换为你的实际凭证文件路径
- "/home/<acct>/.aws/config" #可选:若用到 config 文件也放行
# 2.确保S3仓库插件已启用
plugin.mandatory: repository-s3修改后重启Elasticsearch即可。
解决方式二:将AWS凭证配置到ES的S3仓库中,绕过文件读取
如果不想修改ES权限配置,可在创建S3仓库时指定AWS 凭证,避开文件读取权限问题:
#通过ES API创建S3仓库(替换为你的实际信息)
PUT /_snapshot/my_s3_repository
{
"type": "s3",
"settings": {
"bucket": "your-s3-bucket-name", #你的S3桶名
"region": "us-east-1", # 你的S3区域
"access_key": "your-aws-access-key", #AWS AccessKey
"secret_key": "your-aws-secret-key", #AWS SecretKey
"base_path": "es-backups" #可选:S3中的备份路径
}
}注意:这种方式会将AWS凭证明文存储在ES配置中,生产环境需配合ES的加密功能,避免凭证泄露。
解决方式三:使用IAM角色,无凭证文件,适合云环境
如果ES部署在亚马逊AWS EC2/EKS等云环境中,可给ES的实例绑定IAM角色,这样repository-s3插件会自动通过IAM角色获取权限,无需读取~/.aws/credentials 文件,从根源避免权限问题
实现方式:
1.在AWS IAM中创建角色,添加S3访问权限;
2.将角色绑定到ES所在的EC2实例/EKS Pod;
3.创建S3仓库时不指定access_key/secret_key,ES会自动使用IAM角色:
PUT /_snapshot/my_s3_repository
{
"type": "s3",
"settings": {
"bucket": "your-s3-bucket-name",
"region": "us-east-1",
"base_path": "es-backups",
"role_arn": "arn:aws:iam::123456789012:role/ES-S3-Access-Role"# 你的IAM角色ARN
}
}解决方式四:彻底隐藏WARN信息
在modules/repository-s3/src/main/config/log4j2.properties中设置
logger.entitlements_repository_s3.name = org.elasticsearch.entitlement.runtime.policy.PolicyManager.repository-s3.ALL-UNNAMED
logger.entitlements_repository_s3.level = error就会隐藏该WARN信息,不影响基本功能的使用。
有同学咨询,使用Visual Studio工具C#开发的Winform程序,生成后软件目录全是大量dll文件,看起来杂乱无章,有没有什么办法能让他统一放到一个文件夹里边呢?丁老师对此问题进行解答。为什么会产生大量的dll文件?因为在使用...
linux下生成的gz文件,有些看的到,删除不了,一删除就提示No such file or directory,怎么办呢?不说废话,直接上解决办法:查看这个文件的 inode号#ls -lhi .根据inode号删除# find . ...
这个问题,用普通sql语句查询,好解决,把表的字符编码改为对应的就可以了。 但在使用视图查询时,比如select 'aaa' as type from xxx; select * from view where typ...
微信H5支付,就是在非微信客户端内调用微信客户端进行支付,比如在手机自带浏览器中选择微信支付,就会提示打开微信,在微信客户端内完成支付。之前这个功能是内部使用,只对京东等一些大型电商平台开放,小企业无法申请,但是近日微信开放了H5支付...
现在微信支付已经超越支付宝,成为中国最广泛的在线支付方式。作为互联网电子商务服务商,如何开通对接微信支付?如何使用微信支付呢?丁老师整理一篇微信支付常见的问题解答。一、如何开通微信支付?微信支付可以在微信支付官网(https://pay.w...
小程序定制开发的流程和费用,以及需要准备的材料,(包括但不限于微信小程序、百度小程序、支付宝小程序、抖音小程序、小红书小程序)具体如下:一、小程序开发的行政流程1.确定软件开发公司,和开发公司签订合同2.甲方支付首期开发费用3.乙方开始进行...
CI框架是一款很小却又非常强大的PHP程序框架,非常适合用来搭建中小型网站以及扩展程序。有同学问到,在使用CI框架时,比如要对全站的标题、公司信息、电话等设置一个全局变量,不用每个页面都写死,该怎么办呢?丁老师来教你:1.打开页面的控制器文...
在进行vue开发中,经常会遇到复制对象,赋值新对象后,原对象值被改变的问题,举个例子:let old={ "a":1, "b":2 } let new=old; new['c']=3;...