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

AWS Lambda无法访问公开ElasticSearch实例,本地可正常访问求助

问题解决步骤

1. 移除Lambda角色权限中的IP限制

你的Lambda执行角色的iamRoleStatements里添加了IpAddress条件,Lambda运行在AWS内部网络,源IP并非你设置的0.0.0.0,这直接导致权限策略不生效。删除该条件即可让权限正常应用:

修改后的iamRoleStatements:

iamRoleStatements:
  - Effect: Allow
    Action:
      - es:ESHttpPost
      - es:ESHttpPut
      - es:ESHttpDelete
      - es:ESHttpGet
    Resource:
      - {'Fn::GetAtt': ['ElasticSearchInstance', 'DomainArn']}
      - {
          'Fn::Join':
            [
              '',
              [
                {'Fn::GetAtt': ['ElasticSearchInstance', 'DomainArn']},
                '/*',
              ],
            ],
        }

2. 调整ElasticSearch的访问策略,允许Lambda角色访问

当前ES的AccessPolicies仅允许指定IP访问,Lambda的请求来自AWS内部,IP不在白名单内,需要添加一条允许Lambda角色的语句,同时保留原有IP白名单用于本地访问:

修改后的AccessPolicies:

AccessPolicies:
  Version: '2012-10-17'
  Statement:
    # 允许指定IP(本地环境)访问
    - Effect: 'Allow'
      Principal:
        AWS: '*'
      Action: 'es:*'
      Resource: '*'
      Condition:
        IpAddress:
          aws:SourceIp: ['182.177.251.40', '103.115.199.162']
    # 允许Lambda执行角色访问
    - Effect: 'Allow'
      Principal:
        AWS: 'arn:aws:iam::xxxxxxxx:role/infrastruct-dev-us-east-2-lambdaRole'
      Action: 'es:*'
      Resource: '*'

注意替换xxxxxxxx为你的AWS账号ID,确保角色ARN和错误信息中的一致。

原理说明

  • Lambda执行角色的权限不能加IP限制:Lambda没有固定公网IP,且运行时通过AWS内部网络访问ES,aws:SourceIp条件不适用。
  • ES的访问策略需要同时覆盖本地IP和Lambda角色:本地请求来自固定公网IP,Lambda请求来自指定IAM角色,两者需要分别授权。

内容的提问来源于stack exchange,提问作者Hamza J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:50:13