Help us understand the problem. What is going on with this article?

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

sk565
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away