7

我编写了一个 lambda 函数来访问数据库,因此第一步是从 AWS Secrets Manager 获取密钥。我有一个私有 VPC 以及与 lambda 函数关联的子网、NAT 网关和安全组。我也有secretsmanager.Secret.grantRead(lambda_exec_role),所以 lambda 应该可以访问 Secrets Manager。

由于某种原因,当我在 API Gateway 中测试它时,我在 CloudWatch 中得到了 "errno": "ETIMEDOUT" 和 "code": "NetworkingError"。从我在 API 中的打印日志来看,获取秘密失败了。

我还尝试为 Secrets Manager 添加一个 VPC 端点,如此处所示,但仍然出现相同的错误。

感谢这里的任何人可以帮助我或提供一些提示。

非常感谢!

4

2 回答 2

2

我也有一个 lambda 获取秘密内容。

它们是您可以尝试的几件事:

#1 确保您有权获取秘密值,我会给您我的工作配置:

  • Allow:secretsmanager:GetSecretValue 在你的秘密上
  • Allow:secretsmanager:DescribeSecret 在你的秘密上
  • Allow:secretsmanager:ListSecrets 在所有资源上

#2 我的 VPC 和子网也有问题。如果配置错误,您将无法调用 Secret Manager API。

  • 为您的 lambda 切换到 no VPC 并检查您是否可以获取您的密钥。如果它有效,则意味着您的 VPC/子网配置有问题。
  • 检查您的子网配置:
    • 在公共子网上,你可以为秘密管理器配置一个特定的端点,虽然我不能让它工作,不知道为什么。
    • 在私有子网上,您需要配置一个 NAT 网关,以便能够调用 Secret Manager API。

希望有一天它可以帮助某人。:)

于 2021-04-06T11:46:16.930 回答
0

这是我如何让它在serverless.yml.

AWS 参考:https ://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html#vpc-endpoint

以下 yml 出现在路径下resources.Resources.YourVPCEndpointNameHere

# Provides access from the VPC to Secrets Manager
# See https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html#vpc-endpoint
Type: AWS::EC2::VPCEndpoint
Properties:
  VpcEndpointType: Interface
  ServiceName: com.amazonaws.#{AWS::Region}.secretsmanager
  PrivateDnsEnabled: true

  # Reference your VPC here
  VpcId: !Ref EC2VPC

  # Reference your subnet ids here
  SubnetIds:
    - !Ref EC2SubnetA
    - !Ref EC2SubnetB
    - !Ref EC2SubnetC

  # Reference your security group(s) here
  SecurityGroupIds:
    - !Ref EC2SecurityGroup

提示:您需要该插件serverless-pseudo-parameters才能#{AWS::Region}正常工作。

于 2021-04-28T08:27:23.630 回答