ELB にアタッチしているセキュリティグループのルール合計数を調べる方法を教えてください

2021.03.13

困っていた内容

ELB にアタッチしているセキュリティグループのルール合計数を調べる方法を教えてください。できれば一括で出したいです。

どう対応すればいいの?

ELB のコンソールからそれぞれのセキュリティグループを確認することはできますが、ELB にアタッチしているセキュリティグループ数が多い場合、確認に手間がかかります。

そのため、AWS CLI で確認するのがオススメです。

Classic Load Balancer と Application Load Balancer のコマンド例を記載します。

前提として jq コマンドのインストール、それぞれ ELB_NAMEELB_ARN の値を変更してください。その後、コマンドをコピー&ペーストすれば動きます。

Classic Load Balancer(CLB)の場合

ELB_NAME=<Classic Load Balancer名>

# 現在アタッチされているセキュリティグループの一覧を出す
aws elb describe-load-balancers \
    --load-balancer-name $ELB_NAME \
    | jq '.LoadBalancerDescriptions[].SecurityGroups'

# インバウンドルール数の合計を出す
SGList=$(aws elb describe-load-balancers \
    --load-balancer-name $ELB_NAME \
    | jq '.LoadBalancerDescriptions[].SecurityGroups')
for SG in $SGList; do \
    aws ec2 describe-security-groups \
    --group-id $SG \
    | jq '[.[] | .[].IpPermissions[].IpRanges | length] | add'; \
    done

Application Load Balancer(ALB)の場合

ELB_ARN=<Application Load Balancer の ARN>

# 現在アタッチされているセキュリティグループの一覧を出す
aws elbv2 describe-load-balancers \
  --load-balancer-arns $ELB_ARN | \
  jq '.LoadBalancers[].SecurityGroups'

# インバウンドルール数の合計を出す
SGList=$(aws elbv2 describe-load-balancers \
  --load-balancer-arns $ELB_ARN | \
  jq '.LoadBalancers[].SecurityGroups')
for SG in $SGList; do \
    aws ec2 describe-security-groups \
    --group-id $SG \
    | jq '[.[] | .[].IpPermissions[].IpRanges | length] | add'; \
    done

上限緩和済み環境での出力例

[
  "sg-aaa",
  "sg-bbb",
  "sg-ccc",
  "sg-ddd",
  "sg-eee",
  "sg-fff",
  "sg-ggg",
  "sg-hhh"
]
232

運用観点でのポイント

人が目視で確認すると、どんなに厳重にやってもミスすることはありえるので、対象数が増えれば増えるほどコマンドで確認した方が安全です。

ただし、コマンドに問題がある可能性もあるので確実に安全ではないです。

作業で絶対の安心はないので、チームで慎重に進めたり、ミスした時の手戻り手順などカバー力を上げていくことで健全に運用ができると思います。

ありがたいことに、私が所属しているアノテーションのオペレーションチームはこのような意識が浸透していて、作業時の不安要素は極力減らせています。

採用情報:テクニカルサポート | らしく働く、らしく生きる。| アノテーション株式会社

参考資料