サーバレスでアプリケーションを実行できるAWS Lambdaですが、先日の機能アップによりVPC内での実行が可能になりました。
AWS Blog:LambdaファンクションからのVPC内リソースへのアクセス
このアップデートまではLambdaはインターネット上で実行され、LambdaファンクションからVPC内のDBなどのバックエンドへアクセスする場合に使用されるIPアドレスは不定でした。
そのため、SecurityGroupやNACLで縛れず、すべてのIPからのアクセスを許可する必要があり、セキュリティ上の懸案がありました。
今回可能になったVPC内実行を応用することで、LambdaからアクセスされるIPアドレスを固定することができそうです。
Lambda実行時のGlobal IPを固定する
VPC内で起動されたLambdaファンクションがインターネットへの通信を必要とする場合、NATインスタンスまたはNATゲートウェイが必要になります。
つまり、VPCからインターネットへ出て行く通信のSourceIPはNATインスタンス/NATゲートウェイのEIPに必ず変換されます。
Lambdaファンクションを実行するためのVPCを別途作成し、NATゲートウェイのEIPを付与します。
アクセスされるバックエンドではSecurityGroupにてEIPのみを許可することでセキュリティの確保が可能です。
LambdaをVPC内で実行する
同じVPC内でLambdaファンクションを実行する場合も、同じ考え方ができます。
VPC内に専用のSubnetを割り当てることで、Lambdaファンクションのみにアクセス許可を与えるSecurityGroup/NACLが作成できます。
また、別の理由になりますが、Lambdaファンクションが同時に多数実行されるようなアプリケーションの場合は、IPアドレスが枯渇する恐れがあります。
その対策も含め上記のように専用のSubnetを割り当てるか、新規VPC+Peeringがよいのではと思います。
さらに、どうしても1つのIPに絞りたい場合には以下のようにVPC内NATをしてアクセスさせることもできるかと思います。(ただし、これがどのようなユースケースがあるかは不明です・・・)
おわりに
LambdaファンクションがVPC内実行できるようになったことで、他にも色々と可能性が広がりそうです。
一方で、VPCというレイヤに縛られずインターネット上で実行することこそが本当のクラウドネイティブな気もします。(もちろん、セキュリティの担保は必須ですが)