You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch S3快照仓库无法访问S3桶:Access Denied问题求助

解决Elasticsearch EKS环境下S3快照仓库Access Denied问题

1. 修复S3桶策略中的ARN格式错误

你的S3桶策略中Principal的ARN存在格式错误:

"AWS": "arn:aws:iam::<account-id>role/elastic-dev"

缺少了<account-id>和role之间的冒号,正确的ARN应该是:

"AWS": "arn:aws:iam::<account-id>:role/elastic-dev"

这个格式错误会导致桶策略无法正确识别目标IAM角色,直接引发Access Denied。

2. 验证Java版本兼容性

Elasticsearch 7.17.x官方仅支持Java 8和Java 11,你当前使用的Java 20超出兼容范围,可能导致AWS SDK与ES插件之间出现兼容性问题,进而影响STS凭证获取或S3请求签名。建议切换到Java 11(推荐)或Java 8。

3. 确认服务账号的IAM角色关联配置

确保Elasticsearch的服务账号(elasticsearch-data、elasticsearch-master)已正确添加标注,键名必须是eks.amazonaws.com/role-arn,值为你的IAM角色ARN:

apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::<account-id>:role/elastic-dev
  name: elasticsearch-data
  namespace: default

添加后需要重启Elasticsearch Pod,让新的身份凭证生效。

4. 验证IAM角色的权限策略

除了桶策略,确保elastic-dev IAM角色本身附加了包含S3权限的策略(桶策略是资源授权,角色策略是身份授权,两者配合生效),示例策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListBucketMultipartUploads",
                "s3:AbortMultipartUpload",
                "s3:ListMultipartUploadParts",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::elastic-storage-backup-dev",
                "arn:aws:s3:::elastic-storage-backup-dev/*"
            ]
        }
    ]
}

5. 检查Elasticsearch节点的凭证获取能力

在Elasticsearch主节点Pod中执行以下命令,验证是否能正确获取IAM角色凭证:

aws sts get-caller-identity

如果返回的Arn不是arn:aws:iam::<account-id>:role/elastic-dev,说明服务账号与IAM角色的关联未生效,需要检查OIDC提供商配置、信任关系中的sub值是否与服务账号完全匹配。

6. 调整S3仓库配置(可选)

在创建S3仓库时,显式指定IAM角色ARN,帮助ES插件明确使用的身份:

curl -X PUT "http://localhost:9200/_snapshot/elasticsearch-data-backup" -H 'Content-Type: application/json' -u 'user:password' -k  -d' 
{
  "type": "s3",
  "settings": {
    "bucket": "elastic-storage-backup-dev",
    "endpoint": "s3.eu-west-3.amazonaws.com",
    "protocol": "https",
    "compress": true,
    "chunk_size": "100mb",
    "server_side_encryption": true,
    "role_arn": "arn:aws:iam::<account-id>:role/elastic-dev"
    }
}'

7. 确认插件安装完整性

确保所有Elasticsearch节点(主节点+数据节点)都安装了repository-s3插件,执行以下命令检查:

curl -X GET "http://localhost:9200/_cat/plugins?v" -u 'user:password' -k

如果有节点未安装插件,会导致仓库验证失败。


内容的提问来源于stack exchange,提问作者Y.hadj.younes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:06:16