事象
不要になったセキュリティグループ(SecurityGroup)をコマンドから削除するも
$ aws ec2 delete-security-group --group-id sg-xx
以下のエラーで失敗する。
An error occurred (DependencyViolation) when calling the DeleteSecurityGroup operation: resource sg-xx has a dependent object
環境情報
$ aws --version aws-cli/2.11.25 …
原因/解決策
以下のどれかが原因と考えられる。
- ネットワークインターフェースに紐づけられている
- 別のセキュリティグループから参照されている
- デフォルト(default)のセキュリティグループである
よって該当のネットワークインターフェースからの紐付け解消 または 該当のセキュリティグループからの参照設定を解消すると、セキュリティグループの削除が正常に実施される。
$ aws ec2 delete-security-group --group-id sg-xx $
以下、補足です。
補足
コンソールで削除を実施すると以下のエラーメッセージが表示されますが、まさにここに記載の内容が原因です。
一部のセキュリティグループは削除できません/以下のセキュリティグループは削除できません。
デフォルトのセキュリティグループであるか、他のセキュリティグループによって参照されているか、インスタンスまたはネットワークインターフェイスに関連付けられています。
別のセキュリティグループから参照されている場合はaws ec2 describe-security-groups
によって関係性を調査することで対応が可能です。
{ "SecurityGroups": [ { ... "UserIdGroupPairs": [ { ... "GroupId": "sg-xx", } ... "GroupId": "sg-yy", ...
一方でネットワークインターフェースと紐づけられている場合ですが、こちらも
$ aws ec2 describe-network-interfaces --filters Name=group-id,Values=sg-xx
で出力される"NetworkInterfaceId"を控えた上で不要であれば設定を削除します。
ちなみに該当のネットワークインターフェースに紐づくマシンの調査法ですが、例えばEC2インスタンスであれば(LBの場合もあり)以下のようにコマンドを打つことで該当のインスタンス情報が調査できます。
$ aws ec2 describe-instances --filters "Name=network-interface.network-interface-id,Values=eni-xx"
以上。