コンテンツにスキップ
LinkedInX

権限管理とRBAC

約5分

対象読者: Webアプリケーション開発の基礎を理解している方
前提知識: エンタープライズシステム入門 を読んでいること

権限管理(Access Control)とは、システム内のリソースに対して「誰が」「何を」「どのように」操作できるかを制御する仕組みです。適切な権限管理がなければ、誤ったユーザーが機密データにアクセスし、情報漏洩や不正操作が発生します。

エンタープライズシステムで使われる主要なアクセス制御モデルは4種類あります。

DAC(Discretionary Access Control)は、リソースの所有者が自由にアクセス権を設定できるモデルです。Linuxのファイルパーミッション(chmod)が代表例です。柔軟ですが、所有者の判断ミスがセキュリティリスクに直結します。

MAC(Mandatory Access Control)は、システムが一元的にアクセスポリシーを強制するモデルです。「秘密」「極秘」などの機密レベルをラベルとして付与し、対応するクリアランスを持つユーザーのみがアクセスできます。政府・軍事システムで採用されます。

3. RBAC(ロールベースアクセス制御)

Section titled “3. RBAC(ロールベースアクセス制御)”

RBAC(Role-Based Access Control)は、ユーザーにロール(役割)を割り当て、ロールに権限を付与するモデルです。エンタープライズ環境で最も広く採用されています。

4. ABAC(属性ベースアクセス制御)

Section titled “4. ABAC(属性ベースアクセス制御)”

ABAC(Attribute-Based Access Control)は、ユーザー・リソース・環境の属性に基づいてポリシーを評価するモデルです。「部門=営業 AND 地域=東京 AND 時間帯=業務時間内」のような細かい制御が可能ですが、実装の複雑さが増します。

RBACは「ユーザー → ロール → 権限 → リソース」の4層構造で表現されます。

graph LR
    U[ユーザー: Alice] --> R[ロール: admin]
    R --> P1[権限: read]
    R --> P2[権限: write]
    R --> P3[権限: delete]
    P1 --> Res[リソース: customer-data]
    P2 --> Res
    P3 --> Res

各レイヤーの役割:

レイヤー説明
ユーザー実際の人間またはサービスアカウントalice@example.com
ロール職責や機能を表す名前admin・editor・viewer
権限具体的な操作の許可read・write・delete・execute
リソース操作対象のデータやサービスcustomer-data・invoices

最小権限の原則(Principle of Least Privilege)とは、ユーザーやサービスに対して、業務遂行に必要な最小限の権限のみを付与するという設計原則です。

具体例:

  • 閲覧のみ必要な経理担当には read 権限のみ付与(write は不要)
  • バックアップ用スクリプトには対象バケットへの読み取り権限のみ付与
  • CIパイプラインには本番DBへの書き込み権限を与えない
比較項目DACMACRBACABAC
複雑さ
柔軟性
監査のしやすさ
エンタープライズ適合中(特殊用途)中〜高
主な採用場面個人PC・ファイルシステム政府・軍事一般企業システム金融・医療・クラウド

RAG(Retrieval-Augmented Generation)システムでは、ユーザーが検索できるドキュメントをRBACで制御します。

  • 「一般社員」ロール: 社内規定・FAQのみ検索可
  • 「営業担当」ロール: 顧客情報・契約書も検索可
  • 「経営層」ロール: 財務データも検索可

ドキュメントにメタデータとして access_level を付与し、検索クエリにユーザーのロール情報を含めてフィルタリングします。

LLM APIへのアクセスにはスコープを設定します。

スコープ対象ユーザー許可操作
inference:read一般ユーザー推論リクエストのみ
inference:admin開発チームモデル設定変更・ログ閲覧
billing:read経営層使用量・コスト確認

高コストモデル(例: claude-opus)へのアクセスを特定ロールに制限し、コスト管理とセキュリティを両立できます。

フラットロール構成(小規模向け)

Section titled “フラットロール構成(小規模向け)”
admin → 全権限
editor → 読み書き
viewer → 読み取りのみ

機能別ロール構成(中規模向け)

Section titled “機能別ロール構成(中規模向け)”
sales-manager → 顧客データ書き込み
sales-rep → 顧客データ読み取り
engineering → コードリポジトリ・インフラ
hr-admin → 人事データ

階層ロール構成(大規模向け)

Section titled “階層ロール構成(大規模向け)”

上位ロールが下位ロールの権限を継承します。例: senior-engineerengineer の全権限に加え、本番環境デプロイ権限を持つ。

  • ロールの爆発(Role Explosion): ロールが細分化されすぎて管理不能になる。汎用ロールから始め、必要に応じて細分化する
  • adminロールの乱用: 「とりあえずadminで」という運用は最小権限の原則に違反する
  • サービスアカウントの見落とし: CI/CDパイプラインやバックグラウンドジョブのアカウントにも最小権限を適用する
  • 権限の定期レビュー不足: 異動・退職後も不要な権限が残り続ける

権限は付与したままにせず、定期的なレビューが必要です。

  • 四半期ごとに未使用権限をレビュー
  • 退職者アカウントの即時無効化フローを整備
  • 最後のアクセス日時を記録し、90日以上未使用のアカウントをレビュー

Q: ロールはいくつ作ればよいですか?

最初は3〜5個(admin・editor・viewer など)から始め、実際の業務フローに合わせて追加するのが推奨です。50を超えるとロール爆発のリスクが高まります。AWS IAMのベストプラクティスでも「必要最小限のロール数」を推奨しています。

Q: 一時的な権限昇格(管理者作業など)はどう扱いますか?

JIT(Just-In-Time)アクセスと呼ばれるパターンを使います。必要な時間だけ権限を付与し、作業完了後に自動で失効させます。AWS IAM Identity CenterやOktaでこの仕組みを実装できます。監査ログに昇格理由と時刻を必ず記録します。

Q: RBACとABACはどう使い分けますか?

基本的なアクセス制御にはRBACが適しています。「特定の時間帯のみ」「特定の地域からのアクセスのみ」のような動的なポリシーが必要な場合はABACを検討します。多くの場合、RBACをベースにABACの要素を部分的に組み合わせるハイブリッド構成が実用的です。

このページの外部仕様・背景情報は、参考文献を参照してください。[1][2]

  1. GitHub, GitHub Docs
  2. NIST, AI Risk Management Framework
クイズ