コマンドライン引数の取得

pythonプログラム実行時に引数を渡すことができます。確認のため以下の内容でget_argument.pyを作成します。

import sys

args = sys.argv
print(args[0])
print(args[1])
print(args[2])
print(args[3])

実行時に3つの引数を入力します。

$ python get_argument.py 22 0.0.0.0/0 description
get_argument.py
22
0.0.0.0/0
description

args[0]には実行したファイル名が入るので、入力した引数はargs[1]~args[3]で取得することができそうです。

インバウンドルール編集を行うファイルの作成

では、インバウンドルールの追加・削除を行うedit_security_group.pyファイルを作成します。実行時に、ポート、CidrIp、詳細の3つを引数に受け取り処理します。

受け取ったポート番号とCidrIpを用いて、同一のインバウンドルールがないか確認し存在したら削除、存在しない場合は追加を行います。

import sys
from boto3.session import Session

security_id = 'sg-*****************'
profile_name = "****"

def main(args):
    session = Session(profile_name=profile_name)
    client = session.client("ec2")

    try:
        port = int(args[1])
        cidr_ip = args[2]
        description = args[3]

        #sgの詳細情報を取得
        status = client.describe_security_groups(GroupIds=[security_id,])

        #同一インバウンドルールの確認
        flg = [1 for sg in status['SecurityGroups'][0]['IpPermissions'] if sg['FromPort'] == port and sg['IpRanges'][0]['CidrIp'] == cidr_ip]

        #同一インバウンドルールがある場合は削除、ない場合は追加処理を行う
        if flg:
            print("deleted inbound rules")
            delete_ingress = client.revoke_security_group_ingress(
                CidrIp=cidr_ip,
                FromPort=port,
                GroupId=security_id,
                IpProtocol='TCP',
                ToPort=port,
                )
        else:
            print("added inbound rules")
            authorize_ssh = client.authorize_security_group_ingress(
                GroupId=security_id,
                IpPermissions=[
                    {
                        'FromPort': port,
                        'IpProtocol': 'tcp',
                        'IpRanges': [
                            {
                                'CidrIp': cidr_ip,
                                'Description': description,
                            },
                        ],
                        'ToPort': port,
                    },
                ],
            )
    except Exception as e:
        print("error")
        print(e)
        raise e

if __name__ == '__main__':
    args = sys.argv
    main(args)

追加と削除の確認

スクリプトが作成できましたので実装します。

実行前はインバウンドルールは設定されておりません。 

では追加します。

$ python edit_security_group.py 22 0.0.0.0/0 set_from_boto3
added inbound rules
$ python edit_security_group.py 3389 0.0.0.0/0 set_from_boto3
added inbound rules

#python

boto3を使用してセキュリティグループのインバウンドルールを編集するpythonファイルを作ってみた
4.30 GEEK