애플리케이션 개발자를 위한 역할 기반 액세스 제어

RBAC(역할 기반 액세스 제어)는 특정 사용자 또는 그룹이 리소스에 액세스하고 관리하는 데 필요한 특정 권한을 허용합니다. 애플리케이션 RBAC는 Azure 역할 기반 액세스 제어Microsoft Entra 역할 기반 액세스 제어와 다릅니다. Azure 사용자 지정 역할 및 기본 제공 역할은 모두 Azure RBAC에 포함되며 Azure 리소스를 관리하는 데 사용됩니다. Microsoft Entra RBAC는 Microsoft Entra 리소스를 관리하는 데 사용됩니다. 이 문서에서는 애플리케이션별 RBAC에 대해 설명합니다. 애플리케이션별 RBAC 구현에 대한 내용은 애플리케이션에 앱 역할 추가 및 토큰에서 받기 방법을 참조하세요.

역할 정의

RBAC는 애플리케이션에서 권한 부여를 적용하는 데 널리 사용되는 메커니즘입니다. 조직에서 RBAC를 사용하는 경우 애플리케이션 개발자는 개별 사용자 또는 그룹에 권한을 부여하는 대신 역할을 정의합니다. 그러면 관리자는 다른 사용자 및 그룹에 역할을 할당하여 누가 콘텐츠와 기능에 대한 액세스 권한을 갖는지 제어할 수 있습니다.

RBAC는 애플리케이션 개발자가 리소스 및 사용량을 관리하는 데 도움이 됩니다. 또한 애플리케이션 개발자는 RBAC를 사용하여 사용자가 액세스할 수 있는 애플리케이션 영역을 제어할 수 있습니다. 관리자는 사용자 할당 필수 속성을 사용하여 애플리케이션에 액세스할 수 있는 사용자를 제어할 수 있습니다. 개발자는 애플리케이션 내의 특정 사용자와 애플리케이션 내에서 사용자가 수행할 수 있는 작업을 고려해야 합니다.

애플리케이션 개발자는 먼저 Microsoft Entra 관리 센터에 있는 애플리케이션의 등록 섹션 내에서 역할 정의를 만듭니다. 역할 정의에는 해당 역할에 할당된 사용자에 대해 반환되는 값이 포함됩니다. 그런 다음, 개발자는 이 값을 사용하여 애플리케이션에서 해당 사용자가 할 수 있는 일 또는 할 수 없는 일을 결정하는 애플리케이션 논리를 구현할 수 있습니다.

RBAC 옵션

애플리케이션에 역할 기반 액세스 제어 권한 부여를 포함하는 것을 고려할 때 다음 지침을 적용해야 합니다.

  • 애플리케이션의 권한 부여 요구 사항에 필요한 역할을 정의합니다.
  • 인증된 사용자의 관련 역할을 적용, 저장 및 검색합니다.
  • 현재 사용자에게 할당된 역할에 따른 애플리케이션 동작을 결정합니다.

역할이 정의되면 Microsoft ID 플랫폼은 인증된 사용자의 역할 정보를 적용, 저장 및 검색하는 데 사용할 수 있는 여러 가지 솔루션을 지원합니다. 이러한 솔루션에는 앱 역할, Microsoft Entra 그룹 및 사용자 역할 정보를 위한 사용자 지정 데이터 저장소 사용이 포함됩니다.

개발자는 역할 할당이 애플리케이션 권한으로 해석되는 방식을 유연하게 구현할 수 있습니다. 이러한 사용 권한 해석에는 애플리케이션 또는 관련 라이브러리의 플랫폼에서 제공하는 미들웨어 또는 기타 옵션을 사용하는 것이 포함될 수 있습니다. 애플리케이션은 일반적으로 사용자 역할 정보를 클레임으로 받고, 해당 클레임에 따라 사용자 권한을 결정합니다.

앱 역할

Microsoft Entra ID를 사용하면 애플리케이션에 대한 앱 역할을 정의하고 해당 역할을 사용자 및 기타 애플리케이션에 할당할 수 있습니다. 사용자 또는 애플리케이션에 할당하는 역할은 애플리케이션의 리소스 및 작업에 대한 액세스 수준을 정의합니다.

Microsoft Entra ID가 인증된 사용자 또는 애플리케이션에 대해 액세스 토큰을 발급하면 엔터티(사용자 또는 애플리케이션)에 할당한 역할의 이름이 액세스 토큰의 roles 클레임에 포함됩니다. 요청에서 해당 액세스 토큰을 수신하는 웹 API와 같은 애플리케이션은 roles 클레임의 값을 기반으로 권한 부여 결정을 내릴 수 있습니다.

그룹

개발자는 또한 Microsoft Entra 그룹을 사용하여 애플리케이션에 RBAC를 구현할 수 있습니다. 여기서 특정 그룹의 사용자 멤버 자격은 역할 멤버 자격으로 해석됩니다. 조직에서 그룹을 사용하는 경우 토큰에는 그룹 클레임이 포함됩니다. 그룹 클레임은 테넌트 내에서 할당된 모든 사용자 그룹의 식별자를 지정합니다.

Important

그룹을 사용할 때 개발자는 초과분 클레임이라는 개념을 알고 있어야 합니다. 기본적으로 사용자가 초과 한도(SAML 토큰의 경우 150개, JWT 토큰의 경우 200개, 암시적 흐름을 사용하는 경우 6개)를 초과하는 멤버인 경우 Microsoft Entra ID는 토큰에서 그룹 클레임을 내보내지 않습니다. 대신 토큰의 소비자가 Microsoft Graph API를 쿼리하여 사용자의 그룹 멤버 자격을 검색해야 함을 나타내는 "초과분 클레임"이 토큰에 포함됩니다. 초과분 클레임 사용에 대한 자세한 내용은 액세스 토큰의 클레임을 참조하세요. 그룹 기반 할당에는 Microsoft Entra ID P1 또는 P2 버전이 필요하지만 애플리케이션에 할당된 그룹만 내보낼 수 있습니다.

사용자 지정 데이터 저장소

앱 역할과 그룹은 모두 Microsoft Entra 디렉터리에 사용자 할당에 대한 정보를 저장합니다. 개발자가 사용할 수 있는 사용자 역할 정보를 관리하는 또 다른 옵션은 사용자 지정 데이터 저장소의 디렉터리 외부에 정보를 보관하는 것입니다. 예를 들어 SQL Database에서는 Azure Table 스토리지 또는 Azure Cosmos DB for Table을 사용합니다.

사용자 지정 스토리지를 사용하면 개발자는 사용자에게 역할을 할당하는 방법과 이러한 역할을 나타내는 방법을 추가로 사용자 지정하고 제어할 수 있습니다. 그러나 유연한 구성에는 더 많은 책임이 따릅니다. 예를 들어, 현재 Microsoft Entra ID에서 반환된 토큰에 이 정보를 포함하는 데 사용할 수 있는 메커니즘이 없습니다. 사용자 지정 데이터 저장소에서 역할 정보가 유지 관리되는 경우 애플리케이션은 역할을 찾아와야 합니다. 일반적으로 역할 검색은 애플리케이션 개발에 사용되는 플랫폼에서 사용할 수 있는 미들웨어에 정의된 확장성 요소를 사용하여 수행됩니다. 개발자는 사용자 지정 데이터 저장소를 적절히 보호해야 합니다.

Azure AD B2C 사용자 지정 정책을 사용하면 사용자 지정 데이터 저장소와 상호 작용하고 토큰 내에 사용자 지정 클레임을 포함할 수 있습니다.

방법 선택

일반적으로 권장하는 솔루션은 앱 역할입니다. 앱 역할은 가장 간단한 프로그래밍 모델을 제공하며 RBAC 구현을 위해 개발되었습니다. 그러나 특정 애플리케이션 요구 사항으로 인해 다른 방법이 더 나은 솔루션일 수 있습니다.

개발자는 애플리케이션 역할을 사용하여 사용자가 애플리케이션에 로그인할 수 있는지 또는 애플리케이션이 웹 API의 액세스 토큰을 가져올 수 있는지 제어할 수 있습니다. 개발자가 애플리케이션에서 권한 부여 매개 변수를 설명하고 제어하려는 경우 Microsoft Entra 그룹보다 앱 역할을 기본 설정합니다. 예를 들어 권한 부여를 위해 그룹을 사용하는 애플리케이션은 해당 그룹 식별자와 이름이 다를 수 있기 때문에 다음 테넌트에서 중단됩니다. 앱 역할을 사용하는 애플리케이션은 안전하게 유지됩니다.

권한 부여에 앱 역할을 사용할 수도 있고 그룹을 사용할 수도 있지만, 앱 역할과 그룹 간에는 특정 시나리오에 가장 적합한 솔루션에 영향을 미칠 수 있는 결정적인 차이점이 있습니다.

앱 역할 Microsoft Entra 그룹 사용자 지정 데이터 저장소
프로그래밍 모델 가장 간단합니다. 애플리케이션에 따라 다르며, 애플리케이션 등록에 정의됩니다. 애플리케이션과 함께 이동합니다. 더 복잡합니다. 그룹 식별자는 테넌트마다 다르며 초과분 클레임을 고려해야 할 수도 있습니다. 그룹은 애플리케이션이 아닌 Microsoft Entra 테넌트와 관련이 있습니다. 가장 복잡합니다. 개발자는 역할 정보를 저장하고 검색하는 방법을 구현해야 합니다.
Microsoft Entra 테넌트 간에 고정된 역할 값이 사용됩니다. 아니요 구현에 따라 달라집니다.
역할 값을 여러 애플리케이션에 사용 가능 아니요(각 애플리케이션 등록에서 역할 구성이 중복되지 않는 한 사용할 수 없습니다.)
디렉터리 내에 정보 저장 아니요
토큰을 통해 정보 전달 예(역할 클레임) 예(초과분이 발생할 경우 런타임에 그룹 클레임을 검색해야 할 수도 있습니다.) 아니요(런타임에 사용자 지정 코드를 통해 검색됩니다.)
수명(lifetime) 디렉터리의 애플리케이션 등록에 있습니다. 애플리케이션 등록이 제거될 때 제거됩니다. 디렉터리에 있습니다. 애플리케이션 등록이 제거되어도 그대로 유지됩니다. 사용자 지정 데이터 저장소에 있습니다. 애플리케이션 등록에 연결되지 않습니다.

다음 단계