📘

AWSリソースのコストをIAMユーザー単位で算出・管理する ~タグの強制・監視と可視化の手法~

に公開

はじめに

MEGAZONE株式会社の阿河です。

AWSを組織やチームで利用する場合、「誰がどのリソースを作成し、どれだけコストを消費しているのか」の把握をしたいという声をよく聞きます。
本記事では、「IAMユーザー単位でAWSリソースのコストを算出・管理する方法」を紹介します。

具体的には、タグを活用してリソース所有者を特定し、コストを可視化する仕組みを構築します。さらに、タグの適用漏れを防ぐためにタグの強制・監視の仕組みも取り入れ、運用負荷を抑えながら精度の高いコスト管理を実現します。

本記事で解決する課題

  • IAMユーザーごとにAWSリソースのコストを算出する方法がわからない
  • タグを使ってリソースの所有者を特定し、コストを管理したい
  • タグの付け忘れや削除を防ぐ仕組みを導入したい
  • 運用負荷を抑えたコスト管理を実現したい

目次

  1. IAMユーザーごとのAWSリソースコスト管理の基本方針
  2. コスト配分タグの活用
  3. IAMポリシーでタグなしリソース作成を禁止する
  4. 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. コスト配分タグの活用

コスト配分タグの基本

https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html
https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.html

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環境に適した方法で活用してみてください!

MEGAZONE株式会社 Tech Blog

Discussion