AJ16_cover

지난 포스팅에 이어 아키텍처 저널 16권에 실린 사용자 인증 및 아이덴티티 관련된 아티클 번역물 두번째를 올린다. 클라우드가 이제는 모든 비지니스의 기본 인프라처럼 여겨지는 시대가 되어 가는데, 이때 필요한 것이 상호간 Seamless 연동을 가능케하는 인증 체계의 통합이다. 이 글은 클레임 기반 인증 방식의 가장 기본이 되는 원칙과 원리를 설명하고 있으며, 이를 통해 클라우드 시대까지 확장할 수 있는 인증 통합을 살며시 이야기하고 있다. 

이 아티클의 원문은 아래에서 확인할 수 있다.
http://msdn.microsoft.com/ko-kr/architecture/cc836390(en-us).aspx

참고로, 현재까지 번역된 아키텍처 저널은 다음과 같으며 3개의 아티클이 한글 PDF 버전으로 다운로드 가능하다.
아키텍처 저널 21 : http://msdn.microsoft.com/ko-kr/architecture/aa699437.aspx
아키텍처 저널 19 : http://msdn.microsoft.com/ko-kr/architecture/aa699428.aspx
---------------------------------------------------------------------------------------
클레임 인식 솔루션의 아키텍처 패턴
앞서 언급한 기본 개념은 새로운 인증 메커니즘의 기반이 된다. 따라서 이러한 개념을 조합하면 어떤 시스템과 트랜잭션도 설명할 수 있다. 이 새로운 세상에서, 전통적으로 하나로 융합되어 있던 두 가지 기능, 즉 (클레임을 통해) 호출자에 대한 정보를 얻는 기능과 (자격 증명을 통해) 호출자가 기존 사용자인지 여부를 확인하는 기능을 마침내 분리할 수 있게 되었다. 이러한 분리 덕분에 이제 어떤 기능이 시나리오에 가장 적합한지 결정할 수 있다(보다 자세한 내용은 리소스 부분 참조: Vittorio Bertocci의 블로그, The TAO of Authentication).
일반적인 시나리오를 설명하는 데 특히 유용한 특정 패턴이 있으며, 이중 가장 일반적인 세 가지 패턴을 기술할 예정이다. 아울러 일반적인 시나리오에 대해서 클레임 기반 접근법이 기존 방식에 비해 갖는 장점을 몇 가지 설명할 예정이다. 모든 패턴은 온프레미스 및 클라우드 아키텍처 모두에 적합하다.

정식 패턴: 주체(Subject)-IP-RP
이 패턴은 인증 관리에 있어 드물게 발생하는 상황, 즉 하나의 주체가 제한된 리소스(RP)에 접근하길 원하는 상황을 설명한다. 이러한 패턴은 Windows 사용자가 네트워크 공유에 접근을 시도하는 경우, 스마트 클라이언트가 보안 웹 서비스를 호출하는 경우, 웹 서퍼가 제한된 컨텐츠를 찾아보는 경우 등에 발생한다(그림 2 참조). 주요 절차는 다음과 같다.

그림 2. 주체-IP-RP 정식 패턴. 숫자는 텍스트를 나타낸다.

  1. (독립적으로) RP가 정책의 형태로 요구 사항을 게시한다. 이러한 요구 사항은 다음을 포함한다.
    1. 클레임 목록
    2. RP가 이러한 클레임의 소스로 신뢰하는 IP
    3. RP가 사용할 수 있는 특정 인증 기술에 관한 세부 정보 (예: RP가 이해하는 토큰 형식)
  2. 주체(Subject)가 RP 정책을 읽고 이를 준수할 수 있는지 확인한다. 이것은 실제로 주체가 RP가 신뢰하는 그 어떤 IP로부터도 적절한 토큰을 확보할 수 있는지 여부를 확인하는 것을 의미한다.
  3. 주체가 적절한 IP를 호출하고, RP 정책을 준수하는 토큰을 요청한다. 실제로 이는 일반적으로 RST 메시지를 IP의 STS로 전송하는 것을 의미한다.
  4. IP가 RST를 수신하고 주체를 인증한다. 주체가 확인되면 IP는 필요한 클레임 값을 검색하고, 토큰으로 패키지화하여, 서명 후 주체에 다시 전송한다.
  5. 주체는 이 토큰을 수신하여 RP를 호출하는 데 사용한다.
  6. RP가 호출 메시지에서 토큰을 추출한 후, 신뢰할 수 있는 IP에 의해 서명된 것인지와 적절한 클레임을 포함하고 있는지를 검사한다. 확인 결과가 긍정적이면,
    1. 클레임 값은 일부 접근 제어 로직을 공급하는 데 사용된다.
    2. 접근 제어 로직이 충족되면, 리소스 자체에서 클레임 값을 사용할 수 있게 되고, 접근이 허용된다.

본 설명의 취지에 따라 여기서는 리소스가 웹 서비스라고 가정하도록 한다. 위의 패턴은 다수의 좋은 속성을 보여준다.

인증 외부화 (Authentication externalization)
토큰 및 클레임을 사용하면 리소스가 명시적 아이덴티티 관리 코드를 작성해야 하는 부담이 줄어든다. 또한, RP 정책 게시를 처리하는 인프라와 동일한 인프라가 토큰을 역직렬화하고, 서명을 확인하며, 리소스 개발자가 실제 사용되는 토큰의 형태에 관계없이 클레임 값을 손쉽게 사용할 수 있도록 하는 등의 작업을 수행할 수 있다. 이 인프라는 클레임 값에 기반해 일부 권한 부여를 결정할 수도 있어, 개발자의 작업을 더 줄여준다.
이는 모든 시나리오에 적용되는 장점이지만, 호스팅 기술이 하나의 변수인 클라우드에서 특히 진가를 발휘한다. 클레임을 사용하면 리소스를 호스팅하는 인프라의 세부 정보와 런타임 시 제공되는 인증 기술 세부 정보로부터 리소스를 분리시킴으로써 진정으로 이식 가능한 리소스를 실현한다.

리소스 레벨 정책 (Resource-level policy)
리소스 레벨에서 정책을 지정할 수 있게 되면, 배포가 매우 민첩해지고, 상세한 제어가 가능하며, 인증 기술에 대한 선택을 동적으로 가능하게 한다. 또한, 상호 운용이 가능한 표준을 사용하기 때문에 호스팅 환경에 관계없이 효과적인 관리 전략을 수립할 수 있으며, 실행 환경으로부터 리소스 자체가 분리되기 때문에 (클라우드로의 이동 포함해) 리소스를 훨씬 더 쉽게 이동시킬 수 있다.

자율성
모든 리소스는 자율적으로 자신의 요구 사항을 명시하고, 주체(Subject)가 그러한 요구 사항을 자신의 능력과 매칭시킨다. 이와 같은 상호 작용은 리소스와 주체가 결합할 때 나타나는 특징적인 속성이다. 리소스와 주체 양쪽 모두 독립적으로 변할 수 있고, 리소스에 접근할 수 있는 주체들의 집합은 외부적인 영향이나 인프라 의존 관계와는 상관없이 리소스의 요구 사항을 준수할 수 있는 능력에 의해서만 정의된다. 이 시스템은 각자의 요구 사항 및 능력에만 신경 쓰면 되기 때문에 매우 강력하다. 명시적인 협상이나 조정이 필요하지 않으므로 사용자 참여도 매우 쉽다.

일부 인증 및 권한 부여 로직의 중앙 집중화
이 패턴에서는 IP가 모든 특성(attribute) 검색 작업을 수행한다. RP는 다른 시스템에 쿼리를 실행하지 않고도 필요한 것을 토큰 형태로 받는다. 이는 RP가 접근 권한을 가지지 않는 특성에는 분명 이점이 된다. (즉, 항공사 A가 주체의 파트너 항공사 B의 마일리지 정보를 요청하는 것과 같은 이치이다.) 뿐만 아니라 특성 검색 로직을 한 곳으로 중앙 집중화할 수 있는 훌륭한 수단이 된다. 또한, 특성 저장소에 접근해야 하는 접점(endpoint)의 수를 줄이고, 관리 용이성 및 보안을 향상시켜 준다. 뿐만 아니라, 일단 주체가 토큰을 얻으면 만료될 때까지는 IP에 조회할 필요 없이 이를 캐시 및 재사용할 수 있기 때문에 접근 횟수 자체도 줄일 수 있다. 또한, IP는 권한 부여를 결정하는 데 사용될 수 있는데, 이는 클레임을 통해서도 표현할 수 있다. 단, 이 때 IP는 주체 및 리소스 모두와 긴밀한 관계를 가지고 있어야만 한다. 이러한 패턴은 예를 들어 IP가 디렉터리를 나타내고 RP는 IP가 관리하는 리소스 중 하나인 경우와 같이 중요한 시나리오에서 발생하지만, 일반적으로 RP와 IP 사이에는 어떠한 관계도 가정될 수 없다.
이것은, 가능한 사용자에 대한 정보를 확인하기 위해 리소스가 외부 IP에 의존해야 하는 경우와 같이 많은 클라우드 시나리오에 있어 핵심이 된다. 또한, 파트너 조직의 사용자가 기술이나 플랫폼과 무관한 토큰 형태로 표현될 수 있는, 전통적인 페더레이션보다는 다소 애자일한 경우에 아주 유용하며, 아울러 모든 유형의 경계를 넘나드는 경우에 큰 도움이 된다.

클레임 변환기 유형: 주체-IP-클레임 변환기-RP
방금 설명한 패턴은 일반 소비자(항공사 A의 단골 고객이 파트너 항공사 B의 웹 사이트를 접근하는 경우)에서 기업(거의 모든 Kerberos 시나리오가 그와 같은 방식으로 모델링될 수 있으며, 기술 독립성이라는 이점도 추가로 누릴 수 있음)에 이르기까지 광범위한 시나리오에 적용될 수 있다.
단, 실제로는 특정 제약 조건으로 인해 이 패턴을 적용하지 못하는 상황이 존재한다.

1. 간접 신뢰(Indirect trust). RP가 주체와 관계를 맺고 있는 IP를 직접적으로 신뢰하지 않을 수 있지만, 신뢰 관계를 중개해 줄 수 있는 일련의 중간 단계 인증 기관을 둘 수 있다. 비행기를 타고 싶다고 해서 지갑 속에 들어있는 신분 증명 문서(정부가 발행한 여권 또는 운전 면허증)만으로는 바로 비행기를 탈 수 없다. 탑승 게이트의 직원은 제대로 된 항공사에서 발급한 탑승권만 신뢰할 것이다. 따라서, 이미 소유하고 있는 신분 증명 문서를 체크인 프런트에서 사용하여 탑승권을 받으면 된다.

2. 클레임 형식. 주체가 바로 이용할 수 있는 IP에서 발급한 클레임의 형식을 RP가 이해하지 못할 수 있다. 이는 때로는 단순한 형식 문제일 수도 있고 (예를 들어, 이탈리아 ID에 “birth date” 대신 “nato il”로 되어 있다면, 미국의 바텐더는 필요한 정보를 눈 앞에 두고도 알지 못한다.), 때로는 RP가 요구하는 클레임이 수신된 원시 정보를 가공한 결과를 원하기 때문일 수도 있다. (RP가 수신된 “age”와 “Nationality”를 가공하여 “CanDrink?”라는 클레임을 필요로 할 수도 있다.)

위에서 언급한 것과 같은 새로운 제약 조건이 있을 경우, 이는 새로운 요소를 추가함으로써 쉽게 처리할 수 있다. 클레임 변환기 (claim transformer)로 불리게 될 이 요소는 리소스에 도달하기 전에 토큰을 처리할 수 있으며, RP가 신뢰를 중개하고 수신 클레임을 보다 적절한 형식으로 변환하는 데 활용할 수 있다. 주체와 RP 사이에는 임의의 긴 클레임 변환기 사슬이 존재할 수 있다. 따라서 상위 수준에서 계획하지 않고도, 동적인 정책 협상에서 경로(존재하는 경우)를 자동으로 “선택”할 수 있다.
클레임 변환기를 구현하는 최상의 아티팩트는 다시 말하지만 STS이다. 클레임 변환기가 사용하는 STS는 자체 데이터 소스로부터 발급된 클레임을 채우는 것 대신, 주로 수신된 정보를 조작하게 된다. 전통적인 페더레이션 경우처럼, RP를 소유하고 있는 동일한 엔터티가 STS를 실행하는 경우가 많기 때문에, 이러한 종류의 STS는 일반적으로 Resource STS, R-STS 또는 RP-STS로 지칭된다. 보다 자세한 정보는 저자 블로그에서 확인하도록 한다(리소스 부분 참조).
클레임 변환기를 적용하는 방식은 몇 가지 강력한 이점을 제공하며, 분산 시스템의 아이덴티티 관리를 위한 지배적인 패턴으로 부상할 것으로 생각된다(그림 3 참조).

Cc836390_ClaimsAndIdentity03(en-us,MSDN_10)

리소스 클러스터링
클레임 변환기는 엔터프라이즈 수준에서 단일 리소스와 디렉터리 간에 지속적인 granularity를 제공할 수 있다. R-STS는 요구 사항이 비슷한 여러 리소스를 모으는 데 사용할 수 있다. 복잡한 신뢰 중개 나 원본 클레임 처리 작업을 엔터프라이즈 수준까지 요청할 필요도 없이 한 지점 내로 이동시킴으로써 정책 관리를 간소화한다. R-STS는 네트워크 상에서 제 역할을 제대로 하지 못할 수 있는 레거시 리소스를 보호하는 가상 경계도 될 수 있다. 이러한 것들은 클레임 변환기의 강력한 효과를 보여 주는 일부 사례에 지나지 않는다(그림 4 참조).

Cc836390_ClaimsAndIdentity04(en-us,MSDN_10)

권한 부여 결정 지점(Authorization Decision Point)
IP는 일반적으로 독립적인 엔터티지만, R-STS는 협력하는 리소스의 일부 정보를 소유하는 경우가 많다. R-STS는 이러한 정보를 통해 권한 부여 결정을 내릴 수 있다. 수신 클레임은 주체가 접근을 시도하는 리소스의 요구 사항과 함께 처리될 수 있고, 그 결과는 곧 주체가 필요한 권한을 보유하고 있는지 여부에 관한 결정이 될 수 있다. 이러한 결정은 다양한 방식으로 표현될 수 있다.

  • 주체가 어떠한 권한도 가지고 있지 않은 경우, R-STS는 단순히 토큰 발급을 거부하고 호출을 차단할 수 있다. 이 경우 R-STS는 권한 부여를 강제하는 것이다.
  • 주체가 일정 권한을 가지고 있는 경우, R-STS는 이러한 권한 부여 결정을 클레임의 형태로 공식화할 수 있다. 따라서 RP는 권한 부여 로직을 실행해야 하는 부담에서 벗어나 R-STS에서 클레임의 형태로 받는 지시문을 적용하기만 하면 된다.

토큰, 클레임 및 IP 사용은 인증 과정 외부화를 가능하게 하고, 어느 특정 상황에서 R-STS는 권한 부여 결정에도 동일한 작업을 수행할 수 있도록 도움을 줄 수 있다.

위임
레거시 시스템, 디렉터리 수준에서 직접 관리되는 리소스 등 클레임이 인식하지 않는 수많은 리소스가 존재한다. 때로는 이러한 리소스에 대한 접근을 관리하기 위해 ACL 할당 및 그룹 생성과 같이 몇 가지 투자가 이루어진 경우도 있다. 클레임 기반 보안을 통해 프런트 엔드 애플리케이션을 호출하는 주체의 아이덴티티는 이러한 투자를 활용하는 데 적합하지 않다. 단, 프런트 엔드 애플리케이션이 호출자를 대신하여 디렉터리 아이덴티티를 받을 수 있다면 문제가 해결된다. 사실 다른 누군가를 대신하여 토큰을 받는 것은 발급된 토큰이 클레임의 영역에 남아 있는 경우에도 분명히 가치가 있다.

클레임과 클라우드
지금까지 설명한 것의 장점은 느슨하게 연결된 모든 시스템에 적용될 수 있다는 것이다. 최고의 분산 시스템이라 할 수 있는 클라우드도 예외가 아니다. 클라우드 차원에서 생각한다는 것은 모든 엔터티가 독립적으로 관리되는 환경을 다루는 것이다. 즉, 클레임, 토큰, 신뢰 및 아이덴티티 메타 시스템 기능은 다루고 있는 파티들 사이의 관계에 대해 알고 있는 정보의 크기가 얼마가 됐든 이를 최대한 활용할 수 있도록 지원한다. 클레임 기반 솔루션을 설명하면서 우리는 사내 및 클라우드에 모두 비슷하게 적용될 수 있는 도구를 제공하는 일석이조의 효과를 거두었다.
우리가 클라우드 시나리오에 대한 자세한 지침을 제공하기에는 앞으로 어떤 식으로 변하게 될지 너무 적게 알고 있는 실정이다. 하지만 몇 가지 기본적인 가설을 통해 클라우드에 특히 잘 맞는 클레임 인식 아이덴티티 관리의 여러 가지 측면은 조명해 볼 수 있다.

클레임 변환을 통한 접근 제어
클라우드 공급자가 저장 및 계산, 메시징, 통합 등과 같은 서비스를 제공할 수 있다는 것은 잘 알려진 사실이다. 클레임 변환기 섹션에서 다뤘던 내용을 상기해보면, 클라우드 공급자의 분명한 접근 제어 전략은 R-STS를 제공하고 리소스가 이를 신뢰하게 만드는 것임을 알 수 있다. 그러면 이 R-STS를 사용하는 모든 리소스들은 R-STS의 클레임 변환 규칙을 조작함으로써 간단하게 접근 제어를 관리할 수 있게 된다.
ISV로서 어떤 클라우드 공급자에 서비스를 구축하기를 원한다고 가정해 보자. 먼저 서비스가 받아들일 클레임 집합을 결정하고, 이 서비스가 클라우드 공급자의 R-STS를 신뢰하도록 설정한다. 이로써, 누가 서비스를 호출하더라도 접근 제어 전략은 이미 마련되어 있다! 새로운 고객을 참여시킬 때에는 R-STS 수준에서 몇 가지 규칙을 설정하여 고객의 클레임을 자신의 클레임으로 매핑하는 방법을 정의하기만 하면 된다. 이는 놀라울 정도로 민첩한 방법으로 유지 관리하기도 매우 쉽다(그림 5 참조).

Cc836390_ClaimsAndIdentity05(en-us,MSDN_10)

권한 부여 외부화 (Externalizing Authorization)
지금까지 R-STS가 권한 부여 결정을 편리하게 외부화하고 집계하는 방법에 대해 살펴보았다. 물론 이 방법은 클라우드 시나리오에서도 유효하다. 실제로는 권한 부여 적용까지 포함하도록 R-STS의 적용 범위가 확대된 사례가 많다. ISV 사례로 돌아가자.
서비스가 메시징 방식을 통해 제공되는 경우, 메시지가 타겟에 도달하기 전에 권한 부여에 관련된 클레임을 검사함으로써, 서비스 전송 인프라 자체에서 권한 부여 결정 사항을 강제할 수 있다. 이는 ISV의 부담을 줄여준다. 즉, 서비스가 해당 공급자의 메시징 인프라를 사용하지 않는 경우, 권한 부여 관련 결정 사항을 강제하기 위해서는 리소스 앞쪽에 일부 처리 파이프라인을 추가해야 하는 부담이 발생하게 된다. (보다 자세한 내용은 리소스 부분 참조: Vittorio Bertocci의 블로그, 클레임 유형).

관계 관리하기
설명한 모델을 통해 ISV는 고객 관계를 일련의 규칙으로 나타낼 수 있다. 이는 전통적인 방법을 통해 디렉터리 간에 페더레이션 관계를 생성하는 것보다 훨씬 더 민첩한 방식이다. 이 방식은 관리의 세분성은 떨어지지만, 피어 파트너 관계에는 필요하나 공급자-고객 관계에는 과도한 경우가 많은 추가 관리 부담을 해소시켜 준다.
또한, 이 모델은 고급 아이덴티티 기능 없이도 개인 및 고객을 수용할 수 있게 해 준다. ISV 서비스는 고객이 자체 IP에서 발급된 토큰을 통해 인증을 받았든, 단순한 일회용 사용자 이름 및 암호를 통해 인증을 받았든, 언제나 R-STS가 발급한 토큰을 확인한다.

미래
클라우드로의 전환은 확실히 이루어질 것이다. 업계에서는 중요한 것은 클라우드 환경으로 전환할지 여부가 아니라 전환 시점이라는 것을 매우 빠르게 인식하고 있다. 미래를 예측하는 것은 언제나 위험한 일이다. 하지만 클라우드는 오늘날 아이덴티티 유토피아처럼 보임에도 불구하고 지금까지 설명한 원리 덕분에 지극히 타당해 보이는 개발에 뛰어들지 않고 그냥 넘기기에는 너무 들떠 있는 상황이다.
오늘날 접근 제어는 기능보다는 순위를 반영하는 권한으로 인해 조직 구조의 철로에서 제약을 받는 경우가 많다. 상호 운용성 이벤트에 참여하는 기업 및 오픈 소스 이니셔티브의 수와 수준(리소스 부분 참조: RSA 2008 OSIS 상호 운용성 이벤트), 그리고 주요 제품에서의 클레임 지원 통합은 클레임 기반 프로그래밍이 주류가 되고 있음을 보여준다. 그렇게 된다면 아이덴티티 및 접근 제어 구조가 어떻게 조직이 아닌 작업을 중심으로 수렴될 수 있을지를 쉽게 상상할 수 있다. 수많은 기업의 주체, 리소스, 역할 및 인증 기관은 모두 특정 프로젝트의 측면에서 설명될 수 있고, 조직 순위가 아닌 프로젝트 자체의 측면에서 수행되는 기능에 따라 권한이 할당될 것이다. 작업이 이루어지는 동안에는 가상 조직이 생성되었다가 임무가 완료되면 사라질 수 있다. 또한, 기업 전체에서 이루어지는 작업 템플릿을 지원하여, 모범 사례를 적용하고, 예측 가능성을 향상시킬 수 있다(그림 6 참조).

Cc836390_ClaimsAndIdentity06(en-us,MSDN_10)

이를 실현하려면 클레임은 충분조건이 아닌 필요조건이다. 여기에 가상 디렉터리와 같은 새로운 기술이 또한 핵심 역할을 할 것이다. (보다 자세한 내용은 Kim Cameron의 블로그 www.identityblog.com을 참조할 것).

Call to Action
클레임 기반 방식은 전통적인 시나리오와 클라우드 시나리오 모두를 위한 훌륭한 방식이다. 차이가 있다면 전통적인 시나리오에서는 경우에 따라 다량의 추가 리소스를 사용하여 나쁜 전략을 피할 수 있는 반면, 일단 클라우드를 사용하는 경우에는 이것이 쉽지 않다는 것이다. 자신과 조직이 미래의 물결에 대비하길 원한다면 다음과 같은 몇 가지 작업을 수행할 수 있다.

여기서 ‘수박 겉핥기 식’이라는 속담을 언급할 수 있을 듯하다. 그리고 아마 그 말이 맞을지도 모른다. 하지만 그 대신 클레임은 전통적인 시나리오와 클라우드 시나리오 모두에 있어 흥미로운 아이덴티티 관리 전략 개발의 토대가 된다는 말로 이 글을 정리하고 싶다. 자신이 괴짜라고 생각한다면 이러한 상호 작용의 대부분이 아주 명백히 드러나는 특별한 전환의 순간을 즐기라고 권하고 싶다. 그리고 아울러 그 외 사람들에게는 세부 정보의 대부분은 인프라에 통합되고 새로운 차원의 도구를 통해 겉으로 드러나지 않을 것으로 예상되기 때문에 안심해도 된다고 말하고 싶다.

리소스
Vittorio Bertocci의 블로그:

Kim Cameron의 블로그:

“Understanding Windows Cardspace”, Chapter II (Addison Wesley 2008)(MSDN에 게시)

RSA2008 OSIS 상호 운용성 이벤트:

WS-Security

WS-Trust:

저자 소개
Vittorio Bertocci는 Microsoft사 Cloud Services Evangelism의 수석 아키텍트 전도사로 대기업이 신기술을 활용할 수 있도록 도움을 주고 있다. 그는 Italian Microsoft Services에서 몇 년간 근무한 후, 미국 본사로 전근하여 지난 3년간 고객이 아이덴티티 및 접근 관리, SOA 및 서비스를 토대로 솔루션을 구축할 수 있도록 지원해 왔다. 현재 클라우드 컴퓨팅의 아이덴티티 및 접근 측면에 전념하고 있으며, 사용자 중심의 ID를 주제로 공동 집필한 저서 Understanding Windows Cardspace가 지난 1월에 출간된 바 있다. Vittorio는 유명한 블로그(http://blogs.msdn.com/vbertocci)를 운영하고 있다.
이 글은 Microsoft가 출판하고 온라인으로 게시하는 Architecture Journal에 실려 있다. Architecture Journal에서 더 많은 글을 읽고 싶다면 Architecture Journal 웹 사이트를 참조한다.

Posted by 장현춘

  AJ16_cover

아키텍처 저널 16권에 실린 사용자 인증 및 아이덴티티 관련된 아티클을 번역 중이며, 그 전반부를 올린다. 이 아티클에 실린 내용은 전통적인 on premise 방식의 시스템이나 근래들어 관심을 끌고 있는 클라우드 기반 애플리케이션 개발에 있어서도 다른 시스템과의 연계나 통합 측면에서 늘 고려되고 중요시되는 사용자 인증과 서로 다른 아이텐티티 통합 관련하여 클레임 기반 관리 기법을 소개한다. 이는 특정 플랫폼이나 벤더에 종속적이지 않으면서 표준적인 토큰 방식을 적용하여 광범위하게 적용할 수 있는 방법이며 마이크로소프트는 Active Directory Federation Service를 통해 이미 지원하고 있다.

이 아티클의 원문은 아래에서 확인할 수 있다.
http://msdn.microsoft.com/ko-kr/architecture/cc836390(en-us).aspx

참고로, 현재까지 번역된 아키텍처 저널은 다음과 같으며 3개의 아티클이 한글 PDF 버전으로 다운로드 가능하다.
아키텍처 저널 21 : http://msdn.microsoft.com/ko-kr/architecture/aa699437.aspx
아키텍처 저널 19 : http://msdn.microsoft.com/ko-kr/architecture/aa699428.aspx 
----------------------------------------
요약
오늘날의 아이덴티티 관리는 종종 불완전한 솔루션 여러 개를 짜깁기한 방식으로 이루어진다. 이 방식은 기술 및 조직 경계에 의해 분리된 애플리케이션 및 엔터티를 어느 정도 지원하기는 하지만, 이들을 실제로 통합하지는 못한다. 하지만 기업들은 SaaS(Software as a Service) 및 클라우드 컴퓨팅의 확산으로 인해 이러한 경계를 허물어야 하는 상황에 자주 직면하게 될 것이고, 따라서 임시방편적인 솔루션은 더 이상 통하지 않게 될 것이다. 이러한 환경에서는 아이덴티티 사일로(silo)를 허물고 의도적으로 계획된 경계가 없는 IT를 지원하는 새로운 접근법이 적절하다.
이 아티클은 전통적인 시나리오와 클라우드 시나리오에 동일하게 효과적으로 적용될 수 있는 모델인 클레임 기반 아이덴티티 관리(claims-based identity management)의 원칙에 대해 살펴본다. 아울러 이러한 원칙이 클라우드 컴퓨팅 환경과 일반적인 분산 시스템에 적용될 때 얻을 수 있는 장점과 기회를 중심으로 가장 일반적인 토큰 교환 패턴에 대해 살펴볼 것이다.

한계는 없다
여러분의 내면에 있는 어린아이는 구름 낀 하늘에서 용이나 성과 같은 것을 보겠지만, 이 아티클을 읽고 난 후에 여러분은 아키텍트로서 구름 속에서 달러 기호를 보게 될 것이다. 클라우드 컴퓨팅은 IT에 대한 사고 방식에 획기적인 이점을 가져온다고 약속한다. 클라우드 컴퓨팅의 기본적인 개념은 기업이 자산을 회사 외부에 호스팅하며, 필요한 인프라를 유지 관리해야 하는 부담 없이 이러한 자산이 제공하는 혜택을 누릴 수 있다는 것이다. 이는 기업이 원하는 기능을 서비스 형태로 구입함으로써, 핵심 비즈니스와 관련이 없는 온프레미스(on-premise) 애플리케이션을 관리해야 하는 부담을 없애주는 SaaS와 어느 정도 비슷하다. 하지만 클라우드 컴퓨팅은 그 한계를 더욱 확장시킨다. 클라우드는 대표적인 CRM 및 HR 패키지 등 타사가 제공하는 완벽한 애플리케이션을 구입하지 않고도, 데이터 센터 내에서 플랫폼으로 노출되는 자사 리소스를 호스팅할 수 있는 가능성을 제공한다. 이렇게 되면 CPU와 대역폭 사용량을 고민할 필요 없고, 하드웨어를 직접 다루거나 실내 냉방을 고민하지 않으면서도 리소스 제어 권한을 유지할 수 있다. 심지어 시스템 패치를 염려할 필요도 없다. 웹 애플리케이션이 새로운 데이터를 매일 생성하는 경우, 클라우드의 데이터 저장소를 이용하면 용량 확장을 위해 하드웨어를 계속 추가로 구입하지 않아도 된다. 가장 좋은 점은 하드웨어와 인프라에 미리 투자하지 않아도 되며, 실제로 리소스를 사용하는 양만큼 비용을 지불하면 된다는 것이다. “클라우드 컴퓨팅”이라는 용어 대신 “유틸리티 컴퓨팅”이라는 용어가 자주 사용되는 이유도 바로 이러한 “사용량 기준 결제(pay-per-use)” 방식 때문이다. CPU 사용량이 많은 작업의 경우, 이러한 장점은 더욱 확연해 진다. 피크 타임을 고려하여 용량 산정한 데이터센터를 구축하여 대부분의 시간 동안 제대로 활용되지 않는 상태로 두는 대신, 엄청난 규모의 데이터 센터에 CPU 사용량이 가장 많은 프로세스를 구축할 수 있다고 상상해 보라. 필요한 만큼 CPU 사용량을 늘릴 수 있고, 사용한 양만큼만 클라우드 공급자에게 비용을 지불하면 된다. 이러한 것들은 IT 관리자의 눈을 반짝이게 만드는 장점 중 일부에 불과하다. 클라우드는 이 밖에도 아키텍트의 관심을 끌 수 있는 보다 더 흥미로운 특성을 지니고 있다. 클라우드 공급자는 공통 인프라에서 리소스를 호스팅하기 때문에, 개발 및 유지 관리를 간소화시킬 수 있는 서비스를 모든 리소스가 활용할 수 있도록 제공하고 있다. 여기에 해당하는 대표적인 서비스로는 네이밍, 메시지 전송, 로깅, 접근 제어를 들 수 있다. 어떤 리소스라도 클라우드 인프라를 한 번 사용하기만 하면, 해당 리소스 자체에서 그러한 기능의 구현을 제외시킬 수 있다.
클라우드 컴퓨팅에 관한 문헌의 양은 방대할 뿐만 아니라 나날이 증가하고 있다. 여기서 소개한 내용으로 클라우드 컴퓨팅이 지닌 엄청난 잠재력을 확인하기에 충분하지 않다면, 가장 좋아하는 검색 엔진에서 이 용어를 검색해보도록 하라. IT 업계가 클라우드 컴퓨팅을 얼마나 중요하게 받아들이고 있는가를 짐작할 수 있을 것이다. 성실한 아키텍트라면 이 시점에서 “우리 회사도 클라우드 컴퓨팅에 준비가 되어 있을까 ?”라는 궁금증을 가질 것이다. 물론 이 질문에 답하는 것은 그리 간단한 일이 아니다. 여기에는 아키텍처의 여러 가지 측면과 회사의 업무 방식이 고려되어야 한다. 최대한 간단하게 설명하자면, 확고한 서비스 중심(service orientation : SO) 원칙에 따라 비즈니스를 운영하고 있다면, 이러한 신기술을 활용할 수 있는 이상적인 위치에 있는 것이다. 요컨대, 자율성이 중시되고, 정책이 공개되며, 표준이 사용된다면, 서비스가 어디에서 실행되든 누가 상관하겠는가? 만약 이런 위치에 있다면 축하한다. 하지만 경험에 비추어볼 때, 누구도 SO 원칙을 엄청 세세하게 적용하지는 않는다. 예를 들어, 같은 기술로 개발된 서비스들은 상호 간에 호환이 되었을 때 특별한 기능을 제공한다. 그리고 실제로도 이러한 기능을 활용해야지만 완벽하게 말이 되는 상황이 존재한다는 것이다.
아이덴티티 관리 및 접근 제어는 이러한 현상의 영향을 받을 가능성이 높다. 일반적으로 기업은 디렉터리 소프트웨어를 보유하고 있으며, 이 소프트웨어를 리소스 접근 제어와 관련된 여러 방면에서 합법적으로 사용한다. 때로 이러한 소프트웨어는 아주 훌륭하게 작동하여 개발자들이 아이덴티티 개념을 익힐 필요도 없게 만든다. 물론 이는 좋은 현상이지만 실제로는 거의 발생하지 않는다. 디렉터리 외부의 파트너와 연결하거나, 다른 자격 증명 유형을 사용하는 등 일정 형태의 접근 제어 관리를 수반하는 작업을 맡게 되었을 때, 개발자가 최악의 회전 의자식(swivel chair) 통합 솔루션을 가지고 온다고 예상하면 된다. 아이덴티티가 개발 측면에서 가장 나쁜 결과를 가져온다면, 어째서 우리는 아이덴티티와 무리없이 잘 지내고 있을까 ? 이 질문에 안 그럴 때도 있다고 쉽게 대답할 수도 있다. 자신과 관련되어 있는 사례 중 접근 제어가 잘못된 끔찍한 경우를 알고 있을 것이다. 보다 현명한 대답은 다음과 같다. 우리가 아이덴티티와 관련된 이슈로부터 잘 지낼 수 있는 이유는 우리가 인프라의 대부분을 소유하고 우리가 엄격한 거버넌스를 강제하는 한, 그러한 이슈를 처리할 수 있기 때문이다. 이 경우, 필요한 양보다 많은 리소스를 사용할 수도 있고 필요한 것보다 더 자주 비상 상황에 대응할 수도 있지만, 어쨌든 우리는 지속할 수 있다. 사실상 점차 증가하는 시장 압력으로 인해 “인프라의 대부분을 소유”하는 것은 어려워지고 있다. 비즈니스의 많은 부분에서 끊임없는 연결이 필요하고 새로운 파트너를 참여시켜야 한다면, 여러분의 인프라는 어디에서 끝나고 파트너의 인프라는 어디에서 시작되는 것인가? 클라우드 컴퓨팅은 이 질문을 더욱 복잡하게 만들 것이다. 일단 클라우드가 또 다른 배포(운영) 옵션이 되면, 모든 리소스에 대한 고유한 접근 코드를 만드는 것은 불가능해진다.
좋은 소식은 일반적인 분산 시스템에 대해 아이덴티티 및 접근 제어 관리를 지원하는 아키텍처적인 접근법이 존재하며, 이는 사내(on premise), 클라우드 및 하이브리드 시스템에 모두 똑같이 적용될 수 있다는 것이다. 핵심 개념은 거의 모든 것을 클레임 교환과 모델 트랜잭으로 보고 훨씬 더 자연스러운 방식으로 모델링하는 것이다.
이 아티클에서는 이러한 새로운 접근법을 소개한다. 클라우드와 특히 관련이 있는 측면에 특별한 주의를 기울이겠지만, 제시되는 개념과 패턴의 상당부분은 분산 시스템의 특성에 상관없이 적용 가능하다. 여기서 다루고자 하는 문제는 단순한 단일 사이트의 멤버 자격 공급자에 기반한 애플리케이션이 아니라는 점에 유의하길 바란다. 여기서 정해진 원칙은 모든 시스템에 적용된다. 따라서 단순한 상황에도 적용되지만, 파트너 관계, 복잡한 접근 규칙 및 구조화된 아이덴티티 정보를 포괄하는 시나리오에서 그 포괄적인 능력을 최대한 활용할 수 있다.
아래에 나오는 정의를 처음부터 이해하는 것이 어렵다면 고대 로마의 표기법을 사용하여 수를 더했던 중세 시대의 유럽인들이 숫자 “0”을 사용하는 방법을 배우기가 얼마나 어려웠을지 생각해 보도록 한다. 당시 기존 방식의 저항에 부딪혔지만, 더 나은 모델을 채택함으로써 얻은 대가는 더욱 특별했다!

클레임 기반 솔루션 (Claims-based Solutions)
전통적인 아이덴티티 관리 솔루션의 문제는 한 마디로 너무 많은 것을 가정하고 있다는 것이다.
가장 일반적인 가정은 어떤 전지전능한 권한을 가진 중앙 인증 기관이 존재하여 트랜잭션에 참여하는 모든 엔터티를 알고 있어서, 누가 어떤 조건으로 무엇에 접근할 수 있는지 결정할 수 있는 있다고 가정하는 것이다. 이러한 가정은 디렉터리를 통해 관리되는 엔터프라이즈 네트워크와 같은 독립형 시스템에서는 대체적으로 맞지만, 비즈니스 프로세스가 자체적인 아이덴티티 저장소를 갖추고 있는 소프트웨어 패키지 혹은 엑스트라넷에 접근하는 파트너와 고객, 컨설턴트 등과 같은 외부 요소들을 필요로 하기 시작하게 되면 틀린 가정이 된다. 섀도 계정(shadow account) 사용과 같은 전략적 솔루션은 종종 소유하지 않은 무언가를 관리할 수 있는 것처럼 기능해야 하기 때문에 매우 불안정하다.
또 다른 일반적인 가정은 ‘트랜잭션의 모든 참가자는 일관된 아이덴티티 관리 기술을 사용한다‘는 것이다. 다시 한번 말하지만, 이러한 가정은 독립형 시스템(예: 네트워크 소프트웨어)의 경우에는 맞지만, 프로세스에 외부 참가자를 들여놓자 마자 틀린 가정이 된다. 다양한 기술을 수용하는 일반 방식에서는 이러한 상황을 예외로 취급하고 있다. 그 결과, 대체적으로 아이덴티티 전문가(?)라고 여겨지는 개발자가 작성한 수많은 아이덴티티 관리 플러밍 (plumbing) 코드를 리소스 자체에 포함하게 된다. 이는 프리젠테이션 레이어에 비즈니스 로직을 포함하는 것에 대한 오래된 금기보다 더 나쁜 영향을 끼친다. 리소스 내부에서 직접 아이덴티티 플러밍을 처리하는 것은 시스템을 불안정하게 만들고 유지 관리하기 힘들게 할 뿐만 아니라, 시스템 관리자의 삶 또한 암울하게 만든다. 로직이 리소스 자체에 갇혀 있다면, 배포(deploy) 시점에 접근 제어를 어떻게 관리할 수 있겠는가?
클레임에 기반한 접근 방식에서는 각 작업을 원래 소유자인 엔터티에게 할당함으로써 이러한 문제를 방지하며, 모든 참가자의 자율성을 존중해 인위적인 의존 관계와 기대가 형성되는 것을 차단한다. 이것이 바로 좋은 점만 갖춘 SO 아키텍처의 오랜 원칙이다.
이어서 클레임에 기반한 접근 방식에 대해 간략히 설명하도록 하겠다. 이 주제는 그 자체가 아주 방대하다. 사실, 이에 관한 책을 공동 저술한 바 있다. 이 글에서 시사하는 의미를 완벽히 이해하려면 MSDN에서 온라인으로 무료로 이용할 수 있는 Chapter 2(리소스 부분 참조)를 읽어보도록 한다.

기본 정의
여기에서는 클레임 기반 접근법을 살펴보는 과정에서 만나게 될 다양한 개념과 구문에 대한 정의를 소개한다.

클레임 (Claims)
클레임은 또 다른 엔터티(“authority”)에서 명시한 어떤 엔터티(“subject”)에 관한 사실이다.
클레임은 문자 그대로 어떤 주체의 한 측면을 설명하는 모든 것이 될 수 있다. 여기서 주체는 실제 사람일 수도 있으며 추상적인 리소스일 수도 있다. 클레임의 대표적인 예로 “Bob은 22살이 넘는다,” “Bob은 도메인 Contoso.com을 위한 ‘원격 디버거’ 그룹에 소속되어 있다,” “Bob은 Star Alliance 항공사의 Silver Elite 회원이다” 등을 들 수 있다. 클레임은 인증 기관에서 보증한다. 따라서 한 관찰자는 해당 인증 기관의 신뢰성에 따라 해당 클레임이 진술하는 사실을 참으로 간주해야 하는지 여부를 판단할 수 있다.

신뢰 (Trust)
엔터티 B가 발표하는 클레임을 엔터티 A가 참으로 간주한다면 엔터티 A는 엔터티 B를 신뢰한다고 말할 수 있다. 이 정의는 매우 단순하면서도 본 글의 취지에 잘 부합한다. B가 어떤 주체에 대해 말하는 것을 신뢰하면 해당 클레임을 직접 확인하는 데 따르는 번거로움으로부터 A를 해방시켜 준다. 단, 엔터티 A는 여전히 해당 클레임이 실제로 B에 의해 제공되는 것이고 위조가 아니라는 것을 확인해야 한다.

토큰 (Tokens)
보안 토큰은 인증 기관이 서명한 XML 구문으로, 클레임과 (아마도) 자격 증명 정보를 포함한다.
보안 토큰은 아티팩트, 즉 XML 조각(리소스 부분 참조: WS-Security) 으로 다음 두 가지 기능을 수행할 수 있다. 
* 클레임을 전파하는 수단을 제공한다. 
* 암호화 작업을 지원하거나, 자격 증명 인증에 참여할 수 있다.

비대칭 암호화의 속성 덕분에, 토큰이 서명되었다는 사실은 해당 토큰이 포함하는 클레임의 진원지를 확인하는 것을 더욱 쉽게 만든다.
또한, 토큰은 암호화 및 SOAP 메시지의 서명에서 참조될 수 있는 키 및 키에 관한 참조 등과 같은 암호화 자료를 포함하고 있다. 이러한 작업은 자격 증명 확인 과정의 일환으로 이용될 수 있다. 이러한 맥락에서 우리는 호출자가 기존 사용자임을 확인하는 어떤 메커니즘의 일부로 사용될 수 있는 자료를 “자격 증명”이라고 간주한다. 암호 및 인증서가 좋은 예이다(보다 자세한 내용은 리소스 부분 참조: Vittorio Bertocci의 블로그, The Tao of Authentication).
토큰은 X509 인증서와 같은 특정 인증 기술의 “프로젝션 (projection)” 일 수 있으며, 발급될 수도 있다. (발급된 토큰의 한 예로 웹 서비스 보안 관련 문맥에서 언급된 것을 들어본 적이 있을만한 널리 사용되는 토큰 형태인 SAML을 들 수 있다.) 시스템은 미래 지향적이어서, 새로운 기술이 등장하면 적합한 토큰 “프로젝션”을 프로필 사양으로 문서화할 수 있다.

STS(보안 토큰 서비스)
보안 토큰 서비스는 WS-Trust에서 설명한 바와 같이 보안 토큰을 발급하는 서비스를 말한다(리소스 부분 참조: WS-Trust).
STS (그림 1 참조)는 RST(보안 토큰 요청) 메시지를 처리하고 RSTR(보안 토큰 응답 요청)을 통해 토큰을 발급할 수 있다. RST 처리는 일반적으로 호출자를 인증하고 호출자 자체를 설명하는 클레임이 포함된 토큰을 발행하는 것으로 이루어진다. STS가 RST에서 수신한 클레임을 변형한 결과물인 클레임을 발급하는 경우도 있다(보다 자세한 내용은 리소스 부분 참조: Vittorio Bertocci의 블로그, R-STS).

clip_image002

그림 1. 보안 토큰의 구조

IdM(Identity Metasystem)
IdM( Identity Metasystem)은 클레임 확보를 위해 기술과 상관없이 정의한 추상화 계층을 제공하는 모델이다.
이것은 모델을 온전하게 설명하지 않는 매우 단순화된 정의이다. 예를 들어, 정책 배포 및 시스템 관리를 언급하지 않았다(리소스 부분 참조: WS-Security, WS-Trust).
모든 아이덴티티 기술은 동일한 작업을 수행하는 경향이 있으며, 공통된 패턴을 따르고 거의 동일한 기능 역할을 다룬다. IdM은 이러한 패턴과 역할을 추상적으로 기술하면서, 클레임 교환에 관한 모든 시스템 동작을 모델링한다. 단, 이러한 패턴 및 역할이 특정 기술에 어떤 방식으로 구현되는가에 관한 세부 정보는 남겨둔다. 필요한 추상화 수준은 WS-* 사양의 제품군과 같이 상호 운용 가능한 개방형 프로토콜을 활용하여 달성한다.
IdM은 다음 세 가지 역할을 설명한다. 
* 주체(Subject). 주체는 클레임 정의에서 언급했던 주체 엔터티로, 트랜잭션에서 확인되어야 하는 누군가(또는 무엇)을 의미한다.
* RP(Relying Party). RP는 이용하기 전에 인증을 거쳐야 하는 리소스이다. RP의 예로 웹 사이트와 웹 서비스를 들 수 있다. RP라는 명칭은 확인해야 하는 주체에 관한 클레임을 확보하기 위해 IP에 의존(rely)한다는 사실에서 유래한 것이다. 
* IP(Identity Provider). IP는 클레임 정의에서 언급했던 인증 기관 엔터티를 말한다. IP는 주체에 관한 정보를 소유하며 클레임 형태로 주체를 표현할 수 있다. 특정 IP를 신뢰하는 모든 RP는 이러한 클레임에 의존하여 주체에 대한 인증 및 권한 부여와 관련된 결정을 내릴 수 있다. 참고: 종종 IP는 STS를 사용하여 토큰 형태로 클레임을 발급하지만, 이것이 곧 모든 STS가 IP임을 의미하는 것은 아니다. STS는 IP가 작업을 완료하기 위해 사용하는 도구이다.

Posted by 장현춘