AWSタグ命名規則でマルチアカウント環境を整理するVPC設計の実践|チーム運用を統一する

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > AWS(Amazon Linux) > AWSタグ命名規則でマルチアカウント環境を整理するVPC設計の実践|チーム運用を統一する
「AWSのタグ命名規則、どう決めればいいか分からない」
「マルチアカウント環境でリソースが増えすぎて、本番・検証・開発の区別がタグだけでは追えなくなった」

AWSを本格運用し始めると、こうした壁に当たります。EC2・RDS・VPCなどリソース数が増えるほど、タグの命名規則が崩れたときのコストは大きくなります。コスト把握が属人化し、Terraformのfilterが動かなくなり、本番と検証の取り違えが起きます。

この記事では、AWSタグの命名規則を設計する方法を、VPC設計を例にして解説します。マルチアカウント環境での具体的な命名パターン、必須タグの定義、チーム全体の運用を統一するための仕組みまでカバーします。想定環境はAWS Organizations構成・VPC設計フェーズです。

この記事のポイント

・タグキーは小文字・ハイフン区切り(env / project / team)で統一するのが業界標準
・VPCのNameタグは vpc-{env}-{project}-{連番} 形式で環境と用途を即座に識別できる設計にする
・マルチアカウント環境では account-alias・ou-path を必須タグとして設計段階から定義する
・SCPとIAMポリシー条件キーを組み合わせて、タグなしリソースの作成を強制ブロックできる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

なぜAWSのタグ命名規則が重要なのか

AWSのタグは、EC2・RDS・VPCなどあらゆるリソースに付与できるメタデータです。キー(Key)と値(Value)のペアで管理し、1リソースに最大50件まで設定できます。

タグが「ないと困る理由」を3つ挙げます。

コスト配分が見えなくなる
AWSのCost Explorerはタグキーをコスト配分のディメンションとして使えます。project:webタグが付いていないリソースはどのプロジェクトのコストか区別できず、月次の請求書レビューが担当者の記憶頼りになります。

環境の取り違えが起きる
本番(prod)と検証(stg)のVPCが同一アカウントに存在する構成では、タグがないとオペレーターがどちらのリソースを操作しているか誤ります。特にaws CLIやTerraformでリソースIDを直接指定する作業では、タグによる目視確認が唯一の防線になります。

IaCのフィルタリングが機能しなくなる
Infrastructure as Code(IaC)では、タグをフィルタリング条件に使ってリソースを動的に特定します。Terraformのdata sourceでフィルタするとき、命名規則が「Env」「env」「environment」と揺れていると一致しません。

AWSタグの基本設計と命名規則の作り方

1. タグキーの設計方針

タグキーは小文字・ハイフン区切りで統一するのが業界標準です。大文字混在・スペースあり・全角は、スクリプト処理や他ツールとの連携でエラーの原因になります。

推奨するタグキーの例です。

・env:環境(prod / stg / dev)
・project:プロジェクト識別子(web / api / data / batch)
・team:担当チーム名(infra / app / security)
・owner:責任者のIDやメールアドレス
・cost-center:コストセンターコード(CC001 / CC002)
・managed-by:管理方法(terraform / cloudformation / manual)

避けるべき例も確認しておきます。

・Env(大文字始まり):チーム内でenvとEnvが混在する原因になる
・環境(日本語キー):CLI・APIでエスケープが必要になり、スクリプトが複雑になる
・Environment(長いキー名):Terraformのコードや設定ファイルで打ち間違いが増える

2. 命名規則のフォーマット

Nameタグのフォーマットは、リソース種別・環境・プロジェクト・識別子を組み合わせた形にします。

基本フォーマット:[リソース種別]-[env]-[project]-[識別子]

VPC設計での具体例を示します。

# VPC vpc-prod-web-01 ... 本番・webプロジェクトの第1VPC vpc-stg-web-01 ... 検証・webプロジェクトの第1VPC # サブネット(AZとtierを末尾に付加) subnet-prod-web-pub-1a ... 本番・パブリックサブネット・ap-northeast-1a subnet-prod-web-pri-1a ... 本番・プライベートサブネット・ap-northeast-1a subnet-prod-web-pri-1c ... 本番・プライベートサブネット・ap-northeast-1c # セキュリティグループ sg-prod-web-alb ... 本番・ALB用セキュリティグループ sg-prod-web-app ... 本番・アプリサーバー用セキュリティグループ sg-prod-web-rds ... 本番・RDS用セキュリティグループ

AWSのNameタグはマネジメントコンソールのリソース一覧に表示されます。このNameタグに上記フォーマットを適用することで、コンソール上でも一覧を見た瞬間に環境・用途が判別できます。

3. 必須タグの定義

組織内で「このタグは全リソースに必ず付ける」と決める必須タグセットを定義します。最小構成は次の5つです。

タグキー 値の例 用途
env prod / stg / dev 環境識別・コスト分離
project web / api / batch プロジェクト別コスト分析
team infra / app / security 担当チームへのアラート送付
managed-by terraform / manual IaC管理外リソースの把握
cost-center CC001 / CC002 部門別コスト按分

マルチアカウント環境でのVPCタグ設計

複数のAWSアカウントをOrganizationsで管理する構成では、アカウント単位を識別するタグが必要です。単一アカウントではenvタグだけで本番・検証を区別できますが、マルチアカウント構成では「どのアカウントのリソースか」が即座に分かる設計にします。

1. アカウント識別タグ

マルチアカウント環境での推奨タグを示します。

・account-alias:AWSアカウントエイリアス(example-prod / example-stg)
・ou-path:Organizations内のOU階層パス(/root/prod/web)
・account-type:アカウントの種別(production / staging / shared-services / security)

# aws cliでVPCにタグを付与する例(出力例) $ aws ec2 describe-vpcs --filters Name=tag:env,Values=prod --query 'Vpcs[*].{VpcId:VpcId,Name:Tags[?Key==`Name`]|[0].Value}' --output table --------------------------------------------------- | DescribeVpcs | +---------------------+---------------------------+ | Name | VpcId | +---------------------+---------------------------+ | vpc-prod-web-01 | vpc-0a1b2c3d4e5f67890 | | vpc-prod-api-01 | vpc-0f9e8d7c6b5a43210 | +---------------------+---------------------------+ # 出力例(環境により異なります)

2. 環境・用途の分類タグ(VPCレベル)

1アカウントに複数VPCを持つ構成では、VPCレベルのタグに環境とネットワーク用途を明示します。

# Terraformでタグを付与する例 resource "aws_vpc" "prod_web" { cidr_block = "10.0.0.0/16" enable_dns_hostnames = true enable_dns_support = true tags = { Name = "vpc-prod-web-01" env = "prod" project = "web" team = "infra" managed-by = "terraform" cost-center = "CC001" account-alias = "example-prod" } }

サブネットはパブリック・プライベートの区別、AZの識別、ルートテーブルの対応がNameタグだけで分かるように設計します。サブネット名の末尾に「pub」「pri」とAZコードを付けることで、コンソール一覧から即座に役割が判断できます。

3. コスト配分タグの有効化

AWS Billing & Cost ManagementでタグをActivateすると、Cost Explorerのフィルタリング軸になります。設定手順は次のとおりです。

# マネジメントコンソールでの操作手順 # 1. AWSマネジメントコンソール → 右上のアカウント名 → 請求とコスト管理 # 2. 左メニュー → Cost allocation tags # 3. 「User-defined cost allocation tags」タブを開く # 4. コスト配分に使いたいタグキー(env, project, team, cost-center)を選択 # 5. 「Activate」ボタンをクリック # # 有効化後24時間程度でCost Explorerのフィルタ項目として反映されます

チームで統一するためのタグ運用ルール

タグは設計するだけでは機能しません。チームに周知し、仕組みで強制することが重要です。

1. SCPでタグなし作成をブロックする

AWS Organizationsを使っている場合、SCPでタグキーが付いていないEC2やRDSの起動を拒否するポリシーを定義できます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireEnvTagOnEC2", "Effect": "Deny", "Action": [ "ec2:RunInstances" ], "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "Null": { "aws:RequestTag/env": "true" } } } ] }

このSCPをOUに適用すると、envタグなしでEC2インスタンスを起動しようとした操作は拒否されます(出力例: 「An error occurred (AccessDenied) when calling the RunInstances operation: ...」)。

2. Terraform variable validationで命名を強制する

IaCのコードレベルで必須タグをvariableとして定義し、許可された値以外を入力するとapplyが失敗する設計にします。

variable "env" { description = "デプロイ環境(prod / stg / dev のいずれか)" type = string validation { condition = contains(["prod", "stg", "dev"], var.env) error_message = "envはprod, stg, devのいずれかを指定してください。" } }

AWSの構成設計スキルをLinuxサーバー管理と組み合わせて体系的に学びたい方は、AWSとAmazon Linuxの基礎・実践スキルをまとめた入門ガイドもあわせて確認してください。

タグ設計でよくある失敗パターン

現場でよく見かける失敗を3つ挙げます。

命名規則が途中で変わる
最初に「Env」としていたキーが途中で「env」「environment」に分岐する典型パターンです。既存リソースへの一括タグ変更はaws ec2 create-tagsコマンドで対処できますが、リソース数が多いほど作業コストが増えます。設計時点でフォーマットをドキュメント化しておくことが最大の予防策です。

タグを後付けにする
EC2やRDSを先に作ってタグを後で付けようとすると、漏れが発生します。Terraformでリソース作成時に必ずタグブロックを記述する運用にすることで、この問題を防げます。

値が自由記入になっている
env: 本番、env: production、env: prodが混在するとCost Explorerの集計が崩れます。variable validationやEnum的な定義リストをチームに配布し、値の選択肢を統一します。

本記事のまとめ

AWSタグの命名規則設計と、マルチアカウント環境でのVPCタグ運用をまとめます。

やりたいこと 設計パターン
タグキーの命名統一 小文字・ハイフン区切り(env / project / team)
VPCリソースの識別 vpc-{env}-{project}-{連番} でNameタグを付与
マルチアカウントの分類 account-alias・ou-pathタグを全リソースに付与
コスト配分の有効化 Billing画面でUser-defined tagをActivate
タグなし作成の禁止 SCPとIAMポリシーのaws:RequestTag条件キーを組み合わせる
IaCでの命名強制 Terraform variable validationで許可値を制限する
タグの命名規則は、設計後に全員に周知し、仕組みで強制することが運用の要です。SCPやTerraform validationを活用して、命名ルールが崩れない環境を最初から作り込みましょう。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、AWSとAmazon Linuxの基礎から実践まで学べる入門コンテンツを無料で公開しています。コマンド操作からサーバー設計の考え方まで、現場で役立つ知識を体系的に学んでください。>>詳しくはこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。