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

无法使用AWS Parameters and Secrets Lambda Extension,请求连接被拒绝

排查AWS Parameters and Secrets Lambda Extension连接拒绝问题

问题描述

已完成AWS Parameters and Secrets Lambda Extension的必要配置:添加对应Layer、在请求头中配置X-Aws-Parameters-Secrets-Token,但调用扩展获取密钥时出现错误:

feign.RetryableException: Connection refused (Connection refused) executing GET http://localhost:2773/secretsmanager/get?secretId=test

使用Feign Client发起GET请求,session token正常,相关代码和CloudFormation配置如下:

相关代码实现

// SecretsAndParametersExtensionAPI class (API class for Feign Client) 
@Headers({"X-Aws-Parameters-Secrets-Token: {token}"})
public interface SecretsAndParametersExtensionAPI { // TODO move me

    @RequestLine("GET /secretsmanager/get")
    @Headers("X-Aws-Parameters-Secrets-Token: {token}")
    String getSecret(@Param("token") String token, @QueryMap Map<String, Object> queryMap);
}

// Test class to get Secrets by using AWS Secrets Parameters Lambda Extension
@Test
public void testSecretsExtension() {

    String sessionToken = EnvVarCommon.SESSION_TOKEN.get();
    System.out.println(sessionToken);

    try {
        SecretsAndParametersExtensionAPI secretsAndParametersExtensionAPI =
            Feign.builder().target(SecretsAndParametersExtensionAPI.class, "http://localhost:2773/");

        Map<String, Object> queryMap = new HashMap<>();
        queryMap.put("secretId", "test");

        String resultFromSecretExtension =
            secretsAndParametersExtensionAPI.getSecret(sessionToken, queryMap);

        System.out.println("Result From Secret Extension " + resultFromSecretExtension);
        log.debug("Request sent to ULH and ULH send request to LAVIN to download profile picture");

    } catch (IllegalStateException | JsonSyntaxException exception) {
        log.error(
            "Failed to get response from ULH for downloading profile picture for the UserID '{}'",
            exception);
    }
}

CloudFormation配置(template.yml)

Mappings:
  RegionToLayerArnMap:
    us-east-1:
      "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2"
    us-east-2:
      "LayerArn": "arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2"
    eu-west-1:
      "LayerArn": "arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2"
    eu-west-2:
      "LayerArn": "arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2"
    eu-west-3:
      "LayerArn": "arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2"


AlperTestBotLambda:
  Type: AWS::Serverless::Function
  Condition: EnableAlperTestbot
  Properties:
    Tracing: Active
    Runtime: java11
    Environment:
      Variables:
        component: !Ref Component
        componentShortName: !Ref ComponentShortName
        version: !Ref Version
        zone: !Ref Zone
        tenant: !Ref Tenant
        testTenant: "test"
        alperTestQueueName: !Ref AlperTestQueueName
        aws.sessionToken: !Ref SessionToken
    Policies:
      - !Ref SecureParameterAccess
      - !Ref PurgeSqsPolicyTestQueues
    EventInvokeConfig:
      MaximumRetryAttempts: 0
    Layers:
      - !FindInMap [ RegionToLayerArnMap, !Ref "AWS::Region", LayerArn ]

排查方向

1. 测试环境不匹配

Lambda Extension是运行在Lambda容器内部的本地服务,仅能在Lambda执行环境中访问。如果你的testSecretsExtension单元测试是在本地IDE/环境运行,而非部署到Lambda上执行,localhost:2773不存在,必然触发连接拒绝。

解决:将代码部署到Lambda环境测试,或使用SAM Local等工具模拟Lambda执行环境,确保Extension能被正确加载。

2. Extension Layer版本或Region问题

你使用的是版本2的Layer,属于较旧版本,建议升级到最新稳定版;同时确认当前部署的AWS Region在RegionToLayerArnMap映射范围内,避免Region不匹配导致Layer加载失败。

3. Lambda角色权限不足

检查SecureParameterAccess策略是否包含访问目标Secret的权限:

  • 需允许secretsmanager:GetSecretValue操作,资源为arn:aws:secretsmanager:<region>:<account-id>:secret:test-*(注意Secret ARN后缀可能带随机字符)
  • 需同时包含secretsmanager:DescribeSecret等必要权限

4. Feign Client配置冗余

你的SecretsAndParametersExtensionAPI接口中,接口类和方法上重复添加了X-Aws-Parameters-Secrets-Token头,虽不会直接导致连接拒绝,但可能引发头重复问题,建议仅保留一处配置。

另外确认EnvVarCommon.SESSION_TOKEN.get()获取的是Lambda环境变量AWS_SESSION_TOKEN(Lambda临时会话令牌的环境变量名是大写下划线格式)。

5. Extension未完成初始化

Lambda Extension需要时间初始化,如果函数在Extension启动完成前发起请求,会导致连接拒绝。可以在代码中添加短暂重试逻辑,或查看Lambda日志中是否有Extension xxx started successfully类的启动成功日志。

6. VPC网络限制(若配置了VPC)

如果Lambda函数配置了VPC,需确认所在安全组允许内部访问本地端口2773(Extension是本地服务,VPC通常不影响,但需排除特殊网络限制)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:25:39