Index
我们在使用AWS Lambda来进行kintone和一些第三方产品进行整合开发的时候(比如高德地图,钉钉,微信等等),往往会遇到第三方应用需要提供服务端的出口IP白名单的问题。
如果将Lambda使用的全局IP地址放在这个白名单上貌似就没有问题了,但Lambda使用的IP地址范围非常广,而且范围每天都在变化,不易于管理。
其实我们可以利用AWS的VPC设置来解决这个问题。
原理图
在VPC上创建NAT网关,并为该NAT网关分配EIP。
Lambda允许您通过私有网段,并通过位于公共网段的NAT网关访问钉钉等应用。
如果将NAT网关EIP放在白名单中,则可以安全地从Lambda连接到钉钉等应用。
设置方案
VPC |
---|
10.0.0.0/16 |
网段 | 子网 |
---|---|
公有子网 | 10.0.10.0/24 |
私有子网 | 10.0.1.0/24 10.0.2.0/24 |
接下来的内容,我们将按照以上的设置方案来进行vpc的设置。
AWS的VPC设置
创建VPC
首先,创建一个专用的Lambda VPC。从左侧菜单中选择VPC,然后从“Create VPC”创建。
在这种情况下,使用名称为“lambda_vpc”的“10.0.0.0/16”创建CIDR。
创建Internet网关
这也很容易,从左侧菜单“Internet 网关”创建。名称标签使用“lambda_igw”。
我把它附加到我之前制作的“lambda_vpc”中。
创建子网
创建连接到Internet的公有子网和不直接连接到Internet的私有子网。
从左侧菜单中的片段中选择“创建子网”,如下所示。
[公有子网]
[私有子网]
再创建两个私有子网,标签为lambda_prv1和lambda_prv2,cidr块分别为10.0.1.0/24和10.0.2.0/24
创建公有子网的路由表
从左侧菜单中选择“路由表”,创建路由表“lambda_pub_rt”
选择刚创建的路由表,单击“路由”的“编辑路由”,指定“0.0.0.0/0”作为传输目的地,如下所示,并创建Internet网关(指定之前创建的lambda_igw)并保存。
关联之前创建的公有子网(lambda_pub)
创建NAT网关
接下来,我们将创建NAT网关,以便连接固定IP地址和kintone。
从菜单中选择“NAT 网关”,然后单击“创建NAT网关”。
子网选择之前创建的公有子网(lambda_pub)。点击“新建EIP”,生成弹性IP
到此,您已经创建了NAT网关。
创建私有子网的路由表
接下来需要把这个NAT网关作为私有子网的默认网关,并且关联我们之前创建的两个私有子网。
单击路由表中的“创建路由表”,输入名称标签“lambda_prv_rt”,然后为VPC选择“Lambda_vpc”。
选择创建的路由表,单击“路由”选项卡上的“编辑路由”,然后选择“0.0.0.0/0”作为目标,并在目标上添加刚才创建的NAT网关。
最后,转到“子网关联”选项卡,并将私有子网与刚创建的路由表关联起来。
生成弹性IP
我们可以在弹性IP上看到我们生成的一个对外的IP。
好了,我们的VPC设置结束了。
在钉钉上设置IP出口限制
在钉钉的小程序的应用的后台,设置服务器公网出口IP名单
Lambda设置
最后,为Lambda设置。
此外,需要附加策略“AWSLambdaVPCAccessExecutionRole”分配给运行Lambda函数的IAM角色。
或者,手动添加以下内容。
ec2:CreateNetworkInterface
ec2:DescribeNetworkInterfaces
ec2:DeleteNetworkInterface
这里我们将跳过基本的Lambda函数设置,并且只解释VPC设置部分。
我们事先已经创建好了之前说明的“lambda_vpc”的VPC。
执行下您创建的Lambda函数,看看Lambda是否成功访问了钉钉或者其他应用呢?
注意事项
本示例代码不保证其运行。
我们不为本示例代码提供技术支持。