1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

lambdaでセキュリティグループのインバウンドルールを変更する

Posted at

AWSに構築したシステムのセキュリティ設計として、セキュリティグループでインバウンド制限をすることは珍しくないと思います。システムの利用者が増えた・減った場合、セキュリティグループを更新する必要があり、通常はAWSコンソールで変更すれば良いですが、諸事情により非エンジニアがAWSコンソールを使わずに変更できるようにする必要があったので、その方法をメモしておきます。

はじめに

設定する人がエンジニアではない想定だったので、WEBでセキュリティグループのインバウンドを追加・削除できるようにしました。全体のアーキテクチャは下記のような感じなのですが、この記事ではlambdaにフォーカスしています。

provDiagram.jpg

lambdaでセキュリティグループの追加削除する

lambdaでboto3を使ってセキュリティグループへのIPアドレス追加、削除をします。
今回はpython 3.8を使っています。
セキュリティグループにアクセスできるように、lambdaのロールを追加しておく必要があります。AmazonEC2FullAccessがあればOKです。

セキュリティグループの設定を取得する

まずは、対象のセキュリティグループの設定を取得します。
boto3やjsonなど必要なモジュールはimportしている前提です。
セキュリティグループは、セキュリティグループIDで指定します。

sg_prov.py
    ec2 = boto3.client('ec2')
    sec_g = 'sg-xxxxxxxxxxxxxxxxx'
        
    res = ec2.describe_security_groups(
        GroupIds=[sec_g]
        )

戻り値で、登録しようとしているIPアドレスが含まれているか(すでに登録ずみか)のチェックができます。

sg_prov.py
    json_res = json.dumps(res)
    if add_ip in json_res :
        #登録済みの場合の処理

セキュリティグループにIPアドレスを追加する

追加する場合は、セキュリティグループ、ポート、IPアドレス、Descriptionを指定して登録します。

sg_prov.py
        add_res = ec2.authorize_security_group_ingress(
            GroupId=sec_g,
            DryRun=False,
            IpPermissions=[
                {
                    'IpProtocol': 'tcp',
                    'FromPort': 443,
                    'ToPort': 443,
                    'IpRanges': [
                        {
                            'CidrIp': add_ip,
                            'Description': desc
                        },
                    ]
                }
            ]
        )

セキュリティグループからIPアドレスを削除する

削除する場合は、セキュリティグループ、削除対象のポート、IPアドレスを指定します。

sg_prov.py
        del_res = ec2.revoke_security_group_ingress(
            GroupId=sec_g,
            IpPermissions=[
                {
                    'IpProtocol': 'tcp',
                    'FromPort': 443,
                    'ToPort': 443,
                    'IpRanges': [
                        {
                            'CidrIp': add_ip,
                        },
                    ]
                }
            ]
        )

まとめ

AWSコンソールで、追加・削除ができていることが確認できれば完了です。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?