AWS Organizations を実際に初めてみる第一歩

# TL; DR

 - 複数のAWSアカウントを統合管理したい人は AWS Organizations を使い始めるべし
 - AWS Organizations を使い始めるときには、(可能ならば) 新規取得したAWSアカウントをマスターアカウントにすべし
 - 新規取得したAWSアカウントは、開設直後には厳し目の上限(制限)がかかっているので、AWSアカウント開設だけでも先に行っておくべし

# はじめに

AWSを利用している人は多いかと思いますが、複数個のAWSアカウントを利用しているケースはどれくらいあるでしょうか？AWSを利用開始するときには、最初のAWSアカウントを取得して、そのアカウントを使っていくケースが殆どではないでしょうか。

その後、社員・エンジニアが増え、AWS利用シーンが増え、サービスが増えていくなかで、一つのAWSアカウントの中で管理するのが難しくなっていく場面も生じてくると思います。また、サービス拡大や会社の状況変化のタイミングで本番環境と検証用環境を分離することが求められることもあるかもしれません。

そういったときに、複数のAWSアカウントを統合管理することを支援してくれるのが「[AWS Organizations](https://aws.amazon.com/jp/organizations/)」というサービスです。本稿では、AWS Organizationsの設計に踏み込むことはせず、実際に使い始める際の操作手順を画面キャプチャを交えて紹介します。
（画面キャプチャは2018年8月時点のものです)

