Cost Explorerへのアクセス権を設定したときのメモ

# 背景・目的
ルートユーザ以外のIAMユーザで、Cost Explorerにアクセスした際表示されなかっため対応したときのメモです。

# まとめ
デフォルトでは、AWS アカウント内の IAM ロールは、デフォルトでは請求情報とコスト管理コンソールページにアクセスできない。アクセスさせるためには、IAM アクセスのアクティブ化させる必要があります。

# 概要
## Cost Explorer へのアクセスの管理
下記のページを基に整理します。

https://docs.aws.amazon.com/ja_jp/cost-management/latest/userguide/ce-access.html

> Cost Explorer へのアクセスは、次の方法で管理できます。
> - 管理アカウントを使用すると、ルートユーザーとして Cost Explorer を有効化できます。この場合、すべてのメンバーアカウントが自動的に有効化されます。
> - メンバーアカウントが有効化された後は、管理アカウント内から Cost Explorer の設定を変更できます。Cost Explorer 内でアクセス可能な情報を管理できるようになります。これには、費用、返金またはクレジット、割引、リザーブドインスタンス (RI) の推奨事項が含まれます。
> - 管理アカウントレベルで Cost Explorer を有効にしたら、ユーザーの IAM ポリシーを管理できます。例えば、ユーザーに対し Cost Explorer への完全なアクセス権を付与したり、アクセスを拒否したりできます。

- 管理アカウントを使用すると、ルートユーザーとしてCost Explorerを有効化出来る
- メンバーアカウントが有効化されたあとは、管理アカウント内からCost Explorerの設定を変更できる
- 管理アカウントレベルでCost Explorerを有効後、IAMポリシーを管理できる

### Cost Explorer へのアクセス権を付与する
> ルートアカウントの認証情報を使用して管理アカウントにサインインしている場合は、Cost Explorer のアクセスを有効化できます。ルートアカウントの認証情報は、Billing and Cost Management コンソールから提供されます。管理アカウントレベルで Cost Explorer を有効にすると、すべての組織アカウントの Cost Explorer が有効になります。組織のすべてのアカウントにアクセス権が付与されるため、アクセス権を個別に許可または拒否することはできません。

- ルートアカウントの認証情報を使用して管理アカウントにサインインしている場合は、Cost Explorer のアクセスを有効化できる
- ルートアカウントの認証情報は、Billing and Cost Managementから提供される
- 管理アカウントレベルで Cost Explorer を有効にすると、すべての組織アカウントの Cost Explorer が有効になる
- 組織のすべてのアカウントにアクセス権が付与されるため、アクセス権を個別に許可または拒否することはできない


### Cost Explorer 設定を使用してアクセスを制御する

> 管理アカウントは、Cost Explorer へのアクセス権をすべてのメンバーアカウントに付与するか、一切付与しないのどちらかを選択できます。個々のメンバーアカウントごとにアクセス権をカスタマイズすることはできません。

> の管理アカウント AWS Organizations は、管理アカウントとメンバーアカウントの両方で発生したコストに関するすべての請求情報とコスト管理情報にフルアクセスできます。メンバーアカウントは、自分の Cost Explorer のコストと使用状況のデータにのみアクセスできます。

> デフォルトでは、 の管理アカウント AWS Organizations には、すべてのコストが課金対象レートで表示されます。組織が Billing Conductor に加入している場合、管理アカウントにも見積レートでのコストが表示されます。メンバーアカウントの Cost Explorer ビューは、Billing Conductor の設定によって異なります。

- 管理アカウントは、Cost Explorer へのアクセス権をすべてのメンバーアカウントに付与するか、一切付与しないのどちらかを選択できる
- 個々のメンバーアカウントごとにアクセス権をカスタマイズすることはできない
- メンバーアカウントは、自分の Cost Explorer のコストと使用状況のデータにのみアクセスできる


## アクセス許可の管理の概要
下記を基に整理します。

https://docs.aws.amazon.com/ja_jp/cost-management/latest/userguide/control-access-billing.html

### 請求情報とコスト管理コンソールへのアクセスをアクティベートする

