AWS Security Hub の Organizations への移行と大阪リージョンの有効化

## はじめに
本記事では以下についてまとめます。

* 既存の AWS Security Hub のマルチアカウント環境を AWS Organizations に移行した際の手順や気付き
* AWS Organizations 統合機能を利用して大阪リージョンの Security Hub を有効化するながれ

AWS Security Hub は AWS 内外で発生するセキュリティアラートの一元的な表示および管理やチェックの自動化を行うためのサービスです。Security Hub はマルチアカウントを構成をサポートしていおり、メンバーアカウントのデータ (Findings) をマスターアカウントに集約して管理することができます。

昨年の 11 月に 組織内のアカウントを AWS Organizations と統合して管理できるようになりました。組織に新しいアカウントが追加されたときに自動的に Security Hub を有効化することができます。

https://aws.amazon.com/jp/about-aws/whats-new/2020/11/aws-security-hub-integrates-with-aws-organizations-for-simplified-security-posture-management/


## 移行前の環境概要
Security Tooling Account を Security Hub のマスターアカウントとし、マルチアカウント構成を組んでいました。メンバーアカウントは同一組織内のアカウントだけでなく、組織外のアカウントを招待している構成で、数十アカウントを運用しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/fe06d24f-f08c-5daf-25a9-c27846c8adf2.png)

移行にあたって懸念されるのは、既存管理構成への影響です。結論からいえば組織外のアカウントも含めて現在の親子関係はそのまま継続され、既存の構成に影響を与えることなく移行することができました。

## AWS Organizations への移行
移行手順は 以下のドキュメントでも解説されています。

https://docs.aws.amazon.com/securityhub/latest/userguide/accounts-transition-to-orgs.html

AWS Organizations と統合する場合、組織の管理アカウントが組織内の任意のアカウントを「委任された Security Hub の管理者アカウント」として指定することができます。今回のような構成の場合、委任された管理者アカウント ID に既存の Security Hub マスターアカウントを委任することで移行を行います。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/de514186-bc22-1453-39c2-61fbe2eff670.png)

上記ドキュメントより引用したアカウント構造の概要図です。組織の管理アカウント (Accoount 1) が既存の Security Hub マスターアカウント (Account 4) を委任された Security Hub の管理者アカウントとして指定します。

実際の手順としては組織の管理アカウントの Security Hub の設定 → 一般 から委任を行う Security Hub の管理者アカウント ID を指定し、委任をクリックします。Security Hub はリージョナルサービスであるため、委任の設定は各リージョンごとに行う必要がある点についてご注意ください。指定するアカウント ID はすべてのリージョンで同じである必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/59b49bda-9db7-860e-e2d8-38387da245bf.png)

`正常に委任されました` というメッセージが表示されれば OK です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/3c8dfcb6-8179-c811-f241-77eb0615202f.png)

AWS CLI で実施する場合は `update-organization-configuration` を使用することができます。`--admin-account-id` に委任を行うアカウント ID を指定します。(組織の管理アカウントの認証情報で実行する必要があります。)

```shell-session
$ aws securityhub enable-organization-admin-account \
    --admin-account-id 123456789012 --region <region>
```

委任された管理者アカウントで Security Hub の設定を確認すると、アカウントリストに `Type` 列が追加されていることがわかります。組織内のアカウントは Type が `Via AWS Organizations` となり、`Name` 列にアカウント名も表示されるようになります。組織外のアカウントは Type が `By invitation` で表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/5958b41c-4eea-7aec-6dd4-1f81d4458718.png)

`このリージョンで組織の Security Hub を有効にする` というメッセージが表示されるので、有効化をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/b3ac0cd6-1a5e-60a1-2479-e28c63f2c415.png)

これはコンソールのみから実行可能な操作で、組織の Security Hub をオンボーディングするために以下の操作を実行します。

* Security Hub が有効化されていないすべての組織アカウントに対し、自動的に有効化を行う
* Auto-enable 設定を ON にする

以下のような確認メッセージが表示されるので、有効化をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/06cc4f62-83a4-e8f5-f183-9d60fef90c05.png)

これにより組織アカウントかつ Security Hub が有効になっていないアカウント (Status が `Not a member`) があれば自動で有効化されます。内部的には各アカウントに [CreateMembers](https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_CreateMembers.html) を実行しています。組織のアカウントについては従来の招待プロセスが不要になります。Actions から 個別に Add member するのと同様の操作なのですが、有効化されていないすべてのアカウントに対し自動実行してくれるため便利です。

Auto-enable は組織に新しいアカウントが追加された場合に自動で Security Hub を有効化するための設定です。あくまで新規アカウントに対し自動で有効化を行うためのオプションであるため、以下のトグルを直接操作して ON にしても、既存のアカウントは有効にならないことに注意してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/ea33c876-6155-be41-2591-3c4bd77a8c52.png)

`このリージョンで組織の Security Hub を有効にする` はコンソールのみから実行可能なため AWS CLI では実行できませんが、CreateMenbers や Auto-enable オプションの ON/OFF を個別に実行することは自体は可能です。(委任された管理者アカウントの認証情報で実行する必要があります。)

```shell
# CreateMembers
$ aws securityhub create-members \
    --account-details '[{"AccountId": "123456789012"}]' \
    --region <region>

# Auto-enable
$ aws securityhub update-organization-configuration \
    --auto-enable \
    --region <region>
```

## 大阪リージョンの有効化
2021/3/20 に Security Hub が大阪リージョンで利用できるようになりました。

https://aws.amazon.com/jp/blogs/news/aws-security-hub-osaka/

大阪リージョンのような新規リージョンで組織の Security Hub を有効にするには以下のような手順を都度実施する必要があります。

* 組織の管理アカウントの Security Hub を有効化
* 委任された管理者アカウントから組織の Security Hub を有効化
* 組織外のアカウントに対して招待を送信

### 組織の管理アカウントの Security Hub を有効化
最初に組織の管理アカウントで Security Hub を有効化します。組織の管理アカウントに対し、Security Hub を自動的に有効化することはできないためです。

> Security Hub cannot be enabled automatically for the organization management account.

https://docs.aws.amazon.com/securityhub/latest/userguide/designate-orgs-admin-account.html

組織の管理アカウントで Security Hub を有効化したら委任された管理者アカウント ID を指定して委任します。この時点で委任された管理者アカウントの Security Hub は自動で有効化されるため、個別に有効化する必要はありません。

### 委任された管理者アカウントから組織の Security Hub を有効化
組織内のその他すべてのアカウントの Status は Not a member であるため、委任された管理者アカウントから移行時と同じ手順で `このリージョンで組織の Security Hub を有効にする` を実行します。 これにより組織アカウントの Security Hub を一括で有効化できます。

### 組織外のアカウントに対して招待を送信
組織外のアカウントはこれまで通り招待/承認プロセスを経て Security Hub のマスターアカウントと連携しなければなりません。面倒ですが対象のアカウントをすべて手動でメンバーに追加 (CreateMembers) し、招待を送信 ([InviteMembers](https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_InviteMembers.html)) する必要があります。組織外のアカウントは受け取った招待を承認 ([AcceptInvitation](https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_AcceptInvitation.html)) します。
 

以上です。
参考になれば幸いです。