login register Sysop! about ME  
qrcode
    최초 작성일 :    2017년 06월 05일
  최종 수정일 :    2017년 06월 05일
  작성자 :    soggun
  편집자 :    soggun (송원석)
  읽음수 :    8,568

강좌 목록으로 돌아가기

필자의 잡담~

이번 컬럼은 ASP.NET Core 데이터 보안 강좌 중에서 데이터 보호를 위해서 소비자 API의 용도 계층구조 및 다중 테넌트를 다룹니다.

모든 컬럼은 http://docs.asp.net의 내용을 참고하여 번역한 것입니다. Windows 뿐만 아니라 Linux, OS X에서도 동작하는 완전한 크로스 플랫폼 서버기술인 ASP.NET Core! 기대해 주세요.
본 번역문서는 개인적인 취지로 번역되어 제공되는 문서로, 원문을 비롯한 모든 저작권은 마이크로소프트사에 있습니다. 마이크로소프트사의 요청이 있을 경우, 언제라도 게시가 중단될 수 있습니다. 본 번역문서에는 오역이 포함되어 있을 수 있으며 주석도 번역자 개인의 견해일뿐입니다. 마이크로소프트사는 본 문서의 번역된 내용에 대해 일체의 보장을 하지 않습니다. 번역이 완료된 뒤에도 제품이 업그레이드 되거나 기능이 변경됨에 따라 원문도 변경되거나 보완되었을 수 있으므로 참고하시기 바랍니다.

원문: https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/consumer-apis/purpose-strings-multitenancy

용도 계층 구조 및 다중-테넌트(Multi-Tenancy)

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")를 호출해서 각 테넌트에게 자체적으로 격리된 데이터 보호 시스템을 제공합니다. 그러면 테넌트는 필요에 따라 자신만의 개별적인 보호자를 파생해서 생성할 수는 있지만, 그 어떤 방법을 쓰더라도 시스템 내의 다른 테넌트와 충돌하는 보호자를 생성할 수는 없습니다. 이를 도식으로 표현하면 다음과 같습니다.

Multi tenancy purposes

주의 : 본문은 최상위 응용 프로그램이 각각의 테넌트가 사용할 수 있는 API들을 제어할 수 있고, 각 테넌트는 서버에서 임의의 코드를 실행할 수 없다고 가정합니다. 만약 테넌트가 임의의 코드를 실행할 수 있다면 내부적으로 리플렉션을 수행해서 격리 보장을 깨뜨리거나 마스터 키 관련 자료를 직접 읽어서 원하는 하위 키를 파생할 수 있습니다.

데이터 보호 시스템은 기본으로 제공되는 구성 하에서 사실상 일종의 다중 테넌트를 사용합니다. 기본적으로 마스터 키 관련 자료는 작업자 프로세스 계정의 사용자 프로필 폴더에 저장됩니다 (IIS 응용 프로그램 풀 신원의 경우 레지스트리에). 그러나 실제로는 단일 계정으로 여러 개의 응용 프로그램들을 실행하는 것이 일반적이므로 결과적으로 해당하는 모든 응용 프로그램들이 마스터 키 관련 자료를 공유하게 됩니다. 이런 문제점을 해결하기 위해서 데이터 보호 시스템은 응용 프로그램별로 고유한 식별자를 전체 용도 체인의 첫 번째 요소로 자동으로 삽입합니다. 이 암시적 용도로 인해서 각 응용 프로그램은 시스템 내에서 고유한 테넌트로 효과적으로 처리되어 각각의 응용 프로그램들이 서로 격리되며, 보호자 생성 프로세스가 위의 이미지와 동일한 형태를 띄게 됩니다.


authored by

  wind1379
  2017-06-08(14:37)
캐릭 이미지
Multi-Tenancy -> 다중-테넌트 ... 테넌시?? 테넌트?? 괜한... 딴지...[Mr.NET!]
  songgun
  2017-06-08(15:51)
캐릭 이미지
@wind1379

다음에서 용어를 참고했어요. ^^

https://www.microsoft.com/Language/en-US/Search.aspx?sString=Multi-
Tenancy &langID=ko-kr

  wind1379
  2017-06-08(19:49)
캐릭 이미지
ms에서 오역한듯...
"소프트웨어 멀티테넌시(software multitenancy)라는 용어는 소프트웨어 아키텍처의
하나를 가리키며, 여기에서 하나의 소프트웨어 인스턴스가 한 대의 서버 위에서 동작하면서
여러 개의 테넌트(tenant)를 서비스한다." 라고 정의가 된듯....
테넌트가 뭐지 하고 검색하다가 좀 이상한듯 하여....^^ [Mr.NET!]

  songgun
  2017-06-08(22:58)
캐릭 이미지
뭐 그렇기도 한데요, 마이크로소프트 기술 문서들 보다보면 Multi-Tenancy도 많이 쓰지만
Multi-Tenant라는 용어도 많이 써요. 굳이 한글로 풀자면 '입주/차용' vs '입주자/차용자'
정도의 차이니까요.

그래서 아마도 기술문서 번역 용어 정할때 그냥 누군가가 둘 중 하나로 정한건가 싶네요. 그
래서 어차피 마이크로소프트 관련 문서라 따라가기로 했어요. 저만 다른 단어 쓰면 헛갈릴
까 싶어서 일단 언어 포털에서 제시하는 단어를 쓰려고 노력 중입니다. ^^

  songgun
  2017-06-08(23:04)
캐릭 이미지
저도 테넌트라는 단어를 처음 접한게 IIS 관련 문서였는데, 그리고 보니 이 문서 같은 경우
는 테넌트라는 용어를 모르면 괜히 어려워 보이겠군요. 몇 년 전부터 어느 순간 갑자기 마이
크로소프트 기술 문서 여기 저기에서 튀어나오기 시작하더라구요.

마이크로소프트 코리아의 백승주 부장님이 정리한 문서가 있네요. ^^

https://blogs.technet.microsoft.com/koalra/2012/04/08/windows-server-multi-
tenant/

  wind1379
  2017-06-09(09:11)
캐릭 이미지
@송군
자세한 설명 감쏴.... 누군가 용어를 통일한 느낌이 살짝 들긴 하네.... [Mr.NET!]


 
 
.NET과 Java 동영상 기반의 교육사이트

로딩 중입니다...

서버 프레임워크 지원 : NeoDEEX
based on ASP.NET 3.5
Creative Commons License
{5}
{2} 읽음   :{3} ({4})