Bob Belderbos: FastAPI와 Azure Entra ID를 이용한 데이터베이스 기반 RBAC
이 프로젝트는 Azure Entra ID를 인증에 사용하여 세분화된 역할 기반 접근 제어(RBAC)를 갖춘 FastAPI 서비스를 구현합니다. 각 라우트에 접근 정책을 하드코딩하는 대신, 이러한 정책은 데이터베이스 테이블에 저장됩니다. 이를 통해 관리자는 애플리케이션 코드를 수정하고 재배포하지 않고도 사용자 권한을 변경할 수 있습니다. 시스템은 Azure Entra ID를 사용하여 사용자를 인증하고 JWT 클레임에서 해당 역할을 검색합니다. 엔드포인트 키와 필요한 역할의 매핑은 EndpointPermission SQLModel 테이블에 저장됩니다.권한 부여 로직의 핵심은 FastAPI 종속성으로 사용되는 require 함수에 있습니다. 이 함수는 데이터베이스에서 엔드포인트에 필요한 역할을 검색하고 인증된 사용자가 그 중 하나라도 가지고 있는지 확인합니다. 그렇지 않으면 403 Forbidden 오류가 발생합니다. 엔드포인트의 키 문자열은 해당 라우트 정의에 하드코딩된 유일한 리터럴입니다.중요하게도, 이러한 권한을 관리하는 엔드포인트 자체는 동일한 RBAC 메커니즘으로 보호되어 관리자만이 접근 규칙을 수정할 수 있도록 합니다. 관리자가 권한 관리 엔드포인트에 대한 자신의 접근 권한을 실수로 취소하는 것을 방지하고 역할 할당이 비어 있지 않도록 하는 안전 장치가 있습니다. 이 글은 두 가지 일반적인 Azure 구성 문제를 강조합니다. v2 대신 v1 토큰을 사용하는 경우(유효하지 않은 토큰 오류 발생)와 중첩된 그룹 멤버십이 직접 할당을 위한 사용자 역할에 반영되지 않는다는 사실입니다.이 프로젝트는 또한 권한 부여 로직을 효과적으로 테스트하기 위한 지침을 제공합니다. 테스트는 인증 및 세션 종속성을 재정의하여 가짜 사용자 및 인메모리 SQLite 데이터베이스를 사용할 수 있으므로 외부 종속성 없이 포괄적인 테스트가 가능합니다. 정책을 데이터로 외부화하는 이 설계는 권한 부여를 동적이고 관리 가능하게 만들어 12-factor app 원칙에 부합합니다. 저자는 코드 로직과 변경 가능한 정책을 구별하는 것을 강조합니다.
EndpointPermissionSQLModel 테이블에 저장됩니다.권한 부여 로직의 핵심은 FastAPI 종속성으로 사용되는require함수에 있습니다. 이 함수는 데이터베이스에서 엔드포인트에 필요한 역할을 검색하고 인증된 사용자가 그 중 하나라도 가지고 있는지 확인합니다. 그렇지 않으면 403 Forbidden 오류가 발생합니다. 엔드포인트의 키 문자열은 해당 라우트 정의에 하드코딩된 유일한 리터럴입니다.중요하게도, 이러한 권한을 관리하는 엔드포인트 자체는 동일한 RBAC 메커니즘으로 보호되어 관리자만이 접근 규칙을 수정할 수 있도록 합니다. 관리자가 권한 관리 엔드포인트에 대한 자신의 접근 권한을 실수로 취소하는 것을 방지하고 역할 할당이 비어 있지 않도록 하는 안전 장치가 있습니다. 이 글은 두 가지 일반적인 Azure 구성 문제를 강조합니다. v2 대신 v1 토큰을 사용하는 경우(유효하지 않은 토큰 오류 발생)와 중첩된 그룹 멤버십이 직접 할당을 위한 사용자 역할에 반영되지 않는다는 사실입니다.이 프로젝트는 또한 권한 부여 로직을 효과적으로 테스트하기 위한 지침을 제공합니다. 테스트는 인증 및 세션 종속성을 재정의하여 가짜 사용자 및 인메모리 SQLite 데이터베이스를 사용할 수 있으므로 외부 종속성 없이 포괄적인 테스트가 가능합니다. 정책을 데이터로 외부화하는 이 설계는 권한 부여를 동적이고 관리 가능하게 만들어 12-factor app 원칙에 부합합니다. 저자는 코드 로직과 변경 가능한 정책을 구별하는 것을 강조합니다.