AWSに構築したシステムのセキュリティ設計として、セキュリティグループでインバウンド制限をすることは珍しくないと思います。システムの利用者が増えた・減った場合、セキュリティグループを更新する必要があり、通常はAWSコンソールで変更すれば良いですが、諸事情により非エンジニアがAWSコンソールを使わずに変更できるようにする必要があったので、その方法をメモしておきます。
はじめに
設定する人がエンジニアではない想定だったので、WEBでセキュリティグループのインバウンドを追加・削除できるようにしました。全体のアーキテクチャは下記のような感じなのですが、この記事ではlambdaにフォーカスしています。
lambdaでセキュリティグループの追加削除する
lambdaでboto3を使ってセキュリティグループへのIPアドレス追加、削除をします。
今回はpython 3.8を使っています。
セキュリティグループにアクセスできるように、lambdaのロールを追加しておく必要があります。AmazonEC2FullAccessがあればOKです。
セキュリティグループの設定を取得する
まずは、対象のセキュリティグループの設定を取得します。
boto3やjsonなど必要なモジュールはimportしている前提です。
セキュリティグループは、セキュリティグループIDで指定します。
ec2 = boto3.client('ec2')
sec_g = 'sg-xxxxxxxxxxxxxxxxx'
res = ec2.describe_security_groups(
GroupIds=[sec_g]
)
戻り値で、登録しようとしているIPアドレスが含まれているか(すでに登録ずみか)のチェックができます。
json_res = json.dumps(res)
if add_ip in json_res :
#登録済みの場合の処理
セキュリティグループにIPアドレスを追加する
追加する場合は、セキュリティグループ、ポート、IPアドレス、Descriptionを指定して登録します。
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アドレスを指定します。
del_res = ec2.revoke_security_group_ingress(
GroupId=sec_g,
IpPermissions=[
{
'IpProtocol': 'tcp',
'FromPort': 443,
'ToPort': 443,
'IpRanges': [
{
'CidrIp': add_ip,
},
]
}
]
)
まとめ
AWSコンソールで、追加・削除ができていることが確認できれば完了です。