AWS 기술 블로그
기업의 디지털 인증 인프라의 진화: Microsoft Active Directory에서 현대적 인증 솔루션으로의 전환
Microsoft Active Directory(AD)는 Windows 기반 엔터프라이즈 환경에서 사용자 인증 및 권한 관리를 위한 핵심 서비스로 자리매김해 왔습니다. 그러나, 현대의 기술 환경은 급격한 변화를 맞이하고 있습니다. .NET Framework 4.8의 메이저 업데이트 중단과 함께 많은 조직들이 크로스 플랫폼 지원이 가능한 .NET 8+ 환경으로 마이그레이션을 진행하고 있으며, 이는 기존 인증 아키텍처의 변화를 의미하기도 합니다.
특히, 현대의 애플리케이션 환경이 전통적인 데스크톱 중심에서 모바일 및 클라우드 기반 서비스로 확장됨에 따라, 웹 애플리케이션을 위한 보다 유연하고 표준화된 인증 메커니즘의 도입이 시급해졌습니다. 이러한 맥락에서 OpenID Connect(OIDC)는 현대적이고 안전한 인증 솔루션으로 부상하고 있습니다.
본 기술 문서에서는 기존 온프레미스 Microsoft AD 인프라와의 Trust 구성을 통해 원활한 통합을 지원하는 AWS Managed Microsoft AD를 활용하여, IAM Identity Center의 Identity 소스로 구성하고, 이를 Amazon Cognito와 연계하는 고급 인증 아키텍처를 제시합니다. 이를 통해 .NET 웹 애플리케이션에서 OIDC 프로토콜 기반의 견고한 인증 체계를 구현하는 방법론을 살펴보겠습니다.
아키텍처의 개요
주요 구성 요소는 다음과 같습니다.
- AWS Managed Microsoft AD
- AWS IAM Identity Center
- Amazon Cognito
- ASP.NET Core 앱
AWS Managed Microsoft AD는 하이브리드 클라우드 환경에서 핵심적인 ID 브릿지 역할을 수행합니다. 이 서비스를 활용하면 온프레미스의 Microsoft Active Directory와 양방향 트러스트 관계를 구축할 수 있습니다. 이러한 트러스트 설정을 통해 기업은 기존 온프레미스 환경에서 사용하던 사용자 계정과 인증 정보를 AWS 환경에서도 원활하게 활용할 수 있습니다. 이는 사용자 관리의 중복을 제거하고 보안 정책의 일관성을 유지하는 데 결정적인 기여를 합니다.
AWS 환경 내에서의 접근 관리는 IAM Identity Center를 통해 한층 더 강화됩니다. 이 서비스는 SCIM(System for Cross-domain Identity Management) 프로토콜을 지원함으로써, AWS Managed Microsoft AD에 저장된 사용자 정보를 자동으로 프로비저닝합니다. 이러한 통합을 통해 관리자는 사용자 및 그룹 정보를 중복 관리할 필요 없이, AWS에서 제공하는 다양한 서비스에 대한 세분화된 접근 권한을 효율적으로 관리할 수 있습니다. 특히 AWS 콘솔 접근, S3 버킷, EC2 인스턴스 등 리소스별 권한 부여가 간소화됩니다.
아키텍처의 마지막 계층에서는 Amazon Cognito가 애플리케이션 수준의 인증을 담당합니다. Amazon Cognito 사용자 풀을 구성하고 SAML(Security Assertion Markup Language) 프로토콜을 통해 AWS Identity Center와 신뢰 관계를 설정하면, 최종 사용자 애플리케이션에서 OIDC(OpenID Connect) 기반의 현대적인 인증 체계를 구현할 수 있습니다. 이를 통해 개발팀은 보안 표준을 준수하면서도 사용자에게 원활한 로그인 경험을 제공하는 애플리케이션을 보다 신속하게 개발할 수 있습니다.
솔루션 구현
앞서서 설명한 아키텍처에 대한 구체적인 구현 사례로써 아래와 같은 단계로 구현하실 수 있습니다.
- AWS Managed Microsoft AD 구성하기
- AWS Managed Microsoft AD를 IAM Identity Center의 ID 소스로 연결하기
- AWS IAM Identity Center에서 Amazon Cognito 애플리케이션 추가하기
- Amazon Cognito User Pool에서 IAM Identity Center를 외부 IdP로 구성하기
- ASP.NET Core 애플리케이션에서 OIDC 인증 처리하기
각 단계의 상세한 구성에 대해서 다음과 같은 절차로 이뤄집니다.
1. AWS Managed Microsoft AD 구성하기
- AWS Directory Service 접근하기
- AWS 관리 콘솔에 로그인합니다.
- 검색창에 ‘Directory Service’를 입력하거나 서비스 메뉴에서 ‘Directory Service’를 선택합니다.
- ‘Set up directory’ 버튼을 클릭합니다.
- 디렉토리 유형 선택
- ‘Directory type’ 선택 화면에서 ‘AWS Managed Microsoft AD’를 선택합니다.
- ‘Standard Edition’ 또는 ‘Enterprise Edition’을 선택합니다.
- 디렉토리 정보 구성
- 디렉토리 정보
- Directory DNS name: 예) corp.example.com
- Directory NetBIOS name: 예) CORP
- Administrator password: 관리자 계정의 암호 설정
- VPC 설정
- VPC: 디렉토리 서비스가 실행될 VPC 선택
- Subnets: 서로 다른 가용영역의 두 서브넷 선택
- 디렉토리 정보
- 사용자 추가에 대해서는 문서 User and group management in AWS Managed Microsoft AD를 참고하여 관리할 수 있습니다.
2. AWS Managed Microsoft AD를 IAM Identity Center의 ID 소스로 연결하기
- IAM Identity Center 활성화
- AWS 관리 콘솔에 로그인합니다.
- 검색창에 ‘IAM Identity Center’를 입력하거나 서비스 메뉴에서 선택합니다.
- ‘Enable IAM Identity Center’ 버튼을 클릭합니다.
- 리전이 AWS Managed Microsoft AD가 구성된 리전과 동일한지 확인합니다.
- ID 소스 변경하기
- IAM Identity Center 콘솔의 왼쪽 메뉴에서 ‘Settings’를 선택합니다.
- Identity source 섹션에서 ‘Actions’ → ‘Change identity source’를 클릭합니다.
- ‘Active Directory’를 선택합니다.
- Available directories 목록에서 이전에 구성한 AWS Managed Microsoft AD를 선택합니다.
- ‘Next’를 클릭합니다.
- 구성 검토 후 ‘Change identity source’를 클릭합니다.
- AWS 계정 할당
- 왼쪽 메뉴에서 ‘AWS accounts’를 선택합니다.
- AWS 조직의 계정들이 표시됩니다.
- 액세스를 제공할 계정을 선택합니다.
- ‘Assign users or groups’를 클릭합니다.
- 사용자 및 그룹 할당
- 디렉토리 서비스의 사용자나 그룹을 검색합니다.
- 액세스를 부여할 사용자/그룹을 선택합니다.
- ‘Next’를 클릭합니다.
- 이전에 생성한 권한 세트를 선택합니다.
- ‘Next’를 클릭하고 설정을 검토합니다.
- ‘Submit’을 클릭하여 할당을 완료합니다.
3. AWS IAM Identity Center에서 Amazon Cognito 애플리케이션 추가하기
- 애플리케이션 추가
- AWS 관리 콘솔에 로그인합니다.
- 검색창에 ‘IAM Identity Center’를 입력하거나 서비스 메뉴에서 선택합니다.
- 왼쪽 네비게이션 메뉴에서 ‘Applications’ 선택합니다.
- ‘Add application’ 버튼을 클릭합니다.
- 애플리케이션 카탈로그에서 ‘Custom SAML 2.0 application’ 선택합니다.
- 기본 정보 설정
- Display name 항목에 원하는 애플리케이션 이름을 입력합니다. (예: ‘My Cognito App’)
- Description 항목에 애플리케이션 설명을 입력합니다. (선택사항)
- ‘Next’를 클릭합니다.
- SAML 2.0 구성
- IAM Identity Center SAML 메타데이터 파일 다운로드하거나 링크를 저장합니다. (나중에 Amazon Cognito에서 설정 시 필요합니다.)
- Application SAML metadata를 입력합니다
- Application ACS URL: Cognito 사용자 풀의 콜백 URL을 입력합니다. (예: https://USERPOOL-ID.auth.REGION.amazoncognito.com/saml2/idpresponse)
- Application SAML audience: Cognito 사용자 풀 식별자를 입력합니다. (예: urn:amazon:cognito:sp:USERPOOL-ID)
- ‘Submit’을 클릭합니다.
- 속성 매핑 설정
- ‘Details’ 부분의 ‘Actions’를 클릭하여, ‘Edit Attribute Mapping’을 선택합니다.
- “Attribute mappings” 섹션에서 필요한 속성 매핑을 구성합니다.
- 권한 설정
- ‘Assign users’ 클릭합니다.
- 사용자 또는 그룹 선택하여 액세스 권한을 부여합니다.
- ‘Assign users’ 버튼을 클릭하여 완료합니다.
4. Amazon Cognito User Pool에서 IAM Identity Center를 외부 IdP로 구성하기
- User Pool 생성
- AWS 관리콘솔에 로그온합니다.
- 검색창에 ‘Amazon Cognito’를 입력하거나 서비스 메뉴에서 선택합니다.
- ‘Create User Pool’을 클릭합니다.
- Application Type에 ‘Traditional Web Application’을 선택하고, Application Name을 입력합니다.
- ‘Options for sign-in identifiers’에 Email을 체크합니다.
- ‘Create User Directory’를 클릭합니다.
- ‘Go to overview’를 클릭합니다.
- 이후 추가적으로 패스워드 정책이나 MFA 설정을 변경하실 수 있습니다.
- ID provider 설정
- 외쪽 네비게이션 메뉴에서 ‘Social and External Providers’를 클릭합니다.
- ‘Add Identity Provider’를 클릭합니다.
- ‘SAML’을 체크하고 Provider Name (예: iamidc)을 입력합니다.
- ‘Metadata document source’에 IAM Identity Center에서 제공하는 Application SAML metadata를 업로드하거나 URL을 입력합니다.
- ‘Map attributes between your SAML provider and your user pool’에서 User pool의 속성과 SAML 속성을 매핑합니다.
- ‘Add identity provider’버튼을 클릭합니다.
- 로그인 페이지 설정
- 왼쪽 네비게이션 메뉴에서 ‘App Clients’를 클릭합니다.
- 생성한 App Client를 클릭합니다.
- ‘Login Pages’ 탭을 클릭한 후, ‘Edit’버튼을 클릭합니다.
- ‘Managed login pages’에 ‘Allow callback URLs’에는 개발된 웹 애플리케이션이 인증 후 콜백되는 URL을 입력합니다. (예: https://localhost/signin-oidc)
- ‘Identity providers’에 2단계에서 생성한 ID Provider를 선택합니다.
- ‘OAuth 2.0 grant types’은 ‘Authorization code grant’를 선택합니다.
- ‘OpenID Connect scopes’을 추가합니다. (예: Email, OpenID, Profile)
- ‘Save changes’를 눌러 저장합니다.
5. ASP.NET Core 애플리케이션에서 OIDC 인증 처리하기
다음은 ASP.NET Core 애플리케이션에 Amazon Cognito를 활용한 안전한 사용자 인증을 구현하는 예제코드를 살펴보겠습니다. 아래 코드는 OpenID Connect 프로토콜을 통해 Cognito 사용자 풀과 연동하는 방법을 보여주는 핵심 설정입니다.
이 구성 코드는 ASP.NET Core 애플리케이션의 Startup.cs 파일 내 ConfigureServices 메서드의 일부로, 다음과 같은 주요 기능을 구현합니다.
코드는 세 가지 주요 인증 스키마를 설정합니다.
- DefaultAuthenticateScheme: 쿠키 기반 인증을 사용하여 사용자 세션을 유지합니다. (
CookieAuthenticationDefaults.AuthenticationScheme
) - DefaultSignInScheme: 사용자 로그인 정보를 쿠키에 저장합니다. (
CookieAuthenticationDefaults.AuthenticationScheme
) - DefaultChallengeScheme: 인증이 필요할 때 OpenID Connect를 통해 Amazon Cognito로 리디렉션합니다. (
OpenIdConnectDefaults.AuthenticationScheme
)
또한, 환경 구성을 통해 중요한 Cognito 연결 정보를 안전하게 로드합니다:
- 사용자 풀 도메인, ID, 리전
- 클라이언트 ID 및 시크릿
다음과 같은 보안 강화 설정을 확인하실 수 있습니다.
- ResponseType = “code”: 더 안전한 인증 코드 흐름을 사용합니다.
- GetClaimsFromUserInfoEndpoint = true: 사용자 정보 엔드포인트에서 추가 클레임을 가져와 보다 풍부한 사용자 프로필 정보를 제공합니다.
- RequireHttpsMetadata = true: 메타데이터 통신 시 HTTPS 사용을 강제하여 보안을 강화합니다.
- SaveTokens = true: 인증 및 리프레시 토큰을 저장하여 추후 API 호출에 활용할 수 있도록 합니다.
코드는 OnTokenValidated 이벤트 핸들러를 구성하여 토큰이 성공적으로 검증된 후 추가 비즈니스 로직을 실행할 수 있는 확장점을 제공합니다. 여기서는 Cognito의 ID 토큰에서 추가 클레임 정보를 추출하고 처리할 수 있습니다.
기업 인증 인프라의 클라우드 현대화 여정
본 글에서는 기업의 레거시 Active Directory 환경을 AWS 클라우드 기반의 현대적 인증 인프라로 전환하는 방법을 살펴보았습니다. AWS Managed Microsoft AD, IAM Identity Center, 그리고 Amazon Cognito를 결합한 아키텍처는 다음과 같은 핵심 가치를 제공합니다:
- 온프레미스-클라우드 통합 인증 체계 구현
- SAML/OIDC 표준 기반의 보안 강화
- 중앙집중식 사용자 관리 및 접근 제어
특히 ASP.NET Core 환경에서의 OIDC 통합 예시를 통해, 실제 구현 방안을 구체적으로 제시했습니다. 이러한 아키텍처는 레거시 시스템과의 호환성을 유지하면서도 클라우드 네이티브 환경으로의 전환을 가능하게 합니다.
앞으로의 기업 인증 인프라는 이러한 하이브리드 접근 방식을 통해 더욱 안전하고 확장 가능한 형태로 발전해 나갈 것입니다.