AWSリソースのコストをIAMユーザー単位で算出・管理する ~タグの強制・監視と可視化の手法~
はじめに
MEGAZONE株式会社の阿河です。
AWSを組織やチームで利用する場合、「誰がどのリソースを作成し、どれだけコストを消費しているのか」の把握をしたいという声をよく聞きます。
本記事では、「IAMユーザー単位でAWSリソースのコストを算出・管理する方法」を紹介します。
具体的には、タグを活用してリソース所有者を特定し、コストを可視化する仕組みを構築します。さらに、タグの適用漏れを防ぐためにタグの強制・監視の仕組みも取り入れ、運用負荷を抑えながら精度の高いコスト管理を実現します。
本記事で解決する課題
- IAMユーザーごとにAWSリソースのコストを算出する方法がわからない
- タグを使ってリソースの所有者を特定し、コストを管理したい
- タグの付け忘れや削除を防ぐ仕組みを導入したい
- 運用負荷を抑えたコスト管理を実現したい
目次
- IAMユーザーごとのAWSリソースコスト管理の基本方針
- コスト配分タグの活用
- IAMポリシーでタグなしリソース作成を禁止する
- AWS Config を活用したタグチェックの仕組み
1. IAMユーザーごとのAWSリソースコスト管理の基本方針
本記事では、タグを活用してIAMユーザーごとのコストを可視化する仕組みを構築します。
具体的には、以下の3つの要素を組み合わせて実現します。
1. Ownerタグを活用してリソースの所有者を明確化
- 各IAMユーザーが作成したリソースに、「Owner」タグを付与し、リソースの所有者を明示する
- Ownerタグのフォーマットは Owner=[※IAMユーザー名] で統一し、一貫性を持たせる
- AWSのコスト配分タグ(Cost Allocation Tags) に「Owner」タグを登録し、Cost Explorerで分析できるようにする
2. IAMポリシーで「Owner」タグの強制適用
- IAMユーザーがOwnerタグなしでリソースを作成できないように制限
- 今回はテストとしてEC2のリソース作成時にタグを必須化
3. AWS Configを活用したタグ監視
- タグが削除されていないかを定期的にチェック
2. コスト配分タグの活用
コスト配分タグの基本
AWSでは、リソースにタグを付与することで、コストの分析や管理が可能になります。
特に、コスト配分タグ(Cost Allocation Tags)を有効化すると、Cost Explorerでタグごとのコストを可視化・分析できます。
- IAMユーザーが作成したリソースに「Owner」タグを付与(形式: Owner=[※IAMユーザー名])
- Cost Allocation Tags に「Owner」タグを登録し、タグ単位でコストを集計
- ユーザー定義のタグを作成してリソースに適用した後、アクティブ化のためにタグキーがコスト配分タグページに表示されるまでに最大で24時間かかる場合があります。
- Cost ExplorerでIAMユーザーごとのコストを可視化
コスト配分タグの設定手順
以下の手順で、「Owner」タグをコスト配分タグとして有効化 します。
-
IAMユーザーが作成したリソースに 「Owner」タグを適用 します。
-
「Owner」タグをコスト配分タグとして登録
- Billing and Cost Managementコンソールを開く
- 左側メニューから「Cost Allocation Tags」を選択
- 「Owner」タグを検索し、「有効化」 をクリック
- 設定完了後、AWSがタグデータを処理
-
Cost Explorerで「Owner」タグのコストを可視化
- コスト配分タグの有効化後、Cost ExplorerでIAMユーザーごとのコストを可視化できます。
- Cost Explorer を開く
- 「レポートを作成」ボタンをクリック
- フィルターで「Owner」タグを選択(Owner=[※IAMユーザー名])
- 「グループ化」メニューで 「タグ」→「Owner」 を選択
- 適用をクリックし、ユーザーごとのコストを表示
3. IAMポリシーでタグなしリソース作成を禁止する
IAMユーザーが「Owner」タグなしでリソースを作成することを禁止するため、IAMポリシーを設定します。
これにより、リソース作成時に必ずOwnerタグを付与することを強制できます。
ポリシーの概要
制限対象のAWSサービス
- EC2(インスタンス作成時)
挙動
- 「Owner」タグが 付与されていないリソースの作成を拒否
- ユーザーが適切なタグを指定すればリソース作成可能
ポリシーの内容
以下のIAMポリシーを作成し、対象のIAMユーザーまたはIAMグループに適用します。
※別途Allow条件が付与されている前提
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyRunInstancesWithoutTag",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"Null": {
"aws:RequestTag/Owner": "true"
}
}
}
]
}
- 作成したポリシーを、対象のIAMユーザーまたはグループにアタッチ
動作確認
- タグなしでリソースを作成(失敗する)
aws ec2 run-instances --image-id ami-0599b6e53ca798bb2 --count 1 --instance-type t3.micro
- Ownerタグを付与して、リソース作成(成功する)
aws ec2 run-instances --image-id ami-0599b6e53ca798bb2 --count 1 \
--instance-type t3.micro --tag-specifications \
'ResourceType=instance,Tags=[{Key=Owner,Value=xxx}]'
4. AWS Config を活用したタグチェックの仕組み
IAMポリシーでリソース作成時のタグ付与を強制しましたが、作成後にタグが削除される可能性があります。
これを防ぐために、AWS Configを活用してタグを定期チェックする仕組みを構築します。
AWS Config ルールの作成
AWS Config の「required-tags」マネージドルールを利用し、特定のリソースにOwnerタグが付いているかを定期監視します。
Configルールの作成
AWS マネジメントコンソールで「AWS Config」を開く
- ルールを追加
- 「Aws managed rule」から「required-tags」を選択
- Scope of chages: Resouces
- Resource types: EC2 Instance
- 必須タグキー: Owner
- 「保存」してルールを有効化
- 私の環境では3台のEC2インスタンスが立っており、うちOwnerタグは2台にしかついていませんでした。想定通りの挙動です。
動作確認(違反検出時)
① EC2インスタンスのOwnerタグを手動で削除
② AWS Config の「コンプライアンス」ステータスを確認
- 「AWS Config」→「ルール」画面を開く
- required-tags のステータスが 「Noncompliant(非準拠)」 になっていることを確認
おわりに
本記事では、IAMユーザーごとのAWSリソースコストを可視化・管理する仕組みを構築しました。
この仕組みにより、IAMユーザー単位でのコスト管理が可能になり、不要なリソースのコストを明確化できるようになります。
また、タグの適用漏れを防ぐことで、運用負荷を最小限に抑えながら適切なコスト管理を実現できます。
ぜひ、組織のAWS環境に適した方法で活用してみてください!
Discussion