> AWS アカウント内の IAM ロールは、デフォルトでは請求情報とコスト管理コンソールページにアクセスできません。これは、ロールに、特定の請求情報とコスト管理機能へのアクセス権を付与する IAM ポリシーがある場合でも当てはまります。 AWS アカウント管理者は、IAM アクセスのアクティブ化設定を使用して、請求情報とコスト管理コンソールページへのアクセスをロールに許可できます。

- IAM ロールは、デフォルトでは請求情報とコスト管理コンソールページにアクセスできない
- AWS アカウント管理者は、IAM アクセスのアクティブ化設定を使用して、請求情報とコスト管理コンソールページへのアクセスをロールに許可できる


## IAM ユーザーに請求情報の表示を許可する
下記を基に整理します。

https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-example-policies.html#example-billing-view-billing-only

> IAM ユーザーに機密アカウント情報へのアクセスを許可せずに、請求情報の表示を許可するには、次のサンプル ポリシーのようなポリシーを使用します。このようなポリシーは、ユーザーがパスワードやアカウント アクティビティ レポートにアクセスできないようにします。このポリシーにより、IAM ユーザーは、アカウント設定やレポートコンソール ページへのアクセスを許可せずに、次の請求およびコスト管理コンソール ページを表示できます。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "aws-portal:ViewBilling",
            "Resource": "*"
        }
    ]
}
```

下記を表示できる
- ダッシュボード
- コストエクスプローラー
- 請求書
- 注文と請求書
- 統合請求
- 設定
- クレジット
- 前払い



# 実践
## アクティベート前の確認

現在、Administorator権限を有しているユーザで確認すると下記のように表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/6fa06703-d332-1f5d-19d3-ddf8302113fe.png)


## IAMアクセスをアクティベート化する
1. ルートユーザでサインインします
1. アカウントをクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/627b7dca-9efd-d6f1-539f-030825d47143.png)
1. IAMユーザ及びロールによる請求情報へのアクセスで「編集」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/960d5be8-477b-32cd-7365-11896a2fbf72.png)

1. 「IAMアクセスをアクティブ化」にチェックを入れて「更新」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/d046734c-306f-d814-0f7d-1ccf8f390ebf.png)

## アクティベート後の確認
1. Administorator権限を有しているユーザでサインインします
1. Billing and Cost Managementに移動します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/d009aec9-6867-d6c9-5579-0b475443cfb2.png)

1. ナビゲーションペインで「Cost Explorer」に移動します
1. 見えました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/c668e87b-54a4-3424-b4da-e122d42418e8.png)


## Billingユーザ用の権限を設定します

1. Administorator権限を有しているユーザでサインインします
1. IAM Identity Centerに移動します


### 許可セット

1. ナビゲーションペインで「許可セット」をクリックします
1. 「許可セットを作成」をクリックします
1. 「カスタム許可セット」を選択し「次へ」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/64a6220b-40c8-0bb8-12cd-7b318c93848e.png)

1. AWSBillingReadOnlyAccessをアタッチします
1. インラインポリシーを作成します
    ```json
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Statement1",
    			"Effect": "Allow",
    			"Action": [
    			    "ce:DescribeReport"
    			    ],
    			"Resource": "*"
    		}
    	]
    }
    ```

1. 許可セット名と、セッション時間等を設定し、「次へ」をクリックします
1. 「作成」をクリックします

### アカウントの設定
1. ナビゲーションペインで「AWSアカウント」をクリックします
1. アカウントを選択し、「許可セットを変更」をクリックします
1. 作成した許可セットを選択し、「変更を保存」をクリックします
1. Identity Centerで作成した権限セットのロールでサインインしなおします
1. 同様に確認できました


# 考察
今回、ルートユーザ以外のIAMロールに、Billingを見せるための設定をおこないましｔ

# 参考
https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/control-access-billing.html

https://docs.aws.amazon.com/ja_jp/cost-management/latest/userguide/ce-access.html

https://docs.aws.amazon.com/ja_jp/cost-management/latest/userguide/control-access-billing.html

https://repost.aws/ja/knowledge-center/iam-billing-access

https://aws.amazon.com/jp/blogs/news/changes-to-aws-billing-cost-management-and-account-consoles-permissions/