🚧 IAM パーミッションバウンダリー

「ここまでは許可するよ!」という権限の最大範囲を設定する仕組み

🎯 パーミッションバウンダリーとは?

パーミッションバウンダリー = 権限の「上限」を決める柵(フェンス)

IAMポリシーで「これができるよ」と権限を与えても、
パーミッションバウンダリーで「でもここまでね」と 上限を設定 できます。

🔑 ポイント: 両方で許可された権限だけが実際に使える!

🏠 身近な例えで理解しよう!

🎡

遊園地の例え

IAMポリシー = 買ったチケット
「ジェットコースターに乗れる」「観覧車に乗れる」

パーミッションバウンダリー = 年齢・身長制限
「身長120cm以上限定」「18歳以上限定」

→ チケットを持っていても、制限をクリアしないと乗れない!

🏢

会社のセキュリティカードの例え

IAMポリシー = 部署ごとのアクセス権
「経理部なので経理フロアに入れる」

パーミッションバウンダリー = ビル全体のセキュリティルール
「でも夜間は全フロア立入禁止」

→ 部署の権限があっても、ビル全体のルールを超えられない!

👶

子供の行動範囲の例え

IAMポリシー = 子供がやりたいこと
「公園で遊びたい」「友達の家に行きたい」

パーミッションバウンダリー = 親が決めたルール
「この町内だけね」「暗くなる前に帰ってきてね」

→ やりたいことがあっても、親のルールの範囲内だけ!

💳

クレジットカードの例え

IAMポリシー = カードで買いたいもの
「パソコンを買いたい」「旅行代金を払いたい」

パーミッションバウンダリー = 利用限度額
「月30万円まで」

→ 買いたいものがあっても、限度額を超えたら買えない!

📊 権限の計算方法を図解!

📋 IAMポリシー
(与えられた権限)
🚧 バウンダリー
(許可される上限)
✅ 実際に使える権限
(両方の重なり)

🔑 超重要ポイント

パーミッションバウンダリーは 「AND条件」 で評価されます。

つまり、IAMポリシーで許可されていて、 かつ パーミッションバウンダリーでも許可されている場合のみ、その権限が有効になります。

実効権限 = IAMポリシー ∩ バウンダリー
(両方で許可された部分だけ)

🔄 権限チェックの流れ

👤
ユーザーがAPI実行
📋
IAMポリシー
チェック
🚧
バウンダリー
チェック
両方OK
→ 許可!
⚠️ どちらか一方でも拒否されると → アクセス拒否

💡 どんな時に使うの?

👨‍💻

開発者への権限委任

開発者に「自分でIAMロールを作成できる」権限を与えたいけど、 管理者権限は絶対に作らせたくない 場合に使用。 バウンダリーで「Admin権限は除外」と設定しておけば安心!

🏗️

マルチアカウント環境

複数のAWSアカウントを持つ組織で、各アカウントの管理者が 自由にIAMを作れるけど、組織のルールは守らせたい 場合。 バウンダリーで「特定リソースへのアクセスは禁止」と制限!

🛡️

セキュリティガードレール

「本番環境のデータベースは絶対に削除できない」など、 取り返しのつかない操作を防ぐ 安全装置として利用。 どんな権限を持っていても、バウンダリーで守られる!

📝 具体的なシナリオで理解しよう

🧑‍💻

シナリオ:開発者の太郎さん

📋 IAMポリシー(与えられた権限)

  • ✅ S3のすべての操作
  • ✅ EC2のすべての操作
  • ✅ RDSのすべての操作
  • ✅ IAMロールの作成

🚧 パーミッションバウンダリー(上限)

  • ✅ S3のすべての操作
  • ✅ EC2のすべての操作
  • ❌ RDSは読み取りのみ
  • ❌ IAMロール作成は禁止

✅ 太郎さんが実際にできること

  • ✅ S3のすべての操作 → OK (両方で許可)
  • ✅ EC2のすべての操作 → OK (両方で許可)
  • ⚠️ RDSは読み取りのみ → 制限あり (バウンダリーで制限)
  • ❌ IAMロール作成 → 不可 (バウンダリーで禁止)

📊 IAMポリシーとバウンダリーの違い

項目 📋 IAMポリシー 🚧 パーミッションバウンダリー
役割 権限を「与える」 権限の「上限」を設定
たとえ お小遣い(使える金額) 貯金箱の蓋(取り出せる上限)
設定対象 ユーザー、グループ、ロール ユーザー、ロールのみ
必須? はい(権限がないと何もできない) いいえ(オプション)
単独で権限付与 できる できない(制限のみ)
主な用途 日常的な権限管理 委任・ガードレール

💻 実際のポリシー例

