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¤tip=66.66.66.yy ※こんなREST APIのイメージ
authorizeSecurityGroupIngressメソッドでインバウンドルールを作成する
authorizeSecurityGroupIngressメソッドで一旦セキュリティグループのインバウンドルールを作成します。
作成するLambda例です。
マイIPを更新するAPIを作成する
API Gatewayはクエリ文字列にcurrentip、deleteipを指定して、「Lambdaプロキシ統合の使用」にチェックを入れます。最後にLambdaを作成します。IPを間違えた場合などは考慮してません。
Lambda例です。
curlコマンドです。
curl -X GET https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/v1/?deleteip=60.66.193.82\¤tip=60.66.193.10
You are not authorized to perform this operation.
Lambda実行時に「You are not authorized to perform this operation.」が出たら、EC2へのアクセス権限が足りてません。
参考サイト
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント