[Turbonomic] AWSの管理アカウントの登録一つで、メンバーアカウントの管理も可能に

## はじめに
本文書では、Turbonomicの8.14.4でリリースされた**マルチアカウントAWSターゲット**の機能についてご紹介します。
特に多数のAWSアカウントの管理をされている環境などでは有用な機能かと存じますので、よろしければご参照下さい。

## これまでのAWSアカウントの管理

大前提としてAWSのアカウントの構成ですが、一般的に、一定規模以上の環境では、こちらの絵の様に、AWS Organizationが構成され、そのとりまとめのアカウントとして管理アカウント（Management Account）が課金情報も含めた最も強力な権限を持つアカウントとして存在し、その配下に、各部門であったり組織単位でメンバーアカウント（Member Account）が構成されます。

https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_getting-started_concepts.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/f8e9de5f-c391-efc5-c863-cc4530182599.png)

## これまでのTurbonomicの AWSアカウント登録構成
これまでTurbonomicに各アカウントを登録する際は、以下の様な構成で登録頂くのが一般的でした。
* AWS Billing Account : 管理アカウント（管理アカウントで作成されたCURを読むため）
* AWS Account①：メンバーアカウント①
* AWS Account②：メンバーアカウント②
* AWS Account③：メンバーアカウント③
：

但し、この形ですと、メンバーアカウントの数が少ない分にはよいのですが、アカウント数が多くなるにしたがって、各メンバーカウント上での設定や、Turbonomicの登録に手間がかかるケースがありました。（スクリプトなどで自動化は可能ですが、それもまた面倒）

## 新機能：AWSクロスアカウントIAMロールによる自動登録
今回、2024年12月にリリースされた8.14.4では "AWSクロスアカウントIAMロール"を用いる事によって、このメンバーアカウントの登録の自動化が可能になりました。これによって、以下の様に管理アカウントのみの登録によって、その配下のメンバーアカウントの検出・管理が可能になりました。

* AWS Billing Account : 管理アカウント（管理アカウントで作成されたCURを読むため）
* AWS Account全て：管理アカウント（管理アカウントの登録のみで、配下のメンバーアカウントを自動追加）

## 仕組み
具体的には、AWSのCloudFormationの**StackSet**を用いて、管理アカウント配下のメンバーアカウント上に、Turbonomicの操作に必要となるIAMロールを自動的に作成する事によって実現しています。（そして、そのメンバーアカウント上のIAMロールに対しては、管理アカウント上のIAMユーザー・ロールからのアクセスが許可されます）

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/63658344-5dfd-3206-d68f-e5285858f53c.png)

## 設定手順
具体的な設定手順は以下マニュアルの方をご参照頂ければと思います。
https://www.ibm.com/docs/ja/tarm/latest?topic=turbonomic-setting-up-aws-cross-account-iam-role

なお、この辺りの設定については、最近のTurbonomicではユーザーフレンドリーなUIが意識されており、以下の様な画面の指示に従う事で、マニュアルをあまり参照しなくても設定は可能かもしれません。（とはいえ、最初はマニュアルを熟読頂く事をお勧めします）

### UIからの設定手順実行例
※以下は管理アカウント上のIAMユーザーを用いた設定例となります。（SaaS版Turbonomicでは、IAMユーザーに代わってIAM Roleを用いた設定も可能です。）

 設定 -> ターゲットの追加 -> AWS
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/0da64f7b-b98c-c7d3-6af0-43c7eec846b8.png)

Multiple Accountsを選択（こちらが今回追加された新機能のマルチアカウント対応）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/0e456834-fae2-2786-0c5a-99df85954d61.png)

設定に必要なIAMユーザーのポリシーのJSONファイルをクイックガイドからダウンロード（ここは従来のAWSアカウントの設定と同じ。管理アカウント上にEC2などの最適化対象のリソースがあれば、ここの設定によって管理可能となります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/9de23f97-f067-1a38-eff3-3bd73386494b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/015a6f3e-fdd2-a31c-5fcd-9e0201beb298.png)

対象ポリシーを持つIAMユーザーのアクセス・シークレットキーを登録の上、次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/dc3c504f-3449-cbb1-d363-2e8f274dd56a.png)

**新機能**：配下のメンバーアカウントへのアクセスに際して必要となるCloudFormationのテンプレートをダウンロード。管理アカウント上でStackSetを作成し、その際に指定したメンバーアカウント用のIAMロールの名前（デフォルトでは**Turbonomic_Org_Access**）を指定し、次へ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/3b9af55b-7217-1dd3-8b14-2591452ce930.png)

プロキシ経由のアクセスが必要な場合は入力の上、登録。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/de03d19e-fc78-d165-bf9a-f00012d02351.png)

## 設定完了後の状況
### AWS管理アカウント
CloudFormationのStackSetの詳細。配下のメンバーアカウントがスタックインスタンスとして表示され、その処理が成功している状況。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/07c76eb4-4530-1e20-e6ba-354d00807281.png)

### AWSメンバーアカウント
管理アカウントで定義されたStackSetによって、メンバーアカウント上のCloudFormationのスタックが実行された状況。また、その処理の中でIAMRoleが作成されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/e808ea46-f353-5fa1-3a88-67ac50bd501f.png)

作成されたIAMRoleを確認。管理アカウントのIAMユーザー（Turbonomicへ登録したユーザー）に対して信頼関係が設定されている為、管理アカウントのIAMユーザー経由で、こちらのメンバーアカウント上のEC2等のリソースの検出が可能になっている状況。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/46ea4323-e361-358d-886c-9ea44c617c40.png)

### Turbonomicのターゲット設定
**AWS Organization**というタイプで登録が完了した状態。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/3ff28a25-43d8-6862-c06b-94d1f1433493.png)

管理アカウント一つの登録で、管理アカウント自身、及び、配下のメンバーアカウントが検出された状況
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/4185a08b-d115-9b9d-7125-6c1f291f3185.png)


## まとめ
いかがでしょう、これまで多数のAWSアカウントが存在した場合には、一つ一つ個別に設定・登録が必要でしたが、この機能によって、一括して纏めて登録が可能となりましたので、結果、大幅な作業工数の削減につながる事がご想像できたのではないかと思います。

一方で、運用上の意図（例えば特定のアカウントはTurbonomicの管理対象にはいれたくない）といった場合には、引き続き、これまでと同様に、個別のアカウントとしての登録も可能ですので、その辺りは適材適所で使い分けて頂ければと思います。


※なお、マニュアルにも記載されておりますが、一つのアカウントを重複して管理させることは出来ませんので、例えば、既に個別のメンバーアカウントが登録された状態で、クロスアカウントが利用可能な管理アカウントを追加した際は、関連ターゲットが**Duplicate Target**としてエラーが表示されます。
ただ、これは予期される動作となりますので、その際は、登録済みの個別のメンバーアカウントを削除頂く事で、継続して対象EC2インスタンスなどの管理が可能です。ご承知おき下さい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082344/ff7895fc-90f2-ddd2-b829-68c7ad83b0a3.png)