RBAC

ロール (役割) に基づいてアクセス権限を管理する認可モデル

セキュリティ認可

RBAC とは

RBAC (Role-Based Access Control) は、ロール (役割) に基づいてアクセス権限を管理する認可モデルである。ユーザーに直接権限を付与するのではなく、ロールに権限を付与し、ユーザーにロールを割り当てる。

RBAC の構造

ユーザー → ロール → 権限

Alice → admin → [read, write, delete, manage-users]
Bob   → editor → [read, write]
Carol → viewer → [read]

RBAC vs ABAC

観点 RBAC ABAC
基準 ロール (役割) 属性 (部署、時間、IP)
柔軟性 中程度 高い
複雑さ 低い 高い
admin, editor, viewer 部署=営業 AND 時間=営業時間
AWS IAM ロール IAM ポリシーの Condition

アプリケーションレベルの RBAC

type Role = 'admin' | 'editor' | 'viewer';
type Permission = 'read' | 'write' | 'delete' | 'manage-users';

const rolePermissions: Record<Role, Permission[]> = {
  admin: ['read', 'write', 'delete', 'manage-users'],
  editor: ['read', 'write'],
  viewer: ['read'],
};

function hasPermission(role: Role, permission: Permission): boolean {
  return rolePermissions[role].includes(permission);
}

// Lambda ハンドラでの認可チェック
if (!hasPermission(user.role, 'write')) {
  return { statusCode: 403, body: JSON.stringify({ error: 'Forbidden' }) };
}
const groups = event.requestContext.authorizer?.claims?.['cognito:groups'] ?? '';
const isAdmin = groups.includes('admin');

RBAC の設計指針

最小権限の原則に従い、必要最小限の権限のみを付与する。ロールの粒度は細かすぎず粗すぎないバランスを取り、viewer < editor < admin のように権限の継承関係を明確にする。不要なロールが蓄積しないよう、定期的に棚卸しを行う。

体系的に学ぶなら関連書籍を参照してほしい。

関連用語