developer-boundary-policy.json
{ "Version" : "2012-10-17" , "Statement" : [ { "Sid" : "AllowedServices" , "Effect" : "Allow" , "Action" : [ "s3:*" , "ec2:*" , "lambda:*" , "dynamodb:*" , "cloudwatch:*" , "logs:*" ], "Resource" : "*" }, { "Sid" : "DenyDangerousActions" , "Effect" : "Deny" , "Action" : [ "iam:CreateUser" , "iam:DeleteUser" , "iam:CreateRole" , "organizations:*" , "account:*" ], "Resource" : "*" } ] }
attach-boundary.sh
# 1. バウンダリーポリシーを作成 aws iam create-policy \ --policy-name DeveloperBoundary \ --policy-document file://developer-boundary-policy.json # 2. ユーザーにバウンダリーをアタッチ aws iam put-user-permissions-boundary \ --user-name taro-developer \ --permissions-boundary arn:aws:iam::123456789012:policy/DeveloperBoundary # 3. ロールにバウンダリーをアタッチ aws iam put-role-permissions-boundary \ --role-name DeveloperRole \ --permissions-boundary arn:aws:iam::123456789012:policy/DeveloperBoundary # 4. バウンダリーの確認 aws iam get-user --user-name taro-developer \ --query 'User.PermissionsBoundary'
developer-role-with-boundary.yaml
AWSTemplateFormatVersion: '2010-09-09' Description: Developer Role with Permission Boundary Resources: # バウンダリーポリシー DeveloperBoundaryPolicy: Type: AWS::IAM::ManagedPolicy Properties: ManagedPolicyName: DeveloperBoundary PolicyDocument: Version: '2012-10-17' Statement: - Sid: AllowedServices Effect: Allow Action: - s3:* - ec2:* - lambda:* Resource: '*' - Sid: DenyDangerous Effect: Deny Action: - iam:*User* - iam:*Role* - organizations:* Resource: '*' # バウンダリー付きのロール DeveloperRole: Type: AWS::IAM::Role Properties: RoleName: DeveloperRole PermissionsBoundary : !Ref DeveloperBoundaryPolicy AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: AWS: !Sub 'arn:aws:iam::${AWS::AccountId}:root' Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/PowerUserAccess

⭐ ベストプラクティス

🎯 最小権限の原則を維持

バウンダリーがあるからといって、IAMポリシーを緩くしない。 両方で最小権限を心がけることで、二重の安全を確保!

📋 命名規則を統一

バウンダリーポリシーは「〇〇-Boundary」など、 一目で分かる命名規則を使用。管理が楽になる!

🔄 継承を活用

ロールを作成する際に、バウンダリーも一緒に設定するルールを作る。 CloudFormationやTerraformでテンプレート化がおすすめ!

📊 定期的な監査

バウンダリーが設定されていないユーザー/ロールがないか、 AWS ConfigやIAM Access Analyzerで定期チェック!

⚠️ よくある落とし穴・注意点

  • 🚨
    バウンダリー単独では権限を与えられない
    バウンダリーは「上限」を設定するだけ。IAMポリシーも必要!
  • 🔒
    グループには設定できない
    バウンダリーはユーザーとロールにのみ設定可能。グループはNG!
  • 🔄
    バウンダリーを外すには権限が必要
    バウンダリー自体の変更・削除権限を適切に管理しないと、設定した意味がなくなる!
  • 📝
    リソースベースポリシーには影響しない
    S3バケットポリシーなど、リソース側のポリシーはバウンダリーの影響を受けない!

❓ よくある質問

💭 SCPとバウンダリーの違いは?

+

SCP(サービスコントロールポリシー) はOrganizations全体に適用される組織レベルの制限。 バウンダリー は個別のユーザー/ロールに設定する個人レベルの制限。

例えると、SCPは「会社全体のルール」、バウンダリーは「個人の行動制限」です。 両方使えば、組織と個人の両方でガードレールを設定できます!

💭 バウンダリーを設定しないとどうなる?

+

バウンダリーを設定しなくても、普通にIAMは動作します。 その場合、IAMポリシーで許可された権限がそのまま有効になります。

ただし、「委任」シナリオ(開発者が自分でIAMを作れる場合など)では、 バウンダリーがないと権限昇格のリスクがあるので注意!

💭 複数のバウンダリーを設定できる?

+

いいえ、1つのユーザー/ロールには 1つのバウンダリー しか設定できません。

複数の制限が必要な場合は、1つのバウンダリーポリシー内に すべての条件をまとめて記述する必要があります。

💭 バウンダリーでAllow/Denyどちらを使うべき?

+

基本は 「許可するものをAllowで列挙」 するスタイルがおすすめ。 これにより、明示的に許可していないサービスは自動的に使えなくなります。

ただし、特定の危険な操作だけを確実にブロックしたい場合は、 Denyを追加で使用するのも有効です。

Created by SSuzuki1063

AWS SAP Learning Resources