LambdaからアクセスされるIPアドレスを固定する

More than 3 years have passed since last update.

サーバレスでアプリケーションを実行できるAWS Lambdaですが、先日の機能アップによりVPC内での実行が可能になりました。

AWS Blog:LambdaファンクションからのVPC内リソースへのアクセス

このアップデートまではLambdaはインターネット上で実行され、LambdaファンクションからVPC内のDBなどのバックエンドへアクセスする場合に使用されるIPアドレスは不定でした。

そのため、SecurityGroupやNACLで縛れず、すべてのIPからのアクセスを許可する必要があり、セキュリティ上の懸案がありました。

lambda_0.png

今回可能になったVPC内実行を応用することで、LambdaからアクセスされるIPアドレスを固定することができそうです。


Lambda実行時のGlobal IPを固定する

VPC内で起動されたLambdaファンクションがインターネットへの通信を必要とする場合、NATインスタンスまたはNATゲートウェイが必要になります。

つまり、VPCからインターネットへ出て行く通信のSourceIPはNATインスタンス/NATゲートウェイのEIPに必ず変換されます。

lambda_1.png

Lambdaファンクションを実行するためのVPCを別途作成し、NATゲートウェイのEIPを付与します。

アクセスされるバックエンドではSecurityGroupにてEIPのみを許可することでセキュリティの確保が可能です。


LambdaをVPC内で実行する

同じVPC内でLambdaファンクションを実行する場合も、同じ考え方ができます。

VPC内に専用のSubnetを割り当てることで、Lambdaファンクションのみにアクセス許可を与えるSecurityGroup/NACLが作成できます。

lambda_3.png

また、別の理由になりますが、Lambdaファンクションが同時に多数実行されるようなアプリケーションの場合は、IPアドレスが枯渇する恐れがあります。

その対策も含め上記のように専用のSubnetを割り当てるか、新規VPC+Peeringがよいのではと思います。

さらに、どうしても1つのIPに絞りたい場合には以下のようにVPC内NATをしてアクセスさせることもできるかと思います。(ただし、これがどのようなユースケースがあるかは不明です・・・)

lambda_2.png


おわりに

LambdaファンクションがVPC内実行できるようになったことで、他にも色々と可能性が広がりそうです。

一方で、VPCというレイヤに縛られずインターネット上で実行することこそが本当のクラウドネイティブな気もします。(もちろん、セキュリティの担保は必須ですが)