AWS API Gateway + Lambda(node.js)でセキュリティグループのマイIPを更新する方法

AWS Lambda(node.js)でセキュリティグループのマイIPを更新する方法

リモートワークが増えてきたので、自宅のPC環境からAWSのサービスに接続したいという場合、インバウンドルールにマイIPを設定すると思います。

自宅のルータを再起動したりするとグローバルIPが変わってしまったりする場合があるので、毎回セキュリティグループのインバウンドのマイIPを設定しないといけません。これが面倒なのでAPIでマイIPを更新するAPI Gateway + Lambdaを作成してみました。

マイIPは、http://checkip.amazonaws.comにGETメソッドでアクセスすれば取得できます。が、こちらLambda上でsuperagentなどで叩くと、Lambdaが動作するEC2のアドレスを返します。(試しにEC2にログインしてcurl -X GET http://checkip.amazonaws.comするとわかります)

一旦はマネジメントコンソールからセキュリティグループを作成しているものとします。(セキュリティグループIDを把握している)

revokeSecurityGroupIngressメソッドでインバウンドルールを削除する

revokeSecurityGroupIngressメソッドで一旦セキュリティグループのインバウンドルールを削除します。

削除するLambda例です。

https://gist.github.com/takahashi-h5/0066853917665ba0a1b4943d3a50649a

現在のマイIPを取得する

Lambda(node.js)はEC2上で動作していますので、Lambda(node.js)で現在のマイIPを取得するのは無理です。(多分)

ということでAPI Gatewayからクエリパラメータで渡す仕様とします。

https://example.com/xxx/?deleteip=66.66.66.xx&currentip=66.66.66.yy ※こんなREST APIのイメージ

authorizeSecurityGroupIngressメソッドでインバウンドルールを作成する

authorizeSecurityGroupIngressメソッドで一旦セキュリティグループのインバウンドルールを作成します。

作成するLambda例です。

https://gist.github.com/takahashi-h5/b3fc0809cf8cc2cfb700c800ae58ab60

マイIPを更新するAPIを作成する

API Gatewayはクエリ文字列にcurrentipdeleteipを指定して、「Lambdaプロキシ統合の使用」にチェックを入れます。最後にLambdaを作成します。IPを間違えた場合などは考慮してません。

AWS API Gateway + Lambda(node.js)でセキュリティグループのマイIPを更新する方法

Lambda例です。

https://gist.github.com/takahashi-h5/f888f82b0869a13d117a7c8d7446eca5

curlコマンドです。

curl -X GET https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/v1/?deleteip=60.66.193.82\&currentip=60.66.193.10

You are not authorized to perform this operation.

Lambda実行時に「You are not authorized to perform this operation.」が出たら、EC2へのアクセス権限が足りてません。

参考サイト

Class: AWS.EC2 — AWS SDK for JavaScript

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました