複数の EC2 インスタンスに同一のセキュリティグループを一括で追加してみた
はじめに
やかめです。
今回は複数の EC2 インスタンスに同一のセキュリティグループを一括で追加してみました。
前提
EC2 のマネジメントコンソールでは、複数の EC2 インスタンスを選択して同一のセキュリティグループを一括で追加する UI は提供されていません。
また、 AWS CLI の modify-instance-attribute コマンドの --groups オプションの振る舞いは置換となります。そのため、--groups に指定したセキュリティグループ以外はすべてデタッチされます。
===== 抜粋 =====
--groups(リスト)
インスタンスのセキュリティグループを、指定したセキュリティグループに置き換えます。VPC のデフォルトのセキュリティグループであっても、少なくとも 1 つのセキュリティグループの ID を指定する必要があります。
===== 抜粋 =====
どうするの
既存のセキュリティグループを保持したまま新しいセキュリティグループを追加するために、現在アタッチされているセキュリティグループを取得します。
その上で、新しいセキュリティグループを加えて一緒に置換することで、結果として「追加しているような」振る舞いになります。
やってみた
検証環境
4 台の EC2 インスタンスを用意しました。それぞれ別のセキュリティグループがアタッチされています。
a,b,c には Environment=test タグを付けていますが、d にはタグを付けていません。
| Name | Instance ID | 既存SG | タグ |
|---|---|---|---|
| test-web-a | i-04638XXXXXXXXXXX | test-sg-a | Environment=test |
| test-web-b | i-0cf8cXXXXXXXXXXX | test-sg-b | Environment=test |
| test-web-c | i-01334XXXXXXXXXXX | test-sg-c | Environment=test |
| test-web-d | i-0a76aXXXXXXXXXXX | test-sg-d | なし |
また、追加用のセキュリティグループとして test-sg-new-1 と test-sg-new-2 を用意しました。
インスタンス ID を直接指定して追加
インスタンス ID を直接指定し、指定した EC2 インスタンスにセキュリティグループを追加してみます。
今回は test-web-b, test-web-c, test-web-d を指定しています。
# 追加したいセキュリティグループ ID
NEW_SG_ID="<security-group-id-to-add>"
# 対象のインスタンス ID 一覧
INSTANCE_IDS="i-0cf8cXXXXXXXXXXX i-01334XXXXXXXXXXX i-0a76aXXXXXXXXXXX"
for INSTANCE_ID in $INSTANCE_IDS; do
CURRENT_SG_IDS=$(aws ec2 describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].SecurityGroups[].GroupId' \
--output text)
aws ec2 modify-instance-attribute \
--instance-id "$INSTANCE_ID" \
--groups $CURRENT_SG_IDS "$NEW_SG_ID"
done
NEW_SG_ID:追加したいセキュリティグループの IDINSTANCE_IDS:セキュリティグループを追加したい EC2 インスタンス ID の一覧describe-instances:EC2 インスタンスに現在アタッチされているセキュリティグループ ID を取得modify-instance-attribute:EC2 インスタンスの属性(セキュリティグループ)を変更するコマンド--groups:指定したセキュリティグループで置換するオプション
結果

指定した EC2 インスタンスに test-sg-new-1 が追加されました。
タグで絞り込んで追加
Environment=test タグが付いている EC2 インスタンスに対して、セキュリティグループを追加してみます。
今回は test-web-a、test-web-b、test-web-c の 3 台が対象となります。
# 追加したいセキュリティグループ ID
NEW_SG_ID="<security-group-id-to-add>"
# Environment=test タグが付いている EC2 インスタンスを取得
INSTANCES=$(aws ec2 describe-instances \
--filters "Name=tag:Environment,Values=test" \
--query 'Reservations[].Instances[].InstanceId' \
--output text)
for INSTANCE_ID in $INSTANCES; do
CURRENT_SG_IDS=$(aws ec2 describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].SecurityGroups[].GroupId' \
--output text)
aws ec2 modify-instance-attribute \
--instance-id "$INSTANCE_ID" \
--groups $CURRENT_SG_IDS "$NEW_SG_ID"
done
結果

Environment=test タグの EC2 インスタンスに test-sg-new-2 が追加されました。
おわりに
今回は AWS CLI を用いて、複数の EC2 インスタンスに一括でセキュリティグループを追加してみました。
今回紹介したコマンドは簡易的なものとなっているため、実際に使用する場合にはより堅牢なスクリプトに改良することをおすすめします。
また、--groups オプションは置換する振る舞いのため、既存のセキュリティグループが意図せず削除される可能性があります。どうしても本番環境で実行する場合は、事前にバックアップを取るか、十分に検証してから実行してください。
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました








