IAM ロールを 1000 個作って遊んでいたら AWS 利用費が 50 ドルを超えていた話を JAWS-UG 初心者支部で LT しました
コンバンハ、千葉(幸)です。
2021/4/27 に、JAWS-UG 初心者支部 #36 が しくじり LT というテーマで開催されました。
イベントの概要はこちら。
AWS初心者がやってしまいがちな失敗談を募集します。
- 過去の失敗事例
- 初心者が落ち入りそうな事例
- 初心者が不安に感じそうだけど、XXすれば大丈夫だよ。というセーフティネット的な事例
- ハンズオンで高額請求きちゃった事例
失敗は成功のもと!!
みなさんの失敗例を、活かして頂ける場になれば幸いです!! 次回以降のハンズオン初心者のアドバイスになるネタがあれば嬉しいです!!
ホットなしくじりを持つ AWS 初心者のわたしは、ここぞとばかりに申し込み、登壇することにしました。
プロローグ
やぁ、僕はどこにでもいる平凡なエンジニア。ある日 急に、IAM ロールを 1000 個作りたいな、って思ったんだ。みんなもきっとそんなこと、あるよね。 IAM は利用費がかからないことは知っていたから、 IAM ロールを作ったり、ポリシーをアタッチしたり、削除したりしたんだ。え?そう、 IAM ロールを作ったり、ポリシーをアタッチしたり、削除したりしたんだ。
そんなある日、僕のもとに知らせが届いた。えぇっ!?今週の AWS 利用費が 65 ドルだって!? 今週はほとんど EC2 も動かしてないのに、一体どうして……。 IAM には利用費がかからないっていう僕の考えが間違っていたのか?僕の環境で、何が起こっているんだ━━!
全容
資料
補足
IAM は数少ないグローバルサービスであり、そのリソースである IAM ロールはグローバルリソースとして扱われます。
AWS Config はその記録対象としてグローバルリソースを含めるかどうかを選択できるのですが、今回のわたしの環境ではすべてのリージョンの Config でグローバルリソースの記録を有効化していました。
個々のリージョンでは 3 ドル弱の課金であっても、16リージョンの合計で 46 ドルにのぼる、という事態に陥っていました。
他にも Trail や GuardDuty も各リージョンで設定していたために、グローバルリソースに対するイベントとして捕捉対象となっていました。
Config のベストプラクティス
以下ブログに、20 個のベストプラクティスが記載されています。
3 つを抜粋すると、以下となっています。
- すべてのアカウントとリージョンで AWS Config を有効にする
- すべてのリソースタイプの設定変更を記録する
- 1つのリージョンでのみグローバルリソースを記録する
3番のプラクティスに則っていれば、今回の事象は避けられました。ここに則っていなかったことが悔やまれます。
一方で、2番のプラクティスは考慮が必要です。例えば AutoScaling 構成など、頻繁にリソースの置き換わりが発生する環境では料金が嵩むことになります。削除されていくリソースを記録する必要はあるのか?というのは立ち止まって考えたい部分です。
また、AWS アップデートにより記録可能なリソースタイプ増えた際に、「すべてのリソースを記録」が有効な場合にはそれも自動的に記録対象になります。
先日はコンテナ関連のサービスが記録対象になりました。頻繁にコンテナが増減する環境の場合、これまで発生していなかったコストが急に出現する、という事象になりかねません。
記録を残していくのはとても大事なことですが、コストが発生することを理解し、必要なものを取捨選択しましょう。
エピローグ
まったく、 Config が原因だったなんて……。完全に見落としてしまっていたな。 IAM の利用費が無料っていう考えは間違っていなかったんだけど、他にも利用費が発生するポイントを意識しなければいけなかった。もっとも、IAM ロールを 1000 個作ろうっていうその考え自体が間違っているんだけどね!(こいつは手厳しいや!)
でも、「無駄なことはしない」「常に最短距離を征く」「コスパを常に念頭に置く」、そんな器用な生き方ばかり、みんなができるわけじゃないよな。険しく聳り立つ僕のエンジニア人生は、始まったばかりだ━━!
「自制心」、それは人類が持つもっとも尊い美徳の一つです。 IAM ロールを 1000 個作ったりしないでください。よろしくお願いします。
以上、千葉(幸)がお送りしました。