AWS SAM中Lambda访问OpenSearch的IAM策略验证失败求助
解决Lambda访问OpenSearch的IAM策略无效问题
问题根源
你的IAM策略里的Resource字段存在两个错误:
- 包含了无效的
DomainName: mynewdomain项:IAM策略的Resource只能是ARN格式字符串,不能使用键值对形式 - 原ARN
arn:aws:es:eu-west-1:22222222222:domain/mynewdomain仅指向OpenSearch域本身,若Lambda需要操作域内的索引、文档等资源,权限范围不够
修正后的SAM模板代码
Replicate: Type: AWS::Serverless::Function Properties: FunctionName: !Sub ${AWS::StackName}-Replicate Description: !Sub - Stack ${StackTagName} Environment ${EnvironmentTagName} Function ${ResourceName} - ResourceName: DBReplicate CodeUri: ../src/Replicate Handler: index.handler Runtime: nodejs16.x MemorySize: 3008 Timeout: 30 Tracing: Active Policies: - PolicyName: Access PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: # 建议根据实际需求细化权限,比如仅允许文档写入操作 # - es:IndexDocument # - es:UpdateDocument # - es:DeleteDocument - es:* Resource: # 覆盖域内所有资源的ARN - arn:aws:es:eu-west-1:22222222222:domain/mynewdomain/* Events: MyDynamoDBtable: Type: DynamoDB Properties: Stream: !Ref TableStreamArn StartingPosition: TRIM_HORIZON BatchSize: 1
关键修改说明
- 移除无效Resource项:删掉了
DomainName: mynewdomain,只保留合法的ARN格式资源 - 扩展Resource权限范围:在ARN末尾添加
/*,让Lambda能访问OpenSearch域内的所有子资源(索引、文档等) - 可选:细化Action权限:如果不需要全量
es:*权限,可以替换为实际需要的操作(比如es:IndexDocument),遵循最小权限原则
运行sam validate即可通过策略校验。
内容的提问来源于stack exchange,提问作者moh.s
相关产品推荐
相关产品推荐

