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 のように権限の継承関係を明確にする。不要なロールが蓄積しないよう、定期的に棚卸しを行う。
体系的に学ぶなら関連書籍を参照してほしい。