新しめの設定をいれた AWS Billing and Cost Management 総まとめ

![20210304-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/e3847d47-7eb5-eb51-c12a-37b30aa5620d.png)
# 1. はじめに
* 私が現在行っている AWS Billing and Cost Management 設定がかなりレガシーなものになっているので、新しめの設定へ移行する。
* AWS Billing and Cost Management 設定やること/やらないことリストをアップデートする。
* 設定を CloudFormation, Terraform 化できるところは作成する。

# 2. やること/やらないことリスト
## 2.1. やることリスト
* アカウントの請求情報の表示を IAM ユーザーに許可
 * 手動で設定する。（要ルートユーザー）

* Cost Explorer 有効化と設定
 * 手動で設定する。

* コスト配分タグをアクティブ化
 * 手動で設定する。

* 電子メールで PDF 版請求書を受け取る設定
 * 手動で設定する。

* Budgets 設定
 * 従来の「請求書アラート」設定は止めて、こちらを使う。
 * Terraform で設定する。

* Cost & Usage Reports 設定
 * 従来の「AWSの請求明細レポート（DetailedBillingReport）」を止めて、こちらを使う。
 * Terraform で設定する。
 
* Billing管理専用IAMユーザ作成
 * CloudFormation で設定する。

## 2.2. やらないことリスト
* AWS支払の円払いへの切り替え設定
 * 現時点でこの機能を利用できるクレジットカードは、VISA と Master カード。
 * 私が登録しているクレジットカードは JCB なので使えない。。ので、デフォルトの USD のままで。
 * [AWS支払の円払いへの切り替え方法について](https://aws.amazon.com/jp/blogs/news/how-to-pay-aws-by-yen/)

* Budgets Reports 作成
 * いまのところ予算管理は行ってないので。
 * 現時点 Terraform に Budgets Reports のリソースがない。
 * [AWS 予算レポートのご紹介](https://aws.amazon.com/jp/about-aws/whats-new/2019/07/introducing-aws-budgets-reports/)

* 請求アラートを受け取る設定と、請求アラーム設定
 * Budgets 設定へ移行したので。
 * [AWS の予想請求額をモニタリングする請求アラームの作成](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html)

* 有効期限が切れる予約（リザーブドインスタンス）のアラート通知設定
 * 現時点では、メール通知のみ。
 * Slackへ通知したいので、[自作した監視設定](https://qiita.com/tonishy/items/60554235c94435b62fc9)を入れている。
 * [AWS Cost Explorer で予約の有効期限切れアラートを提供開始](https://aws.amazon.com/jp/about-aws/whats-new/2019/05/reservation-expiration-alerts-now-available-in-aws-cost-explorer/)

# 3. やることリストの設定

## 3.1. アカウントの請求情報の表示を IAM ユーザーに許可

### 3.1.1. 目的
* AWSアカウント開通直後のデフォルト設定では、請求情報へアクセスすることができるのは[ルートユーザー](https://qiita.com/tonishy/items/9eb772b4a5a338ac6ee6#21-%E3%83%AB%E3%83%BC%E3%83%88%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%BE%E3%81%9F%E3%81%AF-root-%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88-%E3%83%AB%E3%83%BC%E3%83%88id-root-id)のみとなっている。
* ルートユーザーはAWSアカウント開通時だけ使用するユーザーであり、IAMドキュメント では、日常の作業で AWS ルートユーザーを使用しないことを推奨している（サポートプラン変更など、ルートユーザーしか設定できない場合は除く）。
* IAMユーザーにも請求書情報へのアクセスを許可するために、この設定を行う。
* ただし、この設定だけでは IAMユーザーは請求書情報へアクセスすることはできない。請求書情報へアクセスしたい IAMユーザー（例えば、AWS管理者ユーザー、経理部門ユーザー、Terraformユーザーなど）に Billing ポリシーをアタッチする必要がある。
* Billing のすべての権限を許可したい場合は、IAMポリシーの「AWS管理のジョブ機能」の「Billing」ポリシーをアタッチする。

### 3.1.2. 設定
* 参考
 * [アカウントの請求情報の表示を IAM ユーザーに許可するにはどうすればよいですか?](https://aws.amazon.com/jp/premiumsupport/knowledge-center/iam-billing-access/)
 * [請求の情報およびツールへのアクセス許可](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/grantaccess.html)
 * [チュートリアル: 請求コンソールへのアクセス権の委任](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/tutorial_billing.html)

**(1) ルートユーザーでサインインする**

**(2) マイアカウント**

|![20200123-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/27e49cdc-28e7-4ec4-ab53-950a20bdbf98.png)|
|:-:|

**(3) IAM ユーザー/ロールによる請求情報へのアクセス の箇所までスクロール**
　（ルートユーザー以外がサインインしたときには表示されない）

「IAM アクセスのアクティブ化」にチェックを入れて、更新

|![20200123-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/24967a40-36ad-a194-4bba-99742cea2218.png)|
|:-:|

**(4) 確認**

「IAM ユーザー/ロールによる請求情報へのアクセスは有効になっています。」
と表示されていることを確認

|![20200123-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/56a59d3a-8031-6651-62ef-e8419f385d0b.png)|
|:-:|

**(5) 設定が終わったら、速やかにルートユーザーをサインアウトする**

## 3.2. Cost Explorer 有効化と設定

### 3.2.1. 目的
* Cost Explorer は、コストと使用状況を表示および分析するために使用できるツール。メイングラフ、Cost Explorer コストと使用状況レポート、または Cost Explorer RI レポートを使用して、使用状況とコストを確認できる。
 * [Cost Explorerによるコストの分析](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/ce-what-is.html)
 * [AWS Cost Explorer が時間とリソースレベルの詳細度に対応開始](https://aws.amazon.com/jp/about-aws/whats-new/2019/11/aws-cost-explorer-supports-hourly-resource-level-granularity/)
 * [Cost Explorer を使って使用量と使用状況を分析する方法を教えてください。](https://aws.amazon.com/jp/premiumsupport/knowledge-center/cost-explorer-analyze-spending-and-usage/)

* コスト配分タグを利用することで、より効率的なコスト管理ができる。
 * [コスト配分タグを用いた効率的なコスト管理](https://aws.amazon.com/jp/blogs/news/cost-allocation-tag/)

* EC2 リソース最適化推奨を確認し、できることがあれば対応する
 * [Amazon EC2 リソース最適化推奨のご紹介](https://aws.amazon.com/jp/about-aws/whats-new/2019/07/introducing-amazon-ec2-resource-optimization-recommendations/)
 * [適切なサイズ設定に関する推奨事項の開始方法](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/ce-rightsizing.html)

* リザーブドインスタンスの利用状況を確認する。
 * [リザーブドインスタンスの効率的な運用](https://aws.amazon.com/jp/blogs/news/how-to-use-cost-explorer-by-ri/)
 
### 3.2.2. 設定

*  参考
 * [Cost Explorer の有効化](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/ce-enable.html)
 
**(1) 「Billing」ポリシーをアタッチしたIAMユーザーでサインインする**

**(2) 「請求情報とコスト管理ダッシュボード」(Billing) コンソールへ**

|![20200123-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/d85f4a5a-4865-b184-c462-68accf04f2f3.png)|
|:-:|

**(3) Cost Explorer へ**

|![20200123-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/45210eea-7236-e28f-f0a7-58c2299e6c8a.png)|
|:-:|

**(4) コストエクスプローラーを有効化 する**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/72927fc7-2c1f-5910-6a23-127ebffae1c7.png)
<font color="red">初めて Cost Explorer を有効にした後、コストと使用状況のデータが追加されるまで、最大 24 時間かかる
</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/03c58043-6100-fbdd-9c40-7ccfbc68bde1.png)

**(5) コストエクスプローラーを起動 する**

|![20200123-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/40ff4912-5579-b906-aa9f-3891053fe950.png)|
|:-:|

**(6) 設定画面へ**

|![20210304-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/98fda24d-1899-5902-0ae3-ea8afa35bff6.png)|
|:-:|

**(7) 「時間単位とリソースレベルのデータ」と「Amazon EC2 リソースの推奨事項を受け取る」にチェックを入れる**

|![20210304-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/0ae56e68-e1d3-b239-f8a7-a07f66aa858a.png)|
|:-:|

**(8) リザーブドインスタンスの有効期限切れアラート設定を行う場合**

※ 現時点では、メール通知のみ。私はSlackへ通知したいので、[自作した監視設定](https://qiita.com/tonishy/items/60554235c94435b62fc9)を入れている。

|![20200123-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/9b3d89de-50dd-e095-d31b-3d50ba37dc51.png)|
|:-:|

|![20200123-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/f62c90cd-8b62-889b-d43b-543cf2b2f6a1.png)|
|:-:|

|![20200123-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/92c7d00f-619a-e7c1-b478-df7945e75448.png)|
|:-:|


## 3.3. コスト配分タグをアクティブ化

### 3.3.1. 目的
* Cost Explorer で効率的なコスト管理を行う。

### 3.3.2. 設定
* 参考
 * [ユーザー定義のコスト配分タグのアクティブ化](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/activating-tags.html) 

**(1) 「Billing」ポリシーをアタッチしたIAMユーザーでサインインする**

**(2) 「請求情報とコスト管理ダッシュボード」(Billing) コンソールへ**

|![20200123-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/d85f4a5a-4865-b184-c462-68accf04f2f3.png)|
|:-:|

**(3) コスト配分タグ へ**

|![20200123-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/98efaffd-78c2-f5f3-eb44-13c4e1845dc1.png)|
|:-:|

**(4) 有効化 を押下で有効にする**

|![20200123-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/0ecf0db7-0713-185f-70a3-5169e0957dd5.png)|
|:-:|

**(5) ユーザー定義のコスト配分タグ設定**

コスト配分タグに設定したいタグにチェックを入れて、有効化 を押下する。
※ 設定したタグが Cost Explorer に表示されるまで最大 3 日かかることがある。

|![20200123-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/6cfc67f9-dadb-f7d2-6983-70c7aaf81a2a.png)|
|:-:|


## 3.4. 電子メールで PDF 版請求書を受け取る設定
### 3.4.1. 目的
* 毎月３日か４日くらいに、前月分の請求書のPDFファイルを指定したメールアドレスへ送信する。

### 3.4.2. 設定

**(1) 「Billing」ポリシーをアタッチしたIAMユーザーでサインインする**

**(2) 「請求情報とコスト管理ダッシュボード」(Billing) コンソールへ**

|![20200123-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/d85f4a5a-4865-b184-c462-68accf04f2f3.png)|
|:-:|

**(3) Billing の設定 へ**

|![20200123-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/eea8af96-9fdf-51cd-235c-7714487d4d68.png)|
|:-:|

**(4) 電子メールで PDF 版請求書を受け取る にチェックをいれて、設定を保存する**

|![20200123-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/85e0f1f0-ca02-5029-4709-5a87a069bcd1.png)|
|:-:|

## 3.5. Budgets 設定
### 3.5.1. 目的
* 予算の管理を行う。
 * [予算によるコストの管理](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/budgets-managing-costs.html)

* 予算がアラートの閾値を超えた場合に通知（Eメール or SNSトピック）する。
 * [AWS Budgets](https://aws.amazon.com/jp/aws-cost-management/aws-budgets/)

* 実際のコストがアラートの閾値を超えた場合に通知（Eメール or SNSトピック）する。


* 従来の「請求書アラート」設定よりもきめ細かいアラート設定ができる。

### 3.5.2. Budgets 設定
* 参考
 * [10分間チュートリアル AWS コストの管理](https://aws.amazon.com/jp/getting-started/tutorials/control-your-costs-free-tier-budgets/)

※ ここでは、１ヶ月の実際のコストが閾値を超えた場合に通知する設定を行う。
※ 通知を SNS トピックで行う場合は、事前に SNS トピックを作成しておく。

**(1) 「Billing」ポリシーをアタッチしたIAMユーザーでサインインする**

**(2) 「請求情報とコスト管理ダッシュボード」(Billing) コンソールへ**

|![20200123-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/d85f4a5a-4865-b184-c462-68accf04f2f3.png)|
|:-:|

**(3) Budgets へ**

|![20200123-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/b8f51835-732b-54fb-a626-2159ecfa9af0.png)|
|:-:|

**(4) 「Create a budget」へ}**

|![20200123-1３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/d65fbf94-a000-c577-37cd-aeab41d25562.png)|
|:-:|

**(5) 「コスト予算」へ**

|![20200123-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/4ef35fd2-a74e-d38e-961b-6d5558d8728b.png)|
|:-:|

**(6) 予算の設定**

名前：〇〇〇
間隔：月別
定期予算
開始月：〇〇〇
予算額：〇〇〇

※ 設定例

|![20200123-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/031ca4ff-8f95-7273-451b-4a2ec6263463.png)|
|:-:|

**(7) アラートの設定**

次に基づいてアラートを送信：実際のコスト
アラートの閾値：〇〇〇　金額
SNS トピックのARN：〇〇〇

※ 設定例

|![20200123-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/238ed28a-4fc4-4658-6c06-a13d7c34e629.png)|
|:-:|

### 3.5.3. 従来の「請求書アラート」設定は止める

**(1) 「Billing」ポリシーをアタッチしたIAMユーザーでサインインする**

**(2) 「請求情報とコスト管理ダッシュボード」(Billing) コンソールへ**

|![20200123-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/d85f4a5a-4865-b184-c462-68accf04f2f3.png)|
|:-:|

**(3) Billing の設定 へ**

|![20200123-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/eea8af96-9fdf-51cd-235c-7714487d4d68.png)|
|:-:|

**(4) 請求書アラートは、一度オンにするとオフに戻すことはできない・・**

|![20200123-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/8d64ea39-d022-3a51-eaf6-1b9a6f6e4a8a.png)|
|:-:|

**(5) バージニア北部リージョンの CloudWatch にある 請求アラームを削除する**


### 3.5.4. Terraform

* 3.5.2. で行った設定の Terraform（0.11, 0.12対応）例

```sample.tf
resource "aws_budgets_budget" "cost" {
  budget_type       = "COST"
  limit_amount      = "1000.0"
  limit_unit        = "USD"
  name              = "〇〇〇"
  time_period_start = "2020-01-01_00:00"
  time_unit         = "MONTHLY"
  cost_types {
    include_credit             = false
    include_discount           = true
    include_other_subscription = true
    include_recurring          = true
    include_refund             = false
    include_subscription       = true
    include_support            = true
    include_tax                = true
    include_upfront            = true
    use_amortized              = false
    use_blended                = false
  }
  notification {
    comparison_operator        = "GREATER_THAN"
    notification_type          = "ACTUAL"
    subscriber_email_addresses = []
    subscriber_sns_topic_arns = [
      "arn:aws:sns:us-east-1:〇〇〇:〇〇〇"
    ]
    threshold      = 800
    threshold_type = "ABSOLUTE_VALUE"
  }
}
```

## 3.6. Cost & Usage Reports 設定
### 3.6.1. 目的

※ **一般的な目的**

* AWS のコストと使用状況レポートは、AWS 請求に関する詳細なデータセットを提供し、選択した Amazon Simple Storage Service (Amazon S3) バケットに配信されます。次の 2 つの方法のいずれかでコストと使用状況レポートを表示できます。
 * S3 バケットから .csv 形式のレポートファイルを表示またはダウンロードします。
 * レポートを Amazon Athena、Amazon QuickSight、または Amazon Redshift に取り込みます。 

* AWS のコストと使用状況レポートには、アカウントとその IAM ユーザーが使用した各サービスカテゴリの AWS 使用状況が、時間単位または日単位の明細項目として一覧表示されているほか、コスト配分のためにアクティブ化されたタグも表示されます。また、AWS のコストと使用状況レポートをカスタマイズし、使用状況のデータを日単位または時間単位で集計することも可能です。

* Amazon Athena に統合するように、コストと使用状況レポートを 設定することも可能です。Amazon Athena と、AWS のコストと使用状況レポートとの統合が有効化されると、ユーザーのデータは、圧縮された Apache Parquet ファイルとしてユーザーが指定した Amazon S3 バケットに配信されます。AWS のコストと使用状況レポートは、Amazon Redshift に直接取り込むか、または、Amazon QuickSight にアップロードすることも出来ます。

* 参考
 * [AWS のコストと使用状況レポート](https://aws.amazon.com/jp/aws-cost-management/aws-cost-and-usage-reporting/)
 * [AWS Billing and Cost Management ユーザーガイド](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/billing-reports-costusage.html)
 * [AWS のコストと使用状況レポートに、Amazon Athena との統合、Apache Parquet 形式での出力、レポートの上書きが追加](https://aws.amazon.com/jp/about-aws/whats-new/2018/11/aws-cost-and-usage-report-integrates-with-amazon-athena/)
 * [AWS のコストと使用状況レポートはどのように使用しますか?](https://aws.amazon.com/jp/premiumsupport/knowledge-center/cost-usage-report/)

※ **個人的な目的**

* 従来の 請求明細レポート（DBR: Detailed Billing Report）設定をなんとなく入れていたけど、結局、S3バケットに配信されたレポートをダウンロードして開くことは、最初の設定時くらいだけだった。。
* そして、請求明細レポート（DBR）はレガシーな存在となって、コストと使用状況レポート（CUR: Cost and Usage Report）へ移行することを強く勧めている。
* コストと使用状況レポート（CUR）では、レポート活用手段が増え、今後もしかしたら活用する機会があるかもしれないので、請求明細レポート（DBR）からコストと使用状況レポート（CUR）へ移行しておくことにする。
* 参考
 * [請求明細レポートデータの AWS Cost and Usage Report への移行](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/migrate-dbr-cur.html) 
 * [請求明細レポートから AWS のコストと使用状況レポートに移行するにはどうすれば良いですか？](https://aws.amazon.com/jp/premiumsupport/knowledge-center/dbr-cost-usage-migrate/)

### 3.6.2. コストと使用状況レポート（CUR）設定
* 参考
 * [AWS のコストと使用状況レポートを作成する](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/billing-reports-gettingstarted-turnonreports.html)

**(1) 「Billing」ポリシーをアタッチしたIAMユーザーでサインインする**

**(2) 「請求情報とコスト管理ダッシュボード」(Billing) コンソールへ**

|![20200123-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/d85f4a5a-4865-b184-c462-68accf04f2f3.png)|
|:-:|

**(3) Cost & Usage Reports へ**

|![20200123-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/6607fb47-3db2-5c5a-8cf4-191d19af7a64.png)|
|:-:|

**(4) レポートの作成 へ**

|![20200123-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/fca5342e-4be0-3e4a-229a-a3c8932b2f1c.png)|
|:-:|

**(5) レポートの明細項目**

設定例

|![20200123-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/d9090d2d-df69-63a9-8044-31a2db0c2293.png)|
|:-:|

**(6) 配信オプション**

レポートを配信する S3 バケットを設定する

|![20200123-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/421b0952-e0e5-f1ef-f3e6-bf540e6fff59.png)|
|:-:|

既存バケットを選択 あるいは 新規に作成する

|![20200123-2３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/30f6db9a-6007-70ee-718a-191b9141a3c9.png)|
|:-:|

ポリシーの確認にチェックを入れる

|![20200123-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/533b2e39-ae18-9717-9d64-46e5926b34cf.png)|
|:-:|

今回は、レポートデータ統合の有効化 はチェックしない

|![20200123-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/a78013b0-6443-7b2e-ca50-46106fb56e1e.png)|
|:-:|

確認して完了

### 3.6.3. 請求明細レポート（DBR）を停止する

**(1) 「Billing」ポリシーをアタッチしたIAMユーザーでサインインする**

**(2) 「請求情報とコスト管理ダッシュボード」(Billing) コンソールへ**

|![20200123-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/d85f4a5a-4865-b184-c462-68accf04f2f3.png)|
|:-:|

**(3) Billing の設定 へ**

|![20200123-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/eea8af96-9fdf-51cd-235c-7714487d4d68.png)|
|:-:|

**(4) 請求明細レポート（レガシー）設定を無効にする**

|![20200123-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148868/16bbbbd5-81d8-7441-dade-dce646bc4f70.png)|
|:-:|

「レガシー化した請求明細レポート機能を使って、AWS の料金に関する継続的なレポートを受け取る。」のチェックを外して、設定を保存する。
レポートを保存していたS3バケットは、消さずに残しておく。

### 3.6.4. Terraform

3.6.2. で行った設定の Terraform（0.11, 0.12対応）例

コストと使用状況レポートは、バージニア北部（us-east-1）リージョンに作成する必要がある。
S3バケットは 東京（ap-northeast-1）リージョンに作成する。
なので、Multiple Providers 機能を使う。

```sample.tf
provider "aws" {
  shared_credentials_file = "credentials"
  profile                 = "terraform"
  region                  = "ap-northeast-1"
}
provider "aws" {
  shared_credentials_file = "credentials"
  profile                 = "terraform"
  alias                   = "virginia"
  region                  = "us-east-1"
}
```

アクセスキーID と シークレットアクセスキー を credentials ファイルに設定する。

```
[terraform]
aws_access_key_id = ********************
aws_secret_access_key = ****************************************
```

AWSアカウントIDを data "aws_caller_identity" "current" {} で取得している。
S3 バケット名は「cost-report-AWSアカウントID」としている。


```sample.tf
data "aws_caller_identity" "current" {
}
data "aws_iam_policy_document" "s3bucket-policy" {
  version = "2008-10-17"
  statement {
    sid    = "Stmt1"
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["billingreports.amazonaws.com"]
    }
    actions = [
      "s3:GetBucketPolicy",
      "s3:GetBucketAcl"
    ]
    resources = [
      "${aws_s3_bucket.cost-report.arn}"
    ]
  }
  statement {
    sid    = "Stmt2"
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["billingreports.amazonaws.com"]
    }
    actions = [
      "s3:PutObject"
    ]
    resources = [
      "${aws_s3_bucket.cost-report.arn}/*"
    ]
  }
}
resource "aws_s3_bucket" "cost-report" {
  bucket        = "cost-report-${data.aws_caller_identity.current.account_id}"
  acl           = "private"
  force_destroy = "false"
  region        = "ap-northeast-1"
}
resource "aws_s3_bucket_policy" "cost-report" {
  bucket = "${aws_s3_bucket.cost-report.bucket}"
  policy = "${data.aws_iam_policy_document.s3bucket-policy.json}"
}
resource "aws_cur_report_definition" "cost-report" {
  provider                   = "aws.virginia"
  report_name                = "〇〇〇"
  s3_bucket                  = aws_s3_bucket.cost-report.bucket
  s3_region                  = "ap-northeast-1"
  format                     = "textORcsv"
  compression                = "GZIP"
  additional_schema_elements = ["RESOURCES"]
  time_unit                  = "DAILY"
}
```

## 3.7. Billing管理専用IAMユーザ作成

### 3.7.1. 目的
* 経理部門など、Billing設定以外は操作しない利用者用

### 3.7.2. CloudFormation
* 概要
 * IAMグループ BillingUsers を作成
 * IAMグループに IAMポリシーの「AWS管理のジョブ機能」の「Billing」ポリシーをアタッチする。
 * IAMユーザ yamada-taro を作成して、IAMグループ BillingUsers へ所属させる
 * 初期パスワードを適当に設定
 * 初回ログイン時にパスワードを変更させる

※ MFA の設定忘れずに。

```sample.tf
Resources:
  IAMGroupBillingUsers:
    Type: AWS::IAM::Group
    Properties: 
      GroupName: BillingUsers
      ManagedPolicyArns: 
        -
          "arn:aws:iam::aws:policy/job-function/Billing"
      Path: "/"

  IAMManagedPolicyIAMChangePassword:
    Type: AWS::IAM::ManagedPolicy
    Properties: 
      Description: "IAM Change Password"
      Groups: 
        - !Ref IAMGroupBillingUsers
      ManagedPolicyName: "IAMChangePassword"
      Path: "/"
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          -
            Effect: "Allow"
            Action: "iam:GetAccountPasswordPolicy"
            Resource: "*"
          -
            Effect: "Allow"
            Action: "iam:ChangePassword"
            Resource: "arn:aws:iam::397190037767:user/${aws:username}"

  IAMUserBilling:
    Type: AWS::IAM::User
    Properties: 
      UserName: "yamada-taro"
      Groups: 
        - !Ref IAMGroupBillingUsers
      LoginProfile: 
        Password: "z2854jBW!M(%3%dpJT-f"
        PasswordResetRequired: true
      Path: "/"
```