AWS Organizations の設計については、[AWS Organizationsによるマルチアカウント戦略とその実装 - クラウドワークス エンジニアブログ](http://engineer.crowdworks.jp/entry/2018/07/17/103453)　が大変参考になりますので、合わせて一読してみてください。


# 現在利用中のAWSアカウントで、 AWS Organizations を有効化する、前に...

AWS Organizationsを有効化したAWSアカウントは、AWS Organizationsを通じて複数のAWSアカウントを所有することになります。その「親アカウント (=マスターアカウント)」は厳密に管理する必要があります。
既に利用中のAWSアカウントに、IAMアカウントが作成済みであったり、各種のサービスが稼働中である場合には、セキュリティ観点での管理を厳密化するためにも、新規にAWSアカウントを取得することをおすすめします。

# マスターアカウント用のAWSアカウントを取得する

https://portal.aws.amazon.com/billing/signup からAWSアカウントを取得します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/1106/8e2d28f4-1d3b-550f-b38b-aabce354844e.png)

アカウント作成の手順は [AWS アカウント作成の流れ | AWS](https://aws.amazon.com/jp/register-flow/) にも記載されていますが、以下のような流れとなります。

1. メールアドレス、パスワード、アカウント名を入力
2. 住所、電話番号を入力
3. 支払い情報の登録 (クレジットカード情報登録)
4. 本人確認のための電話番号認証
5. サポートプランの選択

これらの情報でサインアップした後に、AWSアカウントのルートユーザに多要素認証の設定を必ず行いましょう。また、AWSアカウント取得後に行うべきプラクティスを確認して実施しておきましょう。

 - [AWS アカウントのルートユーザー - AWS Identity and Access Management](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_root-user.html#id_root-user_manage_mfa)
 - [AWSアカウントを取得したら速攻でやっておくべき初期設定まとめ - Qiita](https://qiita.com/tmknom/items/303db2d1d928db720888)

# AWS Organizations を開始する

1. さきほど作成した「マスターアカウント用のAWSアカウント」にログインします
2. マネジメントコンソールから「AWS Organizations」を選択します
 https://console.aws.amazon.com/organizations/home
3. 「組織の作成」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/1106/32878c27-e8e7-4f34-9f67-eb02bbe05d97.png) ![image.png](https://qiita-image-store.s3.amazonaws.com/0/1106/8c23f288-be1e-8b81-cbd4-17306d3b6d30.png)

これで、AWS Organizationsが有効化されました。

## AWS Organizations に「組織」を追加する

 - 「アカウントの整理」タブをクリックして、「組織 (Organization Unit)」を作成します
 - 組織の配下に組織を作ることもできます

![image.png](https://qiita-image-store.s3.amazonaws.com/0/1106/0b843889-cd32-3778-bd2a-c8bb601ac709.png)

ここでは、Root配下に以下の3つの組織(Organization Unit)を作成しました。また、Service OU の配下に Pomodoro Service という組織(Organization Unit)を作成しました。

 - Admin OU : AWS Organizations 全体の管理用途のAWSアカウントを配置する
 - Service OU : 各種サービスの本番環境、検証用環境のAWSアカウントを配置する
    - Pomodoro Service : 複数サービスあるうちの、ある具体的なサービス（例: ここではポモドーロ・サービス）　の組織
 - Sandbox OU : サービスに紐付かない、検証用途のAWSアカウントを配置する

AWS Organizations の組織構成の設計は、トムソン・ロイター社の事例を参考にしています。

## AWS Organizations で「AWSアカウント」を作成する

AWS Organizations の「アカウント」タブで、「アカウントの追加」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/1106/ac5e08f5-7b2c-702a-87e3-c251a816f461.png)

AWS Organizations へのアカウント追加は、以下の2つの方法があります。

 - 既存のAWSアカウントを招待して、AWS Organizations に追加する
 - AWSアカウントを新規に作成する

ここでは、後者の方法を試すことにします。

 - フルネーム、Eメールを入力して「作成」をクリックします。
 - IAMロール名の入力を省略した場合、 OrganizationAccountAccessRole という名前で AssumeRole用のIAMロールが作成されます
    - [デフォルトの OrganizationAccountAccessRole という名前で作成することが、AWSドキュメントでも推奨されています](https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_manage_accounts_access.html#orgs_manage_accounts_create-cross-account-role)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/1106/083ad185-e657-3c14-0a65-7b76df730370.png)

これらの操作によって、AWS Organizationsを通じてAWSアカウントを作成することができました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/1106/aef02349-78b2-9a9c-cd77-235e116453d3.png)

> **注意**
> 作成した直後のAWSアカウントでは、AWS Organizationsに登録可能なAWSアカウントの上限が通常よりも厳しく制限されています(2018年8月の事例では2個まで)。
> 複数のAWSアカウントをAWS Organizationsの管理下に追加したい場合には、マスターアカウント作成の作業を一週間以上前に、予め行っておくことをおすすめします。

# マスターアカウントにログインした後に、新たに作成したAWSアカウントに切り替える

AssumeRole機能を用いることで、ID/パスワードを入力することなく、AWSアカウントを切り替えることができます。この機能はルートユーザ認証情報でログインした場合には利用できないので、マスターカウント内にIAMユーザを作成してログインしておく必要があります。この機能を利用するためには、マスターアカウントのIAMユーザに対して AssumeRole 許可ポリシーが必要となるので、この手順を説明します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/1106/8c95207a-bede-cc83-98a7-c1e8b74a5967.png)


## マスターアカウントのIAMユーザに AssumeRole 許可ポリシーをアタッチする

マスターアカウントにログインし、IAMコンソールに移動します。

以下の内容のIAMポリシーを作成します。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1533801750000",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "arn:aws:iam::*:role/OrganizationAccountAccessRole"
            ]
        }
    ]
}
```

アカウント切り替えを行いたいIAMユーザまたはIAMグループに対して、さきほど作成したポリシーをアタッチします。

## アカウントを切り替える

先ほど、AssumeRole許可ポリシーをアタッチしたIAMユーザの情報を使ってマスターアカウントにログインします。

右上のユーザ名の部分をクリックし、「ロールの切り替え」をクリックします。

![貼り付けた画像_2018_08_27_22_07.png](https://qiita-image-store.s3.amazonaws.com/0/1106/29f18289-722f-58f3-5bbf-f908f9cd230d.png)

 - アカウント: 12桁のアカウント番号を入力します。 AWS Organizations の画面で確認することができます
 - ロール: AWS Organizations からAWSアカウントをデフォルト状態で作成した場合には `OrganizationAccountAccessRole` を指定します
 - 表示名: 判別可能な文字列を指定します

![image.png](https://qiita-image-store.s3.amazonaws.com/0/1106/1c3491ff-2c73-d65f-70d2-d0d18421f8a1.png)

「ロールの切り替え」を行うと、右上のログインユーザの部分の表記が変化し、アカウントが切り替わったことが確認できます。

![ロール切り替え前](https://qiita-image-store.s3.amazonaws.com/0/1106/82d4b043-ebe9-7552-6888-d7d1e4985df0.png)
![ロール切り替え後](https://qiita-image-store.s3.amazonaws.com/0/1106/cc7c268d-5047-0d95-44fe-5aa8fceecc03.png)

ロール切り替えの履歴がある場合、右上のログインユーザ名をクリックしたメニューから簡単に切り替えを行うことができます。
この履歴情報は、AWSのサーバに記録されておらず、ブラウザ(Cookie)に保存されています。シークレットブラウザを利用した場合や、異なるブラウザを利用した場合には、アカウント情報の再入力が必要になります。

![貼り付けた画像_2018_08_27_22_18.png](https://qiita-image-store.s3.amazonaws.com/0/1106/59196934-b909-b32e-0fd8-e5fd4958f65f.png)

# まとめ

複数AWSアカウントを統合管理する際に役立つ AWS Organizations を実際に利用開始するステップを画面キャプチャを交えて紹介しました。
AWS Organizations は便利な機能なのですが、その特性からか、利用事例があまりパブリックな場には出てきません。この記事を読んで実際に触ってみた方も、ぜひ事例を発信して頂けると嬉しいです。


## 次回予告... かも

 - AWS Organizations のサービスコントロールポリシーを活用する
 - 複数のAWSアカウントのCloudTrailの証跡を、証跡保存用アカウントに集約する
 - 複数のAWSアカウントの統合管理をTerraformで実現する