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例です。

現在のマイ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例です。

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

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

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

Lambda例です。

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へのアクセス権限が足りてません。

参考サイト

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EC2.html

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA