기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS Blu Age 현대화된 메인프레임 애플리케이션에서 Microsoft Entra ID 기반 인증 구현
Vishal Jaswani 및 Rimpy Tewani, Amazon Web Services
요약
AWS Mainframe ModernizationAWS Blu Age를 사용한 리팩터링 패턴과 같은 리팩터링 패턴을 사용하여 현대화된 메인프레임 애플리케이션은 인증 메커니즘을 새 애플리케이션 아키텍처에 신중하게 통합해야 합니다. 이 통합은 일반적으로 현대화 후 활동으로 처리됩니다. 작업은 복잡할 수 있으며, 최신 보안 표준 및 클라우드 네이티브 관행에 맞게 기존 인증 시스템을 마이그레이션하거나 외부화하는 경우가 많습니다. 개발자는 현대화된 애플리케이션의 런타임 환경 및 라이브러리의 제약 내에서 작동하는 동안 인증을 효과적으로 구현하는 방법을 고려해야 합니다. 현대화 후는 AWS Blu Age 최신 코드를 Amazon Cognito 및 Microsoft Entra ID
이 패턴은 연구 및 시도에 시간을 소비하지 않고 인증 공급자가 Microsoft Entra ID인 경우 현대화된 애플리케이션에서 인증 메커니즘을 구현하는 방법을 설명합니다. 패턴은 다음을 제공합니다.
Microsoft Authentication Library(MSAL) 및 인증 구현에 필수적인 기타 Microsoft Entra ID 설명서의 필드 테스트 및 관련 Angular 라이브러리.
OAuth 2.0을 사용하여 Spring Security를 활성화하기 위해 AWS Blu Age 런타임에 필요한 구성입니다.
인증된 사용자의 자격 증명을 캡처하여 AWS Blu Age 런타임에 전달하는 라이브러리입니다.
구현할 것을 권장하는 보안 조치입니다.
Microsoft Entra ID 설정에서 일반적으로 발생하는 문제에 대한 문제 해결 팁입니다.
참고
이 패턴은 AWS 전문 서비스
사전 조건 및 제한 사항
사전 조건
AWS Blu Age 메인프레임 현대화 리팩터링 도구에서 생성한 현대화된 애플리케이션입니다. 이 패턴은 CardDemo
를 샘플 오픈 소스 메인프레임 애플리케이션으로 사용합니다. AWS Blu Age OAuth 확장 라이브러리는 AWS 전문 서비스에
참여하는 동안 AWS Blu Age 팀에서 제공합니다. 현대화된 애플리케이션을 배포하고 테스트 AWS 계정 하는 활성 입니다.
AWS Blu Age 구성 파일 및 Microsoft Entra ID 기본 사항에 대한 지식.
제한 사항
이 패턴은 OAuth 2.0 인증 및 기본 토큰 기반 권한 부여 흐름을 다룹니다. 고급 권한 부여 시나리오와 세분화된 액세스 제어 메커니즘은 범위에 포함되지 않습니다.
일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 AWS 서비스 리전별
섹션을 참조하세요. 특정 엔드포인트는 서비스 엔드포인트 및 할당량을 참조하고 서비스 링크를 선택합니다.
제품 버전
이 패턴은 다음을 사용하여 개발되었습니다.
AWS Blu Age 런타임 버전 4.1.0(패턴은 이전 버전과 호환되는 이후 버전에서도 작동함)
MSAL 라이브러리 버전 3.0.23
Java 개발 키트(JDK) 버전 17
각형 버전 16.1
아키텍처
소스 기술 스택
일반적인 메인프레임 환경에서는 사용자 프로필을 통해 인증이 구현됩니다. 이러한 프로필은 시스템에 대한 사용자를 식별하고, 로그인할 수 있는 사용자를 정의하고, 사용자가 시스템 리소스에서 수행할 수 있는 함수를 지정합니다. 사용자 프로필은 보안 책임자 또는 보안 관리자가 관리합니다.
대상 기술 스택
Microsoft Entra ID
현대화된 Java Spring 부팅 기반 백엔드
AWS Blu Age 런타임
OAuth 2.0을 사용한 Spring Security
Angular 단일 페이지 애플리케이션(SPA)
대상 아키텍처
AWS Blu Age 런타임은 기본적으로 OAuth 2.0 기반 인증을 지원하므로 패턴은 해당 표준을 사용하여 백엔드 APIs를 보호합니다.
다음 다이어그램은 프로세스 흐름을 보여줍니다.
참고
이 다이어그램에는 데이터베이스 현대화의 예로 Amazon Aurora가 포함되어 있지만 Aurora는이 패턴의 단계에 포함되지 않습니다.

여기서 각 항목은 다음과 같습니다.
사용자가 Microsoft Entra ID로 인증을 시도합니다.
Microsoft Entra ID는 애플리케이션이 후속 호출에서 사용하는 새로 고침, 액세스 및 ID 토큰을 반환합니다.
MSAL 인터셉터에는 AWS Blu Age 런타임을 호출하기 위한 HTTPS 요청의
Authorization
헤더에 액세스 토큰이 포함되어 있습니다.AWS Blu Age
extension-oauth
라이브러리는 AWS Blu Age 런타임 구성 파일(application-main.yml
)을 사용하여 헤더에서 사용자 정보를 추출하고이 정보를SharedContext
객체에 배치하여 비즈니스 로직이 이를 사용할 수 있도록 합니다.참고
SharedContext
는 현대화된 애플리케이션 전체에서 애플리케이션 컨텍스트 및 상태 정보를 관리하는 AWS Blu Age에서 제공하는 런타임 구성 요소입니다. AWS Blu Age 런타임 구성 요소 및 업데이트에 대한 자세한 내용은 AWS Mainframe Modernization 설명서의 AWS Blu Age 릴리스 정보를 참조하세요.application-main.yml
파일에 대한 자세한 내용은 AWS Mainframe Modernization 설명서의 AWS Blu Age 런타임에 대한 구성 설정을 참조하세요.AWS Blu Age 런타임은 토큰이 있는지 확인합니다.
토큰이 있는 경우 Microsoft Entra ID와 통신하여 토큰의 유효성을 확인합니다.
토큰이 없는 경우 AWS Blu Age 런타임은 HTTP 상태 코드 403과 함께 오류를 반환합니다.
토큰이 유효하면 AWS Blue Age 런타임에서 비즈니스 로직을 계속할 수 있습니다. 토큰이 유효하지 않은 경우 AWS Blu Age 런타임은 HTTP 상태 코드 403과 함께 오류를 반환합니다.
OAuth 2.0 워크플로
OAuth 2.0 워크플로의 상위 수준 다이어그램은 Microsoft Entra 설명서를
도구
AWS 서비스
AWS Mainframe Modernization는 메인프레임에서 AWS 관리형 런타임 환경으로의 마이그레이션 및 현대화를 계획하고 구현하는 데 도움이 되는 도구와 리소스를 제공합니다. AWS Blu Age에서 제공하는이 서비스의 리팩터링 기능을 사용하여 레거시 메인프레임 애플리케이션을 변환하고 현대화할 수 있습니다.
코드 리포지토리
Microsoft Entra ID와의 통합을 보여주기 위해 CardDemo 애플리케이션이 업데이트되었습니다. 이 패턴에 대한 GitHub 리포지토리
백엔드 구성
이 패턴은 백엔드 애플리케이션에서 OAuth 2.0을 사용하여 Spring Security를 활성화하려면 application-main.yml
구성 파일을 변경해야 합니다. .yml
파일은 다음과 같습니다.
gapwalk-application.security: enabled gapwalk-application: security: identity: oauth issuerUri: ${issuerUrl} claim: claims: - claimName: upn claimMapValue: username spring: autoconfigure: exclude: - org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration - org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration security: oauth2: client: registration: azure: client-id: {clientId} client-secret: ${clientSecret} provider: azure authorization-grant-type: authorization_code redirect-uri: ${redirectUri} scope: openid provider: azure: authorization-uri: ${gapwalk-application.security.issuerUri}/oauth2/v2.0/authorize token-uri: ${gapwalk-application.security.issuerUri}/oauth2/v2.0/token jwk-set-uri: ${gapwalk-application.security.issuerUri}/discovery/v2.0/keys resourceserver: jwt: jwk-set-uri: ${gapwalk-application.security.issuerUri}/discovery/v2.0/keys
AWS Blu Age OAuth 확장 필터 라이브러리
AWS Blu Age OAuth 확장 라이브러리는 AWS 전문 서비스에
이 라이브러리는 이전 코드 블록에 표시된 application-main.yml
파이의 claim.claims
구성을 읽습니다. 이 구성은 목록입니다. 목록의 각 항목은 claimName
및의 두 가지 값을 제공합니다claimMapValue
.는 프런트엔드에서 전송한 JSON 웹 토큰(JWT)의 키 이름을 claimName
나타내며 claimMapValue
는의 키 이름입니다SharedContext
. 예를 들어 백엔드에서 사용자 ID를 캡처하려면 claimName
를 Microsoft Entra ID에서 제공하는 userId
를 포함하는 JWT의 키 이름으로 설정하고 claimMapValue
를 키 이름으로 설정하여 백엔드 코드에서 사용자 ID를 가져옵니다.
예를 들어 UserId
에서를 설정하는 경우 다음 코드를 사용하여 사용자 ID를 추출할 claimMapValue
수 있습니다.
SharedContext.get().getValue("userId", [UserId]);
모범 사례
이 패턴을 구현할 때 다음과 같은 중요한 보안 고려 사항을 고려하세요.
중요
이 패턴은 인증 통합의 기반을 제공합니다. 프로덕션에 배포하기 전에 비즈니스 요구 사항에 따라이 섹션에서 설명하는 것 외에도 보안 조치를 구현하는 것이 좋습니다.
AWS 구성 보안. 민감한 구성 값을에서
application-main.yml
로 이동합니다 AWS Secrets Manager. 예를 들어 Secrets Manager를 사용하여 다음 속성을 구성합니다.security: oauth2: client: registration: azure: client-id: {clientId} client-secret: ${clientSecret}
Secrets Manager를 사용하여 AWS Blu Age 파라미터를 구성하는 방법에 대한 자세한 내용은 AWS Mainframe Modernization 설명서의 AWS Blu Age 런타임 암호를 참조하세요.
런타임 환경 보호. 적절한 AWS 보안 제어를 사용하여 현대화된 애플리케이션 환경을 구성합니다.
server: tomcat: remoteip: protocol-header: X-Forwarded-Proto remote-ip-header: X-Forwarded-For forward-headers-strategy: NATIVE
Amazon CloudWatch 로깅. 파일을 추가하는 것이 좋습니다
logback-spring.xml to src/main/resources
.<configuration> <appender name="CLOUDWATCH" class="com.amazonaws.services.logs.logback.CloudWatchAppender"> <logGroup>/aws/bluage/application</logGroup> <logStream>${AWS_REGION}-${ENVIRONMENT}</logStream> <layout> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </layout> </appender> <root level="INFO"> <appender-ref ref="CLOUDWATCH"/> </root> </configuration>
CloudWatch를 사용하여 추적을 활성화하는 방법에 대한 자세한 내용은 CloudWatch 설명서의 추적에서 로그 상관 관계 활성화를 참조하세요.
토큰 구성 및 처리. 보안 요구 사항에 맞게 Microsoft Entra ID에서 토큰 수명을 구성합니다. 액세스 토큰이 1시간 이내에 만료되도록 설정하고 새로 고침 토큰이 24시간 이내에 만료되도록 설정합니다. AWS Blu Age 런타임 구성(
application-main.yml
)에서 Entra ID 애플리케이션 등록의 정확한 발급자 URI 및 대상 값으로 JWT 검증이 올바르게 구성되었는지 확인합니다.토큰이 만료되고 새로 고쳐지는 경우:
Angular 애플리케이션의 오류 인터셉터는 MSAL을 통해 새 토큰을 가져와 401 응답을 처리합니다.
새 토큰은 후속 요청과 함께 전송됩니다.
AWS Blu Age 런타임의 OAuth 필터는 새 토큰을 검증하고 현재 사용자 정보로 자동으로 업데이트
SharedContext
합니다. 이렇게 하면 비즈니스 로직이SharedContext.get().getValue()
호출을 통해 유효한 사용자 컨텍스트에 계속 액세스할 수 있습니다.
AWS Blu Age 런타임 구성 요소 및 업데이트에 대한 자세한 내용은 AWS Blu Age 릴리스 정보를 참조하세요.
AWS Blu Age 런타임 보안. AWS Blu Age에서 제공하는
oauth2-ext
라이브러리는 적절한 파일 권한이 있는 올바른 공유 디렉터리 위치({app-server-home}/shared/
)에 배치해야 합니다. 로그의SharedContext
객체 모집단을 확인하여 라이브러리가 JWTs하는지 확인합니다.특정 클레임 구성. 에서 Microsoft Entra ID에서 필요한 클레임을 명시적으로
application-main.yml
정의합니다. 예를 들어 사용자의 이메일과 역할을 캡처하려면 다음을 지정합니다.gapwalk-application: security: claim: claims: - claimName: upn claimMapValue: username - claimName: roles claimMapValue: userRoles - claimName: email claimMapValue: userEmail
오류 처리. 오류 처리를 추가하여 Angular 애플리케이션의 인증 실패를 해결합니다. 예:
@Injectable() export class AuthErrorInterceptor implements HttpInterceptor { intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { return next.handle(request).pipe( catchError((error: HttpErrorResponse) => { if (error.status === 401) { // Handle token expiration this.authService.login(); } if (error.status === 403) { // Handle unauthorized access this.router.navigate(['/unauthorized']); } return throwError(() => error); }) ); } }
세션 제한 시간 구성. AWS Blu Age 런타임과 Microsoft Entra ID 모두에서 세션 제한 시간 설정을 구성합니다. 예를 들어
application-main.yml
파일에 다음 코드를 추가합니다.server: servlet: session: timeout: 3600 # 1 hour in seconds
MsalGuard. 무단 액세스를 방지하려면 모든 보호된 경로에 대해 MsalGuard 기능을 구현해야 합니다. 예:
const routes: Routes = [ { path: '', redirectTo: '/transaction-runner', pathMatch: 'full' }, { path: 'transaction-runner', component: TransactionRunnerComponent, canActivate:guards }, { path: 'user-info', component: UserInfoComponent, canActivate:guards }, { path: 'term/:transid/:commarea', component: TermComponent, canActivate:guards }, { path: 'code', component: TransactionRunnerComponent } ];
MsalGuard 보호 기능이 없는 경로는 인증 없이 액세스할 수 있으므로 민감한 기능이 노출될 수 있습니다. 인증이 필요한 모든 경로에 가드가 구성에 포함되어 있는지 확인합니다.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
Microsoft Azure 계정을 설정하여 Entra ID를 생성합니다. | 옵션 및 지침은 Microsoft Azure 웹 사이트를 | 앱 개발자 |
애플리케이션에서 Microsoft Entra ID를 설정합니다. | Angular SPA에 Microsoft Entra ID B2C(Azure AD B2C) 인증을 추가하는 방법은 Microsoft 설명서를
| 앱 개발자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
GitHub 리포지토리를 복제하여 인증에 필요한 Angular 코드를 가져옵니다. | 다음 명령을 실행하여이 패턴과 함께 제공되는 GitHub 리포지토리
| 앱 개발자 |
Tomcat 서버에 AWS Blu Age 현대화된 코드를 배포하여 인증을 구현합니다. | Tomcat 및 Angular 개발 서버가 포함된 로컬 환경을 설정하려면 AWS 전문 서비스와의 고객 참여의 일환으로 AWS Blu Age 팀이 제공하는 설치 단계를 따르세요. | 앱 개발자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
AWS Blu Age 런타임 보안을 활성화하여 AWS Blu Age REST API 엔드포인트를 보호합니다. | 다음과 같이 AWS Blu Age 런타임에서 사용하는
| 앱 개발자 |
로컬 환경의 예제 코드를 Blu Age 현대화된 Angular 코드 베이스에 통합합니다. | 예제를 AWS Blu Age 현대화된 Angular 코드 베이스에 통합하는 방법에 대한 자세한 내용은이 패턴의 앞부분에 있는 코드 리포지토리 섹션을 참조하세요. | 앱 개발자 |
| AWS Blu Age 현대화된 애플리케이션이 사용할 수 있도록 애플리케이션 서버의 공유 디렉터리에
| 앱 개발자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
프런트엔드 애플리케이션을 배포합니다. | 다음 명령을 실행하여 프런트엔드 애플리케이션을 로컬에서 시작합니다.
참고
| 앱 개발자 |
백엔드 애플리케이션을 시작합니다. | Eclipse에서 Tomcat 서버를 시작합니다. | 앱 개발자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
로그인 기능을 테스트합니다. | 에서 로컬로 배포된 애플리케이션에 액세스 참고HTTP는 데모용으로 사용됩니다. 프로덕션 환경 또는 기타 공개적으로 액세스할 수 있는 환경에서는 보안을 위해 HTTPS를 사용해야 합니다. 로컬 개발의 경우에도 가능하면 HTTPS를 설정하는 것이 좋습니다. Microsoft 로그인 프롬프트가 나타나야 하며 Microsoft Entra ID로 구성된 사용자는 애플리케이션에 액세스할 수 있어야 합니다. | 앱 개발자 |
요청에서 권한 부여 헤더를 테스트합니다. | 참고다음 단계에서는 CardDemo
| 앱 개발자 |
로그아웃 기능을 테스트합니다. | 로그아웃하려면 종료를 선택하고 애플리케이션에 다시 액세스해 봅니다. 새 로그인 프롬프트가 표시되어야 합니다. | 앱 개발자 |
문제 해결
문제 | Solution |
---|---|
Microsoft Entra ID에서 발급한 토큰은 Spring Boot OAuth 2.0 보안과 호환되지 않습니다. | 이 문제에 대한 해결 방법은 OAuth 블로그의 Microsoft Entra ID OAuth Flow |
일반적인 토큰 관련 질문. | JWT 토큰의 콘텐츠를 디코딩하고 보려면 https://jwt.io/ |
관련 리소스
AWS Blu Age를 사용하여 애플리케이션을 리팩터링하는 방법에 대한 자세한 내용은 AWS Mainframe Modernization 설명서를 참조하세요.
OAuth 2.0의 작동 방식을 이해하려면 OAuth 2.0 웹 사이트를
참조하세요. Microsoft Authentication Library(MSAL)에 대한 개요는 Microsoft Entra 설명서를
참조하세요. AS/400 시스템의 사용자 프로필에 대한 자세한 내용은 IBM i(AS400) 자습서를
참조하세요. Microsoft 자격 증명 플랫폼의 OAuth 2.0 및 OpenID Connect(OIDC) 인증 흐름은 Microsoft Entra 설명서를
참조하세요.