출처 : http://www.dev2dev.co.kr/pub/a/2005/11/saml.jsp


SAML의 실체

by Harold Lockhart
2005/11/09

개요

웹 서비스, 포털 및 통합 애플리케이션을 통해 점점 더 많은 시스템이 서로 링크되면서 보안 정보를 공유 및 교환할 수 있는 표준에 대한 필요성이 점점 높아지고 있습니다. SAML(Security Assertion Markup Language)은 다양한 환경에서 ID 및 인증 정보를 교류하기 위한 강력하면서도 확장 가능한 일련의 데이터 포맷을 제공합니다. SAML의 필요성 및 정의를 이끌어 내는 핵심 개념인 ID 통합(Identity Federation)은 권한 부여 같은 보안 서비스를 구현하기 위해 독립적으로 관리되는 다양한 소스를 의미합니다. SSO(Single Sign-on)와 더불어 SAML은 현대 네트워크 환경의 필수 요건입니다.

ID 통합

컴퓨터가 네트워크에 연결되기 전만 해도 독립 실행형 시스템에 구현된 인증 및 권한 부여 같은 보안 서비스는 시스템 자체에 포함되어 있었습니다. 따라서 키, 암호, 권한을 결정하기 위한 사용자 정보, 권한 부여 정책뿐만 아니라 인증을 수행하는 데 필요한 모든 코드도 이를 사용하는 시스템에 들어 있었습니다. 시스템을 나중에 네트워크에 연결하는 경우에도 처음에 아주 조금만 변경하면 가능했습니다. 각 시스템은 하나의 섬과 같았고, 사용자들은 액세스하려는 각 시스템에 계정을 가져야 했습니다.

이러한 접근 방법은 단점이 많았습니다. 일례로, 계정마다 암호, 그룹 또는 다른 속성을 사용하므로 사용자 및 관리자가 여러 계정을 설정하는 것이 불편했습니다. 또한 누군가 조직을 떠날 경우 계정 변경 또는 삭제가 사용자의 책임이었기 때문에 관리자가 속성을 변경하느라 많은 시간을 들여야 했습니다. 만일 더욱 강력한 인증 메서드를 사용할 경우 각 시스템을 개별적으로 업데이트해야 했습니다.

Single Sign-on

World Wide Web의 등장으로 여러 시스템 상에서 단일 웹 사이트를 호스팅하는 것이 일반화되었습니다. 그러나 단지 서로 다른 시스템에서 사용자의 다양한 요청을 처리한다는 이유만으로 사용자가 여러 번 로그인해야 한다면 이것은 상당히 번거로울 것입니다. 마찬가지로 포털에서도 사용자가 서로 다른 애플리케이션에 액세스할 때마다 로그인하지 않아야 합니다. SSO(Single Sign-on)는 초기에는 일종의 생산성 향상을 위한 사치품 정도로 여겨졌지만 이제는 적어도 사용자가 하나의 통합 시스템을 경험하고자 한다면 꼭 필요한 요건이 되었습니다.

게다가 네트워크가 점점 대형화되면서 사용자에 관한 모든 정보를 한 곳에 모으기가 불가능해졌을 뿐만 아니라 아무도 그런 방식을 바라지 않게 되었습니다. 예를 들면 의사의 경우 진료 기록 관리, 브로커는 주식 보유 내역, 보험 에이전트는 증권 정보 보유, 회계사는 금융 및 세금 기록 보관 등과 같이 수많은 사용자 및 조직은 개인과 관련된 다양한 종류의 개인 정보를 보유하고 있습니다. 계속해서 이러한 모든 정보를 하나의 지점으로 옮기는 동시에 데이터를 정확하고, 항상 최신으로 유지하기는 더욱 어렵습니다. 더구나 정보를 이전하면 전송 중에 데이터를 손실하거나 도난 당할 확률도 높아집니다.

하지만 여전히 사용자 인증 및 권한 부여를 위해 다양한 유형의 정보를 네트워크 전체에서 사용할 수 있도록 유지해야 합니다. 이것이 바로 ID 통합의 목적입니다. 권한 부여와 같은 목적으로 다양한 소스로부터 단일 사용자에 관한 데이터를 결합합니다. 조직마다 서로 다른 제품을 사용하여 그들이 가지고 있는 ID 데이터를 관리하려고 하기 때문에 네트워크 상에서 이러한 데이터를 보유하고 있는 곳에서 사용될 곳으로 이동하기 위해서는 하나의 표준이 필요합니다. 마찬가지로 많은 제품들이 웹 Single Sign-on을 제공한다 하더라도 표준이 있어야 서로 다른 제품 간에 이를 구현할 수 있습니다. 이것이 바로 SAML을 사용하게 된 이유입니다.

SAML 기초

SAML은 다음과 같은 기능을 제공하여 보안 정보의 수신, 전송 및 공유와 관련된 모든 기능을 표준화합니다.

  • 사용자 보안 정보에 대한 XML 포맷을 제공하고 이러한 정보를 요청 및 전송하기 위한 포맷을 제공합니다.
  • SOAP 같은 프로토콜에서 이러한 메시지를 사용하는 방법을 정의합니다.
  • 웹 SSO와 같이 일반적인 특정 이용 사례에 대해 자세한 메시지 교환 방법을 지정합니다.
  • 사용자의 신원을 노출시키지 않고 사용자 속성을 결정하는 기능을 비롯하여 여러 가지 개인 정보 보호 메커니즘을 지원합니다.
  • Unix, Microsoft Windows, X.509, LDAP, DCE, XCML 등 널리 사용되는 기술에서 제공하는 포맷으로 ID 정보를 처리하는 방법을 자세히 알려줍니다.
  • 메타데이터 스키마를 수식화하여 참여하는 시스템에서 지원하는 SAML 옵션과 통신할 수 있도록 합니다.

더욱이 SAML은 높은 유연성 유지를 위해 특별히 설계되어 아직까지 표준으로 해결되지 않는 요구 사항을 처리할 수 있을 정도로 확장이 가능합니다.

SAML 역할, 어설션(Assertions) 및 문(Statement)

통합 환경은 적어도 다음 세 가지 역할과 관련이 있습니다.

  • 공급 업체(Relying Party) - ID 정보를 사용하는 업체로, 통상적으로 어떤 요청을 허용할 것인지 결정하는 서비스 공급자를 말함.
  • 어설션 업체(Asserting Party) - 보안 정보를 제공하는 업체로, SAML에서는 이들을 " ID 공급자"라고 함.
  • 대상(Subject) - ID 정보와 관련된 사용자

모든 환경에는 여러 개의 대상 및 서비스 공급자가 있습니다. ID 공급자도 여럿이 있을 수 있습니다.

기본적으로 서비스 공급자 또는 공급 업체가 알아야 할 세가지는 다음과 같습니다.

  1. ID 정보
  2. 요청을 하는 업체가 대상이라는 사실
  3. ID 공급자는 이러한 정보를 제공하기로 되어 있다는 사실

SAML에서 어설션(Assertion) 은 이러한 정보를 전달합니다. 어설션에는 머리글 정보, 대상 이름 및 하나 이상의 이 포함되어 있습니다. 머리글에는 ID 공급자 이름 및 발행일 및 만료일 같은 기타 정보가 포함되어 있습니다.

가장 중요한 두 가지 문 유형은 다음과 같습니다.

  • 인증 문(Authentication Statements) - 대상이 특정 시간 및 장소에서 특정 메서드를 사용하여 인증되었음을 보고합니다. SAML은 20가지가 넘는 다양한 인증 메서드를 자세하게 정의합니다. 인증 문은 SSO를 지원하는데, 여기서는 ID 공급자가 서비스 공급자를 대신하여 로그온을 수행합니다.
  • 속성 문(Attribute Statements) - 대상과 관련된 속성을 포함합니다. Groups 및 Roles은 전형적인 속성입니다. 그러나 속성 문에는 재무 데이터 또는 다른 속성도 전달할 수 있습니다.

어설션은 두 가지 유형의 문을 모두 전달할 수 있고 추가 문 유형을 정의할 수도 있습니다. 사실 XACML에서 정책을 전달하기 위한 문 및 권한 부여 결정의 결과를 알려주기 위한 또 다른 문도 정의된 적이 있습니다.

SAML의 강점 중 하나는 유연성입니다. ID 공급자는 어설션을 디지털로 서명할 수 있지만 정보의 무결성을 보장하기 위해 SSL 같은 다른 메서드를 사용할 수 있는 옵션이 있습니다. 어설션(Assertion)에는 대상 확인(Subject Confirmation)이라는 요소가 포함되어 있는데, 서비스 공급자는 이 요소를 사용하여 어설션의 정보가 현재 요청하고 있는 업체를 가리키는지 여부를 결정합니다. SAML을 통해 서비스 공급자는 이러한 목적을 위해 다양한 수단을 사용할 수 있습니다.

바인딩 및 프로파일

SAML 어설션이 ID 공급자에서 서비스 공급자에게로 이동하기는 하지만 서비스 공급자도 다음과 같은 기타 경로를 통해 동일한 작업을 수행할 수 있습니다. 서비스 공급자는 전용 채널을 통해 어설션을 직접 얻을 수 있습니다. 가능성 있는 또 다른 방법은 요청하는 대상이 어설션을 전달하고 이를 서비스 공급자에게 제공하는 것입니다. 세 번째 방법은 또 다른 노드를 통해 어설션을 릴레이하는 것입니다. 웹 서비스 환경에서는 SOAP 머리글이 어설션을 전송할 수 있습니다.

SAML은 서비스 공급자가 어설션을 직접 얻는 데 사용할 수 있는 일련의 요청 및 응답 메시지를 XML에 정의합니다. 이러한 요청 메시지는 예를 들어 "John Smith에 관한 모든 속성"과 같이 서비스 공급자가 원하는 것을 지정합니다. 응답 메시지는 요청에 일치하는 하나 이상의 어설션을 반환합니다. 서로 다른 제품이 상호 운용될 수 있도록 하려면 네트워크 프로토콜이 이러한 요청 및 응답을 전송하는 방법도 지정해야 합니다.

SAML SOAP 바인딩은 SOAP 메시지의 본문에 이를 전송하는 방법을 지정합니다. PAOS 바인딩은 휴대폰과 같이 네트워크로부터 요청을 수신할 수는 없고 보낼 수만 있는 장치를 위해 설계되었습니다. 이것은 HTTP 응답에 전송된 메시지를 사용하여 HTTP 이전 프로그램에서 SOAP를 실행합니다. Browser POST 및 Artifact Profiles은 표준 웹 브라우저 동작을 중심으로 설계되었습니다. POST Profile에서 SAML 응답은 브라우저를 통해 POST 되는 서식으로 눈에 보이지 않는 필드에 전달됩니다. Artifact Profile에서는 Artifact라는 임의의 비트 문자열이 서비스 공급자에게 전달되고, 서비스 공급자는 이를 사용하여 전용 백 채널에서 상응하는 어설션을 요청합니다.

SAML은 통합 ID 환경을 지원하기 위해 여러 가지 다른 메커니즘을 제공합니다. 어떤 프로토콜은 서비스 공급자가 몇몇 가능한 ID 공급자 중에서 특정 클라이언트 요청을 보낼 곳을 결정할 수도 있고, 다른 프로토콜에서는 두 개의 ID 공급자가 동일한 사용자에 대해 소유하고 있는 각각의 계정을 결합할 수도 있습니다. 예를 들어, 한 공급자는 사용자를 John Smith로 알고 있고 다른 공급자는 Jonathan K. Smith로 알고 있을 수 있습니다.(일반적으로 이것은 개인 정보 보호 상의 이유로 사용자 허락이 필요합니다.)

또한 대상의 장기 ID가 노출되지 않도록 개인 정보를 보호하는 임시 식별자를 사용할 수도 있습니다. 위의 예에서 계속해서, 한 ID 공급자는 Subject ABC123이 포함된 어설션이 John Smith를 가리킨다는 것을 알 수 있고, 다른 공급자는 ABC123과 Jonathan K. Smith를 연결할 수 있습니다. 그러나 어느 쪽도 상대가 사용하는 계정 이름을 볼 수 없습니다. 그 다음 날에는 전혀 다른 대상을 사용하여 써드파티가 사용 패턴을 감지하지 못하도록 할 수 있습니다.

SAML은 모든 서비스 공급자 및 ID 공급자에게 사용자가 서명했음을 알리기 위해 간단한 로그아웃 프로토콜을 지정합니다. 이것은 사용자가 시스템을 로그오프했음을 보장하기 위한 메커니즘이라기 보다는 주로 리소스 정리 시 편의를 위한 것입니다. 그 밖에 SAML의 유용한 기능은 다음과 같습니다.

  • 어설션 전체 또는 중요한 부분만 암호화
  • 어설션의 의도된 소비자 지정 .

또한 SAML 표준에는 다양한 기능 조합에 대한 상세한 준수 기준과 보안 및 개인 정보 보호 고려 사항에 관한 문서가 포함되어 있습니다.

결론

SAML은 대규모 환경에서 통합 ID 관리를 구현하기 위한 일련의 유용한 메커니즘을 제공하고, 가장 일반적인 여러 가지 시나리오를 아주 상세하게 지정하여 뛰어난 상호 운용성을 제공합니다. 또한 고유한 요구 사항 및 향후 발생하게 될 요구를 처리할 수 있도록 확장이 가능합니다.

추가 자료

  • SAML - OASIS의 SAML 홈 페이지 (OASIS - Organization for the Advancement of Structured Information Standards.)
  • Project Liberty - Liberty Alliance Project
  • XACML - OASIS의 XACML 홈 페이지

Harold Lockhart 는 BEA의 표준 및 아키텍처 그룹의 책임 엔지니어링 기술자입니다. 세계적으로 알려진 저자이자 강연자인 그는 OASIS 웹 서비스 보안 및 SAML 기술 위원회에서 왕성한 활동을 하고 있습니다.

+ Recent posts