Amazon GuardDutyのメンバーアカウントの関連付けをAWS CLIで解除してみる

2023.04.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Organizations で Amazon GuardDuty の統合されたサービスを有効化している環境において、メンバーアカウントの自動有効化をした後に、すぐに関連付けを解除したい状況がありました(メンバーアカウントでアーカイブや抑制ルールを作成したい)。その際に、AWS CLI で全リージョンのメンバーアカウントとの関連付けを解除したく試してみました。


本ブログを書いた後に 3 月に同じ内容のブログが公開されていることに気づきました。。AWS Security Hub の関連付けの解除まであります。こちらも合わせて確認していただくことで理解が深まると思います。メンバーアカウントの関連付け状況を確認するコマンドまで掲載していることが本ブログの + α になります。

試してみた

メンバーアカウントとの関連付けを解除するコマンドはdisassociate-membersコマンドです。account-idsオプションに関連付けを解除したいアカウント ID を指定します。


全リージョンで特定のメンバーアカウントの関連付けを解除するコマンド例は下記です。 account-idsを 1 個のみ指定する例ですが、"111122223333" "444455556666" "777788889999"のように複数指定することもできます。

aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
  echo "### Disassociate members in ${region}"
  detector=$(aws guardduty list-detectors --region ${region} --query "DetectorIds[0]" --output text)
  aws guardduty disassociate-members \
    --region ${region} \
    --detector-id ${detector} \
    --account-ids "111122223333"
done

実行結果例です(長いので折りたたんでいます)。

実行結果
$ aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
> | while read region; do
>   echo "### Disassociate members in ${region}"
>   detector=$(aws guardduty list-detectors --region ${region} --query "DetectorIds[0]" --output text)
>   aws guardduty disassociate-members \
>     --region ${region} \
>     --detector-id ${detector} \
>     --account-ids "111122223333"
> done
### Disassociate members in ap-south-1
{
    "UnprocessedAccounts": []
}
### Disassociate members in eu-north-1
{
    "UnprocessedAccounts": []
}
### Disassociate members in eu-west-3
{
    "UnprocessedAccounts": []
}
### Disassociate members in eu-west-2
{
    "UnprocessedAccounts": []
}
### Disassociate members in eu-west-1
{
    "UnprocessedAccounts": []
}
### Disassociate members in ap-northeast-3
{
    "UnprocessedAccounts": []
}
### Disassociate members in ap-northeast-2
{
    "UnprocessedAccounts": []
}
### Disassociate members in ap-northeast-1
{
    "UnprocessedAccounts": []
}
### Disassociate members in ca-central-1
{
    "UnprocessedAccounts": []
}
### Disassociate members in sa-east-1
{
    "UnprocessedAccounts": []
}
### Disassociate members in ap-southeast-1
{
    "UnprocessedAccounts": []
}
### Disassociate members in ap-southeast-2
{
    "UnprocessedAccounts": []
}
### Disassociate members in eu-central-1
{
    "UnprocessedAccounts": []
}
### Disassociate members in us-east-1
{
    "UnprocessedAccounts": []
}
### Disassociate members in us-east-2
{
    "UnprocessedAccounts": []
}
### Disassociate members in us-west-1
{
    "UnprocessedAccounts": []
}
### Disassociate members in us-west-2
{
    "UnprocessedAccounts": []
}


次に、メンバーアカウントの関連付けを解除されたのかステータスを確認してみます。

メンバーアカウントとの関連付け状況を確認するコマンドはget-membersです。account-idsオプションに関連付けを確認したいアカウント ID を指定します。


全リージョンで特定のメンバーアカウントの関連付けを確認するコマンド例は下記です。 disassociate-members同様にaccount-idsオプションで複数のアカウント ID を指定することもできます。

aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
  echo "### Get members relationship status in ${region}"
  detector=$(aws guardduty list-detectors --region ${region} --query "DetectorIds[0]" --output text)
  aws guardduty get-members \
    --region ${region} \
    --detector-id ${detector} \
    --account-ids "111122223333" \
    --query "Members[*].[{AccountId:AccountId},{RelationshipStatus:RelationshipStatus}]|[]"
done

実行結果例です(長いので折りたたんでいます)。指定したメンバーアカウントの Status がRemovedになっていることを確認できます。

実行結果
$ aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
> | while read region; do
>   echo "### Get members relationship status in ${region}"
>   detector=$(aws guardduty list-detectors --region ${region} --query "DetectorIds[0]" --output text)
>   aws guardduty get-members \
>     --region ${region} \
>     --detector-id ${detector} \
>     --account-ids "111122223333" \
>     --query "Members[*].[{AccountId:AccountId},{RelationshipStatus:RelationshipStatus}]|[]"
> done
### Get members relationship status in ap-south-1
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in eu-north-1
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in eu-west-3
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in eu-west-2
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in eu-west-1
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in ap-northeast-3
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in ap-northeast-2
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in ap-northeast-1
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in ca-central-1
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in sa-east-1
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in ap-southeast-1
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in ap-southeast-2
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in eu-central-1
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in us-east-1
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in us-east-2
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in us-west-1
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]
### Get members relationship status in us-west-2
[
    {
        "AccountId": "111122223333"
    },
    {
        "RelationshipStatus": "Removed"
    }
]


マネジメントコンソールにおいてもメンバーアカウントの関連付けを確認すると、ステータスがメンバーではありませんとなっていることが確認できます。

さいごに

メンバーアカウントの関連付けを解除する作業を AWS CLI で試してみました。

このブログがどなたかのご参考になれば幸いです。