とりあえず30分でAWS利用料金の高額請求に備える～予算アラート設定・MFA・料金確認～

# 概要

別記事でAWSソリューションアーキテクト資格の勉強法の記事を投稿しているので、今回は資格取得に向けて利用してみたAWSサービスの具体的な利用方法について書いていこうと思います。
今回はいろいろなAWSサービスを利用するにあたり、突然予定外のAWS利用料金の請求が来ないように、不正利用被害にあわないようにするための30分でできる事前準備編です。
これから資格試験を受ける方の参考になればと思います。

勉強法は記事は以下を参照。

[AWS初心者がAWS 認定ソリューションアーキテクト – アソシエイト資格試験に合格した時の勉強法](https://qiita.com/fkooo/items/e5284a4ed3c3466ffd41 "AWS初心者がAWS 認定ソリューションアーキテクト – アソシエイト資格試験に合格した時の勉強法")
[AWS初心者がAWS 認定ソリューションアーキテクト – プロフェッショナル資格試験に合格した時の勉強法](https://qiita.com/fkooo/items/17fa401f4e46ecd00675 "AWS初心者がAWS 認定ソリューションアーキテクト – プロフェッショナル資格試験に合格した時の勉強法")

## 今回やること

* AWS利用料 予算設定
    * まずは予定外の出費とならないよう予算を設定し予定以上のお金がかかる時はメールが来るようにします
* IAM MFA設定
    * 不正利用にあわないようにIAMで最低限の設定をします
* AWS利用料金確認
    * なぜか予定外の請求がきてしまった。。。時の利用料金の確認方法を知ります


全部無料でできます。AWSアカウントを作ったらまず最初にやってみてください。

## 作業時間

* AWS利用料 予算設定
    * 5分
* IAM MFA設定
    * 10分
* AWS利用料金確認
    * 5分

合計20分！
何かに手間どった場合を見込んで合計30分！！
と、しています。

## AWS利用料 予算設定

では、まずAWS利用料に関する予算設定をします。
これを行うことで毎月2ドルまで、とりあえず1ドル使用したら翌日メールで通知する。
といった設定が可能で、自身の作業／不正利用に関わらず予定外の出費になる前にメールにより気付くことができるようになります。
個人的にはAWSを利用する上でまず最初にやっておきたい設定です。

設定は、**マイ請求ダッシュボード**から行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/1fefaa67-c8a8-35a4-5a6e-300022ebc47c.png)

予算設定なので**Budgets**をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/7f62f3d9-8a63-c37d-c928-a7ef61de45c1.png)

**予算を作成**をクリック。
（全体使用料金というのは私の方で事前設定している予算になります^^;初期画面では表示されていないはず）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/906ef84a-79cf-ed95-d515-a3d0bca010bd.png)

今回は毎月のAWS使用料金に対する予算なので**コスト予算**を選択し、**予算を設定**をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/289bb411-1541-b2db-dda3-34c2cb1fff7d.png)

今回のような毎月〇ドルというシンプルな予算設定の場合、ほぼデフォルトのままで大丈夫で、**名前**（任意の名前でOK）と**予算額**に自分の決めた内容を入力します。以下の画面サンプルの設定で毎月固定で2ドルの予算設定がされたことになります。
予算額を入力したら、**しきい値を設定する**をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/4668ee25-ad42-206e-22f5-08b2e75b60ec.png)

この画面でしきい値（予算の内いくらになったら通知するか）の設定を行います。
**アラートのしきい値**部分で今回は予算額の50%（つまり予算2ドルの内の50%の1ドル）をしきい値とし、Eメールの通知先を入力します。通知先にはAWS SNSを指定できるので事前にSNSに登録している場合は、こちらを利用するのが便利です。
その他**予算アクションを追加**から、予算超過した場合のアクション（EC2の停止やIAMポリシーの変更など）が設定可能ですが、今回はまずは最低限の予算超過の通知設定のみに留めておくので割愛します。
アラートのしきい値、通知先の設定が終わったら**予算の確認**をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/f4d74325-0ab4-bf7f-d86f-5924eafc313c.png)

表示された内容に問題がなければ**作成**をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/fd91307b-da99-8e7f-72d0-f56cdbb9a145.png)

以上、予算設定は完了です。
シンプルな予算設定なので5分程度で設定でき、予定外の請求が来る前にメール通知が来るので非常にオススメです！

これをしておけば新しいサービスを利用し始めた時の意図しない課金に気が付けます。以下参照^^;
[AWS初心者が無料利用枠で個人運用していたら$0.64請求がきた話し](https://qiita.com/fkooo/items/df3b1b47a61f7826ffd4 "AWS初心者が無料利用枠で個人運用していたら$0.64請求がきた話し")

ちなみに資格試験対策としては、CloudWatchでも同等の通知設定ができるので、BudgetsとCloudWatchの2か所でできることを覚えておきましょう。

[請求アラームの作成](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html#creating_billing_alarm_with_wizard "請求アラームの作成")

## IAM MFA設定

次はIAM MFA設定になります。
最初に記載しておくと、IAMのベストプラクティスは以下に書かれています。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html

こちらに倣って実施するのがベストではありますが、とりあえず個人で利用する上で徹底すべきは以下の3つ思います。

### 1.普段の作業にAWSアカウントのルートユーザは使わない。IAMユーザを作成しIAMユーザで作業する

ルートユーザは全ての権限を持っているので普段の作業では使用せず、IAMユーザを作成してIAMユーザに必要な権限を割り当てて作業しましょう。そうすれば仮にIAMユーザのID/パスワード、認証情報が洩れても、簡単に利用停止にすることができます。
IAMユーザはコンソールから画面指示に従えば直感的に作成できると思いますが、公式ページの手順としては以下になります。

[AWS アカウントでの IAM ユーザーの作成](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_users_create.html#id_users_create_console "AWS アカウントでの IAM ユーザーの作成")

### 2.すべてのユーザでMFAアクセスを有効化する

これはそのままベストプラクティスの以下に該当します。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html#enable-mfa-for-privileged-users

MFA（多要素認証）はいくつかやり方がありますが、スマホにアプリをインストールして仮想MFAデバイスとして利用する方法が簡単です。
以下のURL等を参考にするといくつかのAWS推奨アプリがあるのでいずれかをインストールします。（私は先頭のAuthyを利用）

https://aws.amazon.com/jp/iam/features/mfa/?nc1=h_ls

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/ec6f5c40-f701-dbb9-9579-1787cfb216f7.png)

あとは画面の指示通りにやれば簡単にできます。
まずはAWSコンソールのIAM **ユーザー** の **認証情報** -> **MFAデバイスの割り当て** から **管理** をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/c0d3b434-39b8-da48-6117-619d3b53219a.png)

**仮想MFAデバイス**を選択し、**続行**をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/7c407439-5b81-7cac-cc64-b6e2cf520f70.png)

**QRコードの表示**をクリックするとMFA設定用のQRコードが表示されるので、スマホにインストールした仮想MFAデバイスアプリ（私の場合Authyを起動して「Add Account」ボタンを押す）からQRを読み込みます。
読み込んだ後、スマホ画面に表示された2つの連続する数字を**MFAコード1、MFAコード2**に入力し、**MFAの割り当て**をクリックすると設定完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/cfe8e24a-4099-8c01-d753-4ae6485cd5e5.png)

IAMユーザーだけではなく、AWSアカウントのルートユーザーへのMFAデバイスの割り当てを忘れずに設定しましょう。
アプリ1つで複数ユーザーのMFAが設定できます。

### 3.むやみに認証情報を払い出さない

上記のMFAアクセス設定にしたとしても該当ユーザが認証情報を払い出しており、それが悪用された場合は何の意味もありません。よくGitHubに上げてしまい不正利用に利用されるのがこれなので注意しましょう。
具体的にはIAM **ユーザー** の **認証情報** -> **アクセスキー** が該当します。
この情報はむやみに払い出さない。CLIとかを使用するために払い出した場合、漏れないように十分注意することが重要です。
（とりあえず、このサンプル画面のように払い出されていなければ洩れる心配がないので安心です。**アクセスキーの作成**から認証情報を払い出した場合は注意しましょう）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/5c92d74d-ba23-0805-b913-9909bb6e6b49.png)

## AWS利用料金確認

最後はAWS利用料金の確認方法です。
今までの手順を実施していれば突然予定外の高額請求になることはないと思いますが、突然AWSから利用料金の請求が来た！時のために、利用料金の詳細把握方法は理解しておく必要があります。
方法は簡単で、**マイ請求ダッシュボード**から行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/1fefaa67-c8a8-35a4-5a6e-300022ebc47c.png)

画面右に表示される**料金明細**をクリック。
この表示内容は前日分まで表示されている印象です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/44b7c90d-5c39-1917-2b01-b1534ef29097.png)

後は表示されたAWSの各サービスから確認したいサービスの左端の三角部分をクリックすると詳細が確認できます。
これを確認し何にいくら料金がかかっているか把握し対策を立てましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/51c9f02d-d450-55d0-3a77-a91c8b20ec89.png)

このサンプル画面の場合、EC2の起動料金 Linux **$0.18** + Windows **$1.80**、EBS利用料金**$7.17**、ElasticIP割り当てたけど使っていなかった料金**$11.22**の合計**$20.37**とわかります。（Linuxと比較するとWindows高いですね^^;）
EC2作成して必要な時だけ起動していた時のサンプルです。
これでEC2は実は停止していてもディスクやEIPを保持しておくことだけで料金がかかることに気が付けます。以下参照^^;
[AWS初心者がEC2を最低限の利用料金で利用する　～EC2スナップショット作成・リカバリ手順～](https://qiita.com/fkooo/items/1254121c20b4593cc2f4 "AWS初心者がEC2を最低限の利用料金で利用する　～EC2スナップショット作成・リカバリ手順～")

## まとめ

3点書きましたが、とりあえず1つ目の予算設定をやるだけでもAWSを利用する心理的なハードルが下がると思うのでこれだけでもまずやることをオススメします。
次回以降、本格的に資格取得に向けていくつか触ってみたAWSサービスについて記載していこうと思います！

## 資格取得に向けてAWSサービスを実際に利用してみるシリーズの投稿一覧

[とりあえず30分でAWS利用料金の高額請求に備える～予算アラート設定・MFA・料金確認～](https://qiita.com/fkooo/items/67c53c997508e25605ea "とりあえず30分でAWS利用料金の高額請求に備える～予算アラート設定・MFA・料金確認～")（本記事）
[AWS ECSでDocker環境を試してみる](https://qiita.com/fkooo/items/d7d98e16e91921508450 "AWS ECSでDocker環境を試してみる")
[Amazon Cognitoを使ってシンプルなログイン画面を作ってみる](https://qiita.com/fkooo/items/660cab0090a80861155b "Amazon Cognitoを使ってシンプルなログイン画面を作ってみる")
[AWS NATゲートウェイを使ってプライベートサブネットからインターネットにアクセスする](https://qiita.com/fkooo/items/a474db0f3c2e72448d36 "AWS NATゲートウェイを使ってプライベートサブネットからインターネットにアクセスする")
[API GatewayをPrivateで作成してみる](https://qiita.com/fkooo/items/577831abd9803eb91b16 "API GatewayをPrivateで作成してみる")
[AWSのAI(Rekognition/Polly/Transcribe/Comprehend/Translate/Textract)サービスを試してみる](https://qiita.com/fkooo/items/10f75bafd08c60fc0a66 "AWSのAI(Rekognition/Polly/Transcribe/Comprehend/Translate/Textract)サービスを試してみる")
[AWS Lambda 同時実行数、エイリアス、環境変数とか実際の現場で使える機能を勉強してみる](https://qiita.com/fkooo/items/1b24e01252e145a378db "AWS Lambda 同時実行数、エイリアス、環境変数とか実際の現場で使える機能を勉強してみる")
[AWS Lambda SAMとは？～AWS SAMを使ってPythonのLambdaプログラムを簡単に作成する～](https://qiita.com/fkooo/items/2dc5ded5149379d7305a "AWS Lambda SAMとは？～AWS SAMを使ってPythonのLambdaプログラムを簡単に作成する～")
[Cloud9でAWS Amplifyの公式チュートリアルGetting startedをやってみる](https://qiita.com/fkooo/items/84f8f57e2317b0973496 "Cloud9でAWS Amplifyの公式チュートリアルGetting startedをやってみる")