데이터 보호: ASP.NET Core의 용도 계층 구조 및 다중-테넌트(Multi-Tenancy)
- 본 번역문서의 원문은 Purpose hierarchy and multi-tenancy in ASP.NET Core docs.microsoft.com 입니다.
- 본 번역문서는 ASP.NET Core 데이터 보호 : 용도 계층구조 및 다중 테넌트 www.taeyo.net 에서도 함께 제공됩니다.
IDataProtector 인터페이스도 내부적으로는 IDataProtectionProvider 인터페이스를 상속 받기 때문에 서로 연쇄적으로 용도를 연결할 수 있습니다. 그런 면에서 provider.CreateProtector([ "purpose1", "purpose2" ])와 provider.CreateProtector("purpose1").CreateProtector("purpose2")는 서로 동일합니다.
그리고 이런 특징으로 인해서 데이터 보호 시스템 내부에 흥미로운 계층 관계를 구성할 수 있습니다. 가령, 이전 자습서에서 간단히 살펴봤던 Contoso.Messaging.SecureMessage 예제의 경우, SecureMessage 구성 요소는 먼저 provider.CreateProtector("Contoso.Messaging.SecureMessage")를 한 번 호출한 다음, 그 결과를 _myProvider라는 이름의 private 필드에 캐시해 놓을 수 있습니다. 그런 다음, 이후에 생성하는 보호자들은 _myProvider.CreateProtector("User: username")을 호출해서 생성할 수 있으며, 이렇게 만들어진 보호자를 개별 메시지 보안에 사용할 수 있습니다.
이 관계를 반대로 뒤집어버릴 수도 있습니다. 다중 테넌트를 호스트하는 단일 논리 응용 프로그램이 존재하고 (CMS 등과 같은), 각각의 테넌트가 자체적으로 인증 및 상태 관리 시스템을 구성할 수 있다고 가정해보겠습니다. 최상위 응용 프로그램에는 단일 마스터 공급자가 존재하고 provider.CreateProtector("Tenant 1") 및 provider.CreateProtector("Tenant 2")를 호출해서 각 테넌트에게 자체적으로 격리된 데이터 보호 시스템을 제공합니다. 그러면 테넌트는 필요에 따라 자신만의 개별적인 보호자를 파생해서 생성할 수는 있지만, 그 어떤 방법을 쓰더라도 시스템 내의 다른 테넌트와 충돌하는 보호자를 생성할 수는 없습니다. 이를 도식으로 표현하면 다음과 같습니다.
주의
본문은 최상위 응용 프로그램이 각각의 테넌트가 사용할 수 있는 API들을 제어할 수 있고, 각 테넌트는 서버에서 임의의 코드를 실행할 수 없다고 가정합니다. 만약 테넌트가 임의의 코드를 실행할 수 있다면 내부적으로 리플렉션을 수행해서 격리 보장을 깨뜨리거나 마스터 키 관련 자료를 직접 읽어서 원하는 하위 키를 파생할 수 있습니다.
데이터 보호 시스템은 기본으로 제공되는 구성 하에서 사실상 일종의 다중 테넌트를 사용합니다. 기본적으로 마스터 키 관련 자료는 작업자 프로세스 계정의 사용자 프로필 폴더에 저장됩니다 (IIS 응용 프로그램 풀 신원의 경우 레지스트리에). 그러나 실제로는 단일 계정으로 여러 개의 응용 프로그램들을 실행하는 것이 일반적이므로 결과적으로 해당하는 모든 응용 프로그램들이 마스터 키 관련 자료를 공유하게 됩니다. 이런 문제점을 해결하기 위해서 데이터 보호 시스템은 응용 프로그램별로 고유한 식별자를 전체 용도 체인의 첫 번째 요소로 자동으로 삽입합니다. 이 암시적 용도로 인해서 각 응용 프로그램은 시스템 내에서 고유한 테넌트로 효과적으로 처리되어 각각의 응용 프로그램들이 서로 격리되며, 보호자 생성 프로세스가 위의 이미지와 동일한 형태를 띄게 됩니다.
- 권한부여: 개요 2017-01-14 08:00
- 권한부여: 간단한 권한부여 2017-01-14 11:00
- 권한부여: 역할 기반 권한부여 2017-01-14 14:00
- 권한부여: 클레임 기반 권한부여 2017-01-15 08:00
- 권한부여: 사용자 지정 정책 기반 권한부여 2017-01-15 11:00
- 권한부여: 요구사항 처리기와 의존성 주입 2017-01-15 14:00
- 권한부여: 리소스 기반 권한부여 2017-01-16 08:00
- 권한부여: 뷰 기반 권한부여 2017-01-16 11:00
- 권한부여: 스키마별 신원 제한 2017-01-16 14:00
- 인증: ASP.NET Core Identity 살펴보기 2017-01-30 08:00
- 인증: Facebook, Google 및 기타 외부 공급자를 이용한 인증 활성화시키기 2017-02-13 08:00
- 인증: Facebook 인증 구성하기 2017-02-13 11:00
- 인증: Twitter 인증 구성하기 2017-02-20 08:00
- 인증: Google 인증 구성하기 2017-02-20 11:00
- 인증: Microsoft 계정 인증 구성하기 2017-02-20 14:00
- 인증: 계정 확인 및 비밀번호 복구 2017-03-06 08:00
- 인증: SMS를 이용한 2단계 인증 2017-03-13 08:00
- 인증: ASP.NET Core Identity 없이 Cookie 미들웨어 사용하기 2017-03-20 08:00
- 데이터 보호: 데이터 보호 개요 2017-03-27 08:00
- 데이터 보호: 데이터 보호 API 시작하기 2017-03-29 08:00
- 데이터 보호: 소비자 APIs 개요 2017-03-31 08:00
- 데이터 보호: 용도 문자열 2017-04-03 08:00
- 데이터 보호: ASP.NET Core의 용도 계층 구조 및 다중-테넌트(Multi-Tenancy) 2017-04-05 08:00
- 데이터 보호: 비밀번호 해싱 2017-04-07 08:00
- 데이터 보호: 보호된 페이로드의 수명 제한하기 2017-04-10 08:00
- 테이터 보호: 키가 취소된 페이로드의 보호 해제하기 2017-04-12 08:00
- 데이터 보호: 데이터 보호 구성하기 2017-04-14 08:00
- 데이터 보호: 키 관리 및 수명 기본 설정 2017-04-17 08:00
- 데이터 보호: 머신 수준 정책 2017-04-19 08:00
- 데이터 보호: 비-DI 인식 시나리오 2017-04-21 08:00
- 호환성: 응용 프로그램 간 인증 쿠키 공유하기 2017-05-12 08:00
- 호환성: ASP.NET의 <machineKey> 요소 대체하기 2017-05-16 08:00
- 교차 원본 요청 활성화시키기 (CORS) 2017-05-17 08:00
- ASP.NET Core 응용 프로그램에 SSL 적용하기 2017-05-18 08:00
- 개발 중 민감한 응용 프로그램 정보 안전하게 저장하기 2017-05-19 08:00