🏷️ AWS ABAC 完全ガイド

PrincipalTag vs ResourceTag - 「誰が」と「何を」のタグで完璧なアクセス制御!

🏢 オフィスビルのセキュリティで例えると超わかりやすい!

ABAC(属性ベースアクセス制御)は「タグの一致」でアクセス許可を決める仕組み!

オフィスビルに入るとき、あなたの 社員証 部屋のドア 両方に
同じ「部署タグ」が付いていたら入室OK、というイメージです。

PrincipalTag :あなた(社員)に付いているタグ 👤
ResourceTag :リソース(部屋)に付いているタグ 🚪

この2つを比較してアクセス制御を実現します!✨

🎯 そもそもABACって何?

📋

従来のRBAC(ロールベース)

🔧 仕組み:
「誰が」「何に」アクセスできるかを 個別に定義

😓 問題点:
• 新しいリソースができるたびにポリシー更新
• 新しいユーザーが増えるたびにロール割り当て
• ポリシーが増えすぎて管理が大変!
❌ 例:
「田中さんは EC2-001 にアクセスできる」
「佐藤さんは EC2-002 にアクセスできる」
→ 100人×100リソース = 管理地獄!
🏷️

新しいABAC(属性ベース)

🔧 仕組み:
「タグが一致したら」アクセスOKと ルールで定義

😊 メリット:
• 新リソースにタグを付けるだけで自動適用
• 新ユーザーにタグを付けるだけで自動適用
• ポリシーは1つでOK!超シンプル!
✅ 例:
「ユーザーのDepartmentタグとリソースの
Departmentタグが一致したらアクセスOK」
→ これ1つで全員・全リソースをカバー!

🏢 オフィスビルのセキュリティシステムで理解しよう!

👤

PrincipalTag
「あなたの社員証のタグ」

🎭 シチュエーション:
あなたは営業部所属の社員。社員証には
「Department: Sales」 というタグが付いています。
🔍 AWSでの意味:
IAMユーザー/ロール に付けるタグ
• 「この人は誰?どんな属性?」を表す
• aws:PrincipalTag で参照
📍 タグを付ける場所:
• IAMユーザー
• IAMロール
• フェデレーテッドユーザー(SAML/OIDC)
🚪

ResourceTag
「部屋のドアのタグ」

🎭 シチュエーション:
営業部の会議室のドアには
「Department: Sales」 というタグが付いています。
🔍 AWSでの意味:
AWSリソース (EC2/S3等)に付けるタグ
• 「このリソースは何用?誰の持ち物?」を表す
• aws:ResourceTag で参照
📍 タグを付ける場所:
• EC2インスタンス
• S3バケット
• RDS、Lambda、その他AWSリソース

🔓 入室の仕組み

社員証のタグ (PrincipalTag)と ドアのタグ (ResourceTag)が
一致したら入室OK!🎉

営業部の社員(Department: Sales)は
営業部の部屋(Department: Sales)に入れる!

❌ 経理部の部屋(Department: Finance)には入れない!

👤
PrincipalTag
アクセスする「人」の属性
🎯 役割
アクセスを 要求する側 (ユーザー/ロール)に付与されたタグ。「この人はどんな属性を持っているか」を定義します。
📝 構文
aws:PrincipalTag/タグキー

例:aws:PrincipalTag/Department
例:aws:PrincipalTag/Project
例:aws:PrincipalTag/CostCenter
⚙️ 設定場所
• IAMユーザーの「タグ」タブ
• IAMロールの「タグ」タブ
• SAML/OIDCのセッションタグ
• AssumeRole時のタグ
💡 ポイント
• ユーザー作成時/ロール作成時に設定
• 人事異動時はタグを変更するだけ
• フェデレーションでも使える
アイデンティティの属性を表す
🚪
ResourceTag
アクセスされる「リソース」の属性
🎯 役割
アクセスを 受ける側 (AWSリソース)に付与されたタグ。「このリソースはどんな属性を持っているか」を定義します。
📝 構文
aws:ResourceTag/タグキー

例:aws:ResourceTag/Department
例:aws:ResourceTag/Project
例:aws:ResourceTag/Environment
⚙️ 設定場所
• EC2インスタンスのタグ
• S3バケットのタグ
• RDSインスタンスのタグ
• その他AWSリソースのタグ
💡 ポイント
• リソース作成時に設定
• リソースの所有者/用途を示す
• コスト配分にも活用可能
リソースの属性を表す

🔄 ABACの動作フロー

👤
ユーザー
PrincipalTag:
Department=Sales
➡️
📋
IAMポリシー
タグ一致を
チェック
➡️
🚪
リソース
ResourceTag:
Department=Sales
➡️
アクセス許可!

📊 タグ一致の判定パターン

一致 → 許可
Principal: Sales
Resource: Sales
不一致 → 拒否
Principal: Sales
Resource: Finance
⚠️
タグなし → 拒否
Principal: Sales
Resource: (なし)

📊 PrincipalTag vs ResourceTag 完全比較

項目 PrincipalTag ResourceTag
対象 IAMユーザー / IAMロール AWSリソース(EC2、S3など)
表すもの 「誰が」アクセスするか 「何に」アクセスするか
構文 aws:PrincipalTag/キー aws:ResourceTag/キー
設定タイミング ユーザー/ロール作成時 リソース作成時
例え話 社員証のタグ 🪪 部屋のドアのタグ 🚪
変更頻度 人事異動時など リソース再割り当て時など
典型的なタグ Department, Team, Role Department, Project, Environment
管理者 IAM管理者 / HR連携 リソース管理者 / 開発チーム

📝 実際のIAMポリシー例

👤 PrincipalTagを使った条件
// ユーザーのDepartmentタグが "Engineering" の場合のみ許可 { "Version" : "2012-10-17" , "Statement" : [{ "Effect" : "Allow" , "Action" : "ec2:*" , "Resource" : "*" , "Condition" : { "StringEquals" : { "aws:PrincipalTag/Department" : "Engineering" } } }] }
🚪 ResourceTagを使った条件
// リソースのEnvironmentタグが "Development" の場合のみ許可 { "Version" : "2012-10-17" , "Statement" : [{ "Effect" : "Allow" , "Action" : "ec2:*" , "Resource" : "*" , "Condition" : { "StringEquals" : { "aws:ResourceTag/Environment" : "Development" } } }] }
⭐ 両方を組み合わせた最強パターン(タグ一致)
// ユーザーのDepartmentタグとリソースのDepartmentタグが一致する場合のみ許可 // これがABACの真骨頂! { "Version" : "2012-10-17" , "Statement" : [{ "Effect" : "Allow" , "Action" : [ "ec2:StartInstances" , "ec2:StopInstances" , "ec2:TerminateInstances" ], "Resource" : "*" , "Condition" : { "StringEquals" : { // 🎯 ここがポイント!PrincipalTagの値とResourceTagの値を比較 "aws:ResourceTag/Department" : "${aws:PrincipalTag/Department}" } } }] } // 営業部(Department: Sales)のユーザーは // 営業部(Department: Sales)のEC2だけ操作できる!

🔑 よく使う条件キー一覧

👤 PrincipalTag関連の条件キー

aws:PrincipalTag/タグキー
プリンシパル(ユーザー/ロール)に付いたタグの値をチェック
aws:PrincipalAccount
リクエスト元のAWSアカウントIDをチェック
aws:PrincipalArn
プリンシパルのARNをチェック
aws:PrincipalOrgID
Organizations組織IDをチェック
aws:PrincipalType
プリンシパルの種類(User, Role等)をチェック

🚪 ResourceTag関連の条件キー

aws:ResourceTag/タグキー
リソースに付いたタグの値をチェック
aws:ResourceAccount
リソースが属するAWSアカウントIDをチェック
aws:ResourceOrgID
リソースが属する組織IDをチェック
ec2:ResourceTag/タグキー
EC2固有のリソースタグ(サービス固有キー)
s3:ResourceTag/タグキー
S3固有のリソースタグ(サービス固有キー)

💼 実践ユースケース

🏢

部署別アクセス制御

営業部、開発部、経理部それぞれのメンバーが 自分の部署のリソースだけ にアクセスできるようにする。
PrincipalTag/Department ResourceTag/Department
📁

プロジェクト別制御

プロジェクトAのメンバーはプロジェクトAのリソースだけ、プロジェクトBのメンバーはプロジェクトBだけにアクセス。
PrincipalTag/Project ResourceTag/Project
🌍

環境別アクセス

開発者は開発環境だけ、SREは本番環境も含めてアクセスできるように制御。
PrincipalTag/AccessLevel ResourceTag/Environment
💰

コストセンター制御

各コストセンターの責任者が 自分のコストセンターのリソースだけ 管理できるようにする。
PrincipalTag/CostCenter ResourceTag/CostCenter
👥

マルチテナント分離

SaaS環境で、各テナントのユーザーが 自分のテナントのデータだけ にアクセスできるようにする。
PrincipalTag/TenantID ResourceTag/TenantID
🔐

機密レベル制御

クリアランスレベルの高いユーザーだけが機密データにアクセスできるようにする。
PrincipalTag/Clearance ResourceTag/Sensitivity
💡 ABACを成功させるコツ
1. タグ命名規則を統一する:
Department/department/dept など表記ゆれを防ぐため、 大文字小文字も含めて統一 しよう。PascalCase推奨!

2. タグの必須化を徹底:
リソース作成時にタグを必須にするSCP/ポリシーを設定。タグなしリソースはABACで制御できない!

3. タグの値を標準化:
「営業部」「営業」「Sales」など値がバラバラだと一致しない。 マスターデータを定義 しよう。

4. 段階的に導入:
いきなり全社適用せず、まず1つのプロジェクトや部署で試して、問題がないことを確認してから拡大。

5. IAM Access Analyzerを活用:
意図しないアクセスがないか定期的にチェック。ABACポリシーの検証にも使える!
⚠️ ABACの注意点・よくある落とし穴
1. タグ変更権限の管理:
ユーザーが 自分のPrincipalTagを変更できると 、任意のリソースにアクセスできてしまう!タグ変更権限は厳密に制限しよう。

2. リソースタグの保護:
ユーザーが リソースのタグを変更できると 、アクセス制御を迂回できる。タグ変更アクションも制限が必要!

3. タグなしリソースへのアクセス:
ResourceTagがないリソースは条件にマッチしない。 明示的な拒否ポリシー も検討しよう。

4. サービスによるタグサポートの違い:
すべてのAWSサービス/アクションがResourceTagをサポートしているわけではない。事前に確認が必要!

5. タグの伝播:
Auto Scalingで起動したEC2など、自動作成されるリソースにタグが 正しく伝播されるか 確認しよう。

✅ ABACベストプラクティス

1 タグ戦略を文書化

どのタグキーを使うか、値の規則は何か、誰がタグを管理するかを明文化。全チームで共有しよう。

2 AWS Organizationsタグポリシー活用

組織全体でタグキーの大文字小文字、許可される値を強制。表記ゆれを防止できる。

3 SCPでタグ必須化

リソース作成時に特定のタグがないと拒否するSCPを設定。タグ漏れを防止。

4 定期的なタグ監査

AWS Configルールでタグ付けコンプライアンスを監視。非準拠リソースを検出・修正。

5 最小権限の原則

ABACでもアクションは必要最小限に。「ec2:*」ではなく具体的なアクションを指定。

6 テスト環境で検証

本番適用前にテスト環境でポリシーを検証。IAM Policy Simulatorも活用しよう。

🎓 まとめ

🏢 オフィスビルのセキュリティ = ABAC

社員証のタグ(PrincipalTag)と部屋のドアのタグ(ResourceTag)が
一致したらアクセスOK! というシンプルな仕組み

👤
PrincipalTag

「誰が」アクセスするか
ユーザー/ロールに付ける
社員証のタグ🪪
🚪
ResourceTag

「何に」アクセスするか
AWSリソースに付ける
部屋のドアのタグ🚪
🎯 ABACの黄金公式:

"aws:ResourceTag/Department": "${aws:PrincipalTag/Department}"

→ タグが一致したら許可、一致しなければ拒否!

ポリシーは1つでOK!新しいユーザーやリソースが増えても
タグを付けるだけで自動的にアクセス制御が適用される!🎉

ABACを使いこなせば、 スケーラブルで管理しやすい アクセス制御が実現できます!
まずは1つのタグ(Department等)から始めて、徐々に拡大していこう!🚀

Created by SSuzuki1063

AWS SAP Learning Resources