如何在无服务器中使用带有 ses 的 vpc 端点

Posted

技术标签:

【中文标题】如何在无服务器中使用带有 ses 的 vpc 端点【英文标题】:how to use vpc endpoint with ses in serverless 【发布时间】:2020-07-07 11:53:18 【问题描述】:

我在没有 nat 网关/互联网访问的 vpc 中部署了功能。 目标:通过 SES 从此功能发送电子邮件(在 vpc 中)

我已经尝试使用带有 nat 网关的公有私有子网来发送电子邮件,它工作正常。但我正在尝试使用它 vi VPC 端点。我创建了一个电子邮件 vpc 端点,但不确定如何在 serverless.yml 中配置它。已尝试按照 https://www.serverless.com/framework/docs/providers/aws/guide/serverless.yml/

中所述设置配置

但没有任何效果,因为没有提及 ses。

【问题讨论】:

您好 Shubham,只是想知道无服务器部分的作用,因为您已经说过您的目标是通过 SES 从 VPC 中的功能发送电子邮件。您是否打算稍后将此函数迁移到无服务器 Lambda? lambda 代码是在 nodejs 的无服务器框架中编写的。它不是普通的 aws lambda 我能理解你的沮丧,因为我最近经历了一件非常相似的事情。我将分享我学到和建立的东西。希望它能让你继续前进。 【参考方案1】:

您需要以下配置,以便 CloudFormation 创建资源。 (注意括号中的变量)

resources:
  Resources:  
    VPCEndpointForSES:
      Type: AWS::EC2::VPCEndpoint
      Properties:
        PrivateDnsEnabled: True
        SecurityGroupIds:
          - <ID of the VPC Security Group>
        ServiceName: 'com.amazonaws.<AWS Region String>.email-smtp'
        SubnetIds:
          - <Subnet of your VPC>
          - <Subnet of your VPC>
          - <Subnet of your VPC>
        VpcEndpointType: Interface
        VpcId: <ID of your VPC>

【讨论】:

【参考方案2】:

您是否查看过适用于 VPC 终端节点的 AWS PrivateLink?

您无需设置 Internet 网关、NAT 设备、*** 连接或 AWS Direct Connect 连接。您的 VPC 可以使用 AWS PrivateLink 与 Amazon 网络中的 AWS SES 进行通信。

请注意,VPC 终端节点当前不支持跨区域请求 - 确保您在计划向 Amazon SES 发出 API 调用的同一区域中创建终端节点。

您需要创建一个安全组和一个 VPC 接口点。有一步一步的例子here

其他资源:AWS PrivateLinkInterface Endpoints

【讨论】:

【参考方案3】:

您必须使用 AWS SES SMTP 终端节点,因为 AWS 不支持 AWS SES API 的 VPC 私有终端节点。

使用私有 VPC 终端节点配置 AWS SES SMTP 的指南: https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-set-up-vpc-endpoints.html

与 AWS PrivateLink 集成的可用 AWS 服务列表(或可以创建私有 VPC 端点): https://docs.aws.amazon.com/vpc/latest/privatelink/integrated-services-vpce-list.html

【讨论】:

以上是关于如何在无服务器中使用带有 ses 的 vpc 端点的主要内容,如果未能解决你的问题,请参考以下文章

如何从私有 AWS ALB 公开 API 端点

如何让 VPC 端点在 Docker 容器中工作?

aws vpc 端点 - 它是如何工作的?

我可以在 VPC 中将 SNS 订阅与内部 ALB 端点一起使用吗?

如何从 AWS 胶水访问 VPC 中的 aws 资源?

访问受限于 VPC 端点的 S3 网站从 VPC 内部获得 403