AWS Organizations(旧組織マスターアカウント)から GuardDuty の委任管理アカウントを指定する

2021年4月29日

概要

やりたいこと

マネジメントアカウント(旧名組織マスターアカウント)以外でメンバーアカウントの GuardDuty を管理したい。

AWS 委任管理者

マネジメントアカウントからメンバーアカウントに対して、一部の AWS サービスの管理権限を委任できる機能。

利用できるサービスには以下がある。

  • GuardDuty
  • CloudFormation StackSets
  • Security Hub etc…

委任管理者は以下ができるようになる。

  • メンバーアカウントのサービス有効化・無効化
  • アラートステータスの管理

AWS Organizations から GuardDuty 委任管理者を指定

マネジメントアカウントの AWS Organizations から、GuardDuty の委任管理アカウントを設定する。

委任管理アカウントとして指定されたアカウントは、 GuardDuty に対してのみ、マネジメントアカウント配下の AWS アカウント全てに以下の管理権限を持つようになる。

  1. GuardDuty の有効化・無効化
  2. GuardDuty アラートのステータス変更

委任管理アカウント、メンバーアカウント、マネジメントアカウントの GuardDuty に対する権限は以下となる。

  • 委任管理アカウントは可能
  • メンバーアカウントは不可能
  • マネジメントアカウントは不可能

詳細な関係性については以下を参照。

委任管理者を指定する理由

マネジメントアカウントから全ての設定をしたほうが楽じゃん、となるが委任管理者を指定する理由は権限を最小化させるため。

AWSは「最小権限の原則」を推奨しており、この委任管理者から各 AWS サービスを管理したほうがいい。

例えば、 AWS Landing Zone ではセキュリティ専用のアカウントを作成し、GuardDuty 管理アカウントを指定(委任管理者)している。

ただし、委任管理者は組織全体への ConfigRules の適用はできるが、組織単位 (OU) ごとの適用は行えない。

CLI とコンソールから設定

メンバーアカウントを委任管理者に指定

マスターアカウントの認証情報を指定して、委任管理者の指定を行う。
この委任管理者はリージョンごとに指定となる。

enable-organization-admin-account コマンドで使う。

aws guardduty enable-organization-admin-account \
--profile organizations \
--admin-account-id 11111111111 \
--region "ap-northeast-1"

list-organization-admin-accounts コマンドで委任管理者の確認ができる。

aws guardduty list-organization-admin-accounts \
--profile organizations
{
    "AdminAccounts": [
        {
            "AdminAccountId": "11111111111",
            "AdminStatus": "ENABLED"
        }
    ]
}

マスターアカウントのコンソールから確認すると、以下のよう委任管理者を指定できている。

委任管理者からGuardDuty を有効化

コンソールから組織全体に

委任管理者に指定したアカウントのコンソールにログイン。

  • GuardDuty コンソール → アカウント
  • 以下の画面の「有効化」を押すと、Organizations 配下のすべてのアカウントで GuardDuty が有効化される。

コンソールからアカウントを選択して

もちろんアカウントを選択しての管理も可能。

  • アカウントを選択し「メンバーを追加」
  • メンバーとなれば GuardDuty の有効・無効を管理できる

CLI からアカウントを選択して

以下に書いてあるが、有効なディテクター ID、アカウント ID、E メールが必要なため、手間がかかる。。

全リージョンで

上記の方法だと単一リージョンしか有効化できていない。

全リージョンごとに上記の設定を繰り返していく。

  • マスターアカウントで委任管理者アカウントを指定
  • 委任管理者アカウントの GuarDuty コンソールから有効化

エラー

An error occurred (BadRequestException) when calling the EnableOrganizationAdminAccount operation: The request failed because another account is already enabled as GuardDuty delegated administrator for the organization.

別のアカウントが組織のGuardDuty委任管理者として既に有効になっているため、要求は失敗しました。

disable-organization-admin-account コマンドで管理委任者を削除し、その後別アカウントを enable-organization-admin-account で委任管理者に指定しようとしたらエラーが発生。

list-organization-admin-accounts コマンドで確認すると委任管理者は削除されていた。

{
    "AdminAccounts": []
}

enable-organization-admin-account で再度同じアカウントを委任管理者に指定すると、エラーが起きずに指定できた。

その後、マスターアカウントの GuardDuty コンソールから委任管理者の削除を行い、再度、別アカウントを enable-organization-admin-account で委任管理者に指定したら問題なく実行できた。

参考

AWS Organizations による GuardDuty アカウントの管理

【Organizations】組織内すべてのアカウント・すべてのリージョンへの GuardDuty設定を簡単に行う