AWS Organizationsと一括請求(コンソリ)

先日、複数AWSアカウントの費用請求を統合しました。
この一括請求(ConsolidatedBilling)、以前は請求ダッシュボードから設定できたのですが
現在は[AWS Organizations](https://aws.amazon.com/jp/organizations/)の機能に統合されています。
その時の手順や引っかかった点などを記載したいと思います。

#一括請求の有効化
## 請求統合用の親アカウントの新規作成
請求管理専用のアカウントを作成しました。
MFA有効化、IAMユーザ作成などの基本的な設定を行っておきます。
## AWZ Organizationsで組織作成
AWS Organizationsではコンソリの以外にも、複数のアカウントをポリシーベースで管理できる機能等
を持っています。制御設定など全ての機能を有効化するか、コンソリだけ有効にするかを最初に選択できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/14f6a525-3afb-2e77-e74e-240c303b31c7.png)

コンソリのみを有効化し、組織を作成しました。自動的にこのアカウントが支払いアカウント(親)になります。
Organizationsがリリースされる以前よりコンソリを行っているアカウントは コンソリONLY で
自動的にOrganizationsに移行され、支払いアカウントが組織のマスターアカウント、連結アカウント(子)が
組織のメンバーアカウントと設定されるようです。
http://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_getting-started_concepts.html

## メンバーアカウントの招待
Add account から Invite accountを選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/668e54cd-ce93-ed12-4847-cfb8f18d1926.png)

Account ID または rootアカウントのメールアドレスを入力してInviteします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/b0f168d4-97a7-0f17-db6d-dbcbae6e15c7.png)

Inviteすると統合対象アカウントにメールが届くため、リンクから統合を承認します。
承認すると、マスターアカウント側のダッシュボードでメンバーアカウントのステータスがJoinedに変わります。
またこれは以前より変わらない仕様ですが、孫関係を作ることはできません。
既に親になっているアカウントに対してinviteを送ることはできますが、Accept時にエラーとなります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/5a594c5d-673b-af40-96e3-f58d3b15eb1d.png)

Create Accountでマスターアカウントから新しいメンバーアカウントを作成することもできます。
この場合、通常アカウント作成時のクレジットカード登録が不要です。(最初から親に請求される)
~~ただし、Organizationsで作成されたアカウントは親の一括請求から抜けれないという制限があります。~~
仕様が変更され、Organizationsで作成されたアカウントは必要な情報が登録されている場合のみ、Organizationsから抜けることができます。
(Invite されたアカウントは自由に leave 可能)
http://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_manage_accounts_remove.html

メンバーアカウントからOrganizationsを参照すると、Organization IDおよび
マスターアカウントの情報くらいしか参照できません。Leaveもこちらの画面から行います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/ad34c8cd-2af1-7b5b-c147-e31e529a181d.png)

#引っかかったところ
##サポート費用の請求
Inviteが承認された時点から一括請求が開始されます。
当然のことながら、サポート契約は統合されません。引き続き各メンバーアカウント毎に契約する必要があります。
またサポート費用は前払い制のため、前月請求書で当月サポート料金を支払う形となっています。
そのため、統合を行ったタイミングで以下のような動きになります。

1. メンバーアカウントで申し込まれたサポート契約は自動で一旦キャンセルされる
2. 前月請求書上で支払済の当月サポート料金のうち、当月の残り時間（秒単位）に相当する金額がメンバーアカウントに返金
3. マスターアカウント元で、メンバーアカウントがサポートに再加入（サポート料金はマスターアカウントが支払うため、サポート契約の付け替えが発生する）
4. その結果、新たにマスターアカウント元で再加入された当月分のサポート料金が、日割り計算でマスターアカウントに請求される

**2018/2/1 更新**
2018年2月の請求書より、ビジネスおよび開発者サポート料金における前払い制の廃止されました。
当月のサポート料金は当月に課金されます。
##コスト配分タグの設定
コスト配分タグを使用して、請求のレポートを出力する予定がある場合、注意が必要です。
http://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/864cf8d5-9083-57ee-4aa6-f293622b3614.png)

AWS生成のコスト配分タグを活用して、コスト分析をされている方も多いと思います。
現在の仕様においては、統合後にメンバーアカウントではコスト配分タグの設定が行えないため、
**統合前に有効化しておく必要があります。**
AWS生成のコスト配分タグはマスターアカウントだけでなく、各メンバーアカウントでも有効化しないと
レポートにコスト配分タグの情報が出力されないためです。(有効化してるアカウントのみ出力される）
 
※統合後に有効化したい場合は、サポートにお願いすれば個別に対応してもらえます。

# おまけ: マスターアカウントの請求情報をメンバーアカウントから参照する設定
通常、メンバーアカウントからは自アカウント分の請求情報のみ参照ができます。
特定のメンバーアカウントからマスターの請求情報を確認できるようにしたい要件があったため、
メンバーアカウントのIAMユーザからクロスアカウントアクセスロールの切替で参照できるように設定しました。
もちろんマスターアカウント側で専用のIAMユーザを作ってもよいのですが、再認証が煩わしかったため。


## 請求設定からIAMユーザアクセスを有効化する(マスター側) 
デフォルトではIAMユーザは請求情報を参照できないようになっています。
ルートアカウントでログインし、アカウント設定ページから「IAMユーザ/ロールによる請求情報へのアクセス」
を有効化します。IAMアクセスを有効化すると、Billingポリシーを保持するIAMユーザ/ロールから
請求情報を参照できるようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/468f1bb4-2f67-1d32-acf0-f0b6e3142541.png)

## クロスアカウントアクセス用のロールを作成(マスター側)
マスターアカウント側のIAMでクロスアカウントアクセスロールを作成します。
http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_terms-and-concepts.html

設定例

* アカウントID: 請求情報にアクセスを許可したいメンバーアカウントのID
* ロール名: 任意
* アタッチするポリシー: Biiling

## IAMユーザにAssumeRoleを許可する(メンバー側)
ロール切替を許可したいメンバーアカウントのIAMユーザに以下のようなポリシーをアタッチします
参考URL:
http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html

```json
{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::[マスターアカウントのID]:role/[ロール名]"
  }
}
```

実際にロールの切替を行う手順は割愛します。
こちらを参照ください。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_use_switch-role-console.html

以上です。