IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Inst. Tech View

CTC 教育サービス

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート 

第52回 AWS CLIでセキュリティグループ内のルール数を調べる方法 2015年9月

 今回のInst. Tech Viewは、AWS CLIでセキュリティグループのルール数を調べる方法についての話題です。

 EC2インスタンスを保護する方法として大前提として設定すべきものが「セキュリティグループ」です。「セキュリティグループ」はEC2インスタンスに割り当てるステートフル型のファイアウォール機能で、デフォルトの状態はすべてのパケットの通過を拒否します。パケットの通過を許可するためにはセキュリティグループにルール(パケットの通過を許可するための設定)を登録することで行えます。登録したルールにマッチするパケットのみ通過が許可されることになるため、特定のパケットの通過のみ許可するホワイトリスト型のファイアウォールを容易に作ることができ、EC2インスタンスを簡単に保護することができます。

 ただ、セキュリティグループに登録するルール数を増やしすぎるとEC2インスタンスの通信のパフォーマンスが低くなってしまう恐れがあるため、AWSでは1つのEC2インスタンスにつき割り当てることができるルール数の上限を250に制限しています(2015/9現在)。

 また、上限に達しなくてもルール数を抑えて頂くことで、通信のパフォーマンスの向上に繋げることができます。本コラムではAWS CLIでセキュリティグループ内のルール数を確認する方法について紹介します。なお、個別のセキュリティグループのルール数の確認方法から俯瞰的な確認方法まで計3パターンを考えてみました。

 本コラム内に記載したコマンドは以下の環境で動作を確認しております。

  • Amazon Linux 2015.03
  • aws-cli 1.7.45
  • bash 4.1.2

 また、実行結果の出力はJSON形式を想定しています。
AWS CLIの使用方法の詳細は下記ドキュメントをご参照ください。

AWS Black Belt Techシリーズ AWS Command Line Interface
http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-aws-command-line-interface

1: 特定のセキュリティグループのInbound/Outboundのルール数の確認方法について
SecurityGroupIDを変数に格納
$ SGID=sg-12345678    
Inboundのルール数の確認
$  aws ec2 describe-security-groups --query 'length(SecurityGroups[0].IpPermissions)'  --filters "Name=group-id,Values=$SGID"
2
Outboundのルール数の確認
$  aws ec2 describe-security-groups --query 'length(SecurityGroups[0].IpPermissionsEgress)'  --filters "Name=group-id,Values=$SGID"
3

ただこの場合、ルール数のみ、かつ個別のセキュリティグループの情報しか分からず、セキュリティグループ名も分かりません。
そのため、見出し付きでInboundのルール数・Outboundのルール数・セキュリティグループ名を一気に表示する方法も考えてみました。

2: 特定のセキュリティグループのInbound/Outboundのルール数と、セキュリティグループ名の一括表示
SecurityGroupIDを変数に格納
$ SGID=sg-12345678
Inbound/Outboundのルール数と、セキュリティグループ名の一括表示
$  aws ec2 describe-security-groups --query '{"Security Group Name" : SecurityGroups[0].GroupName, "Number of Inbound  Rules" : length(SecurityGroups[0].IpPermissions), "Number of Outbound Rules" : length(SecurityGroups[0].IpPermissionsEgress)}'  --filters "Name=group-id,Values=$SGID"
{
    "Number of Outbound Rules": 3,
    "Number of Inbound  Rules": 2,
    "Security Group Name": "qlstack2-xxxxxxxx"
}

これで特定のセキュリティグループについてのルール数を全体的に分かりやすく確認することができます。
しかしながら、この場合、一回一回セキュリティグループIDを調べる手間が発生します。
そこで、自分のAWSアカウント内の全セキュリティグループの情報を一括表示するコマンドも考えてみました。

3: すべてのセキュリティグループについて、Inbound/Outboundのルール数と、セキュリティグループ名の一括表示
すべてのSecurityGroupIDを変数に格納
$ SGIDS=`aws ec2 describe-security-groups --query 'SecurityGroups[*].GroupId'| tr -d "\[\]\,\""`  
$ for SGID in `echo $SGIDS` 
> do aws ec2 describe-security-groups --query '{"Security Group Name" : SecurityGroups[0].GroupName, "Number of Inbound  Rules" : length(SecurityGroups[0].IpPermissions), "Number of Outbound Rules" : length(SecurityGroups[0].IpPermissionsEgress)}'  --filters "Name=group-id,Values=$SGID"
> done
{
    "Number of Outbound Rules": 1,
    "Number of Inbound  Rules": 1,
    "Security Group Name": "test"
}
{
    "Number of Outbound Rules": 1,
    "Number of Inbound  Rules": 1,
    "Security Group Name": "default"
}
{
    "Number of Outbound Rules": 3,
    "Number of Inbound  Rules": 2,
    "Security Group Name": "qlstack2-xxxxxxxx"
}

 上記のコマンドは固定値を登録する必要がないため、どのAWSアカウントで実行しても 自身のAWSアカウント上に登録されているすべてのセキュリティグループのルール数を確認することができます。

 以上がセキュリティグループ内のルール数を確認する方法です。
上記のコマンドを利用すると、例えば特定のルール数を超えた場合、AWSのSNSのAPIを叩いてご自身宛にメールを送信するスクリプトを作成して LinuxのcronやWindowsのジョブスケジューラで定期的に自動実行させればルール数が増えすぎたセキュリティグループを簡単に検知することができます。 もし活用できる機会がありましたらぜひご利用ください。

なお、CTCテクノロジーではAWSの初心者の方向けに以下のトレーニングを提供しております。
AWSの基礎固めや知識を向上させたい方のご受講を心よりお待ちしております。

■■■ コースの詳細情報 ■■■  ※価格はメルマガ配信時点の価格です。

AW01:Amazon Web Services 実践入門 1 ~一日で学ぶ、AWSクラウド活用~
期間:1日間
価格:\60,000(税抜)

AW02:Amazon Web Services 実践入門 2 ~AWSクラウドのサービス実践編~
期間:1日間
価格:\60,000(税抜)

CTCテクノロジーのトレーニングを今後ともよろしくお願い致します。

 


 

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート