AWS Blu Age モダナイズされたメインフレームアプリケーションで Microsoft Entra ID ベースの認証を実装する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Blu Age モダナイズされたメインフレームアプリケーションで Microsoft Entra ID ベースの認証を実装する

Vishal Jaswani と Rimpy Tewani、Amazon Web Services

概要

Refactor with AWS Mainframe ModernizationAWS Blu Age などのリファクタリングパターンを使用してモダナイズされるメインフレームアプリケーションでは、認証メカニズムを新しいアプリケーションアーキテクチャに慎重に統合する必要があります。この統合は通常、モダナイゼーション後のアクティビティとして処理されます。タスクは複雑で、最新のセキュリティ標準やクラウドネイティブプラクティスに合わせて既存の認証システムを移行または外部化することが多くあります。開発者は、モダナイズされたアプリケーションのランタイム環境とライブラリの制約内で作業しながら、認証を効果的に実装する方法を検討する必要があります。モダナイゼーション後、 は AWS Blu Age の最新のコードを Amazon CognitoMicrosoft Entra ID (旧 Azure AD) などのアイデンティティおよびアクセス管理システムと簡単に統合する方法 AWS を提供します。

このパターンでは、認証プロバイダーが Microsoft Entra ID の場合に、調査やトライアルに時間を費やすことなく、モダナイズされたアプリケーションに認証メカニズムを実装する方法について説明します。このパターンは以下を提供します。

  • Microsoft Authentication Library (MSAL) および認証実装に不可欠なその他の Microsoft Entra ID ドキュメントのフィールドテスト済みおよび関連する Angular ライブラリ。 

  • OAuth 2.0 を使用して Spring Security を有効にするために必要な AWS Blu Age ランタイムの設定。

  • 認証されたユーザーの ID をキャプチャし、 AWS Blu Age ランタイムに渡すライブラリ。

  • 実装が推奨されるセキュリティ対策。

  • Microsoft Entra ID のセットアップでよく発生する問題のトラブルシューティングのヒント。

注記

このパターンでは、AWS プロフェッショナルサービスのエンゲージメントの一環としてお客様に提供される AWS Blu Age OAuth 拡張機能ライブラリを使用します。このライブラリは AWS Blu Age ランタイムの一部ではありません。

前提条件と制限

前提条件

  • 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 Development Kit (JDK) バージョン 17

  • Angular バージョン 16.1

アーキテクチャ

ソーステクノロジースタック

一般的なメインフレーム環境では、認証はユーザープロファイルを通じて実装されます。これらのプロファイルは、システムへのユーザーを識別し、サインインできるユーザーを定義し、ユーザーがシステムリソースで実行できる関数を指定します。ユーザープロファイルは、セキュリティ担当者またはセキュリティ管理者によって管理されます。

ターゲットテクノロジースタック

  • Microsoft Entra ID

  • 最新の Java Spring Boot ベースのバックエンド

  • AWS Blu Age ランタイム

  • OAuth 2.0 を使用した Spring Security

  • 角度付きシングルページアプリケーション (SPA)

ターゲット アーキテクチャ

AWS Blu Age ランタイムはデフォルトで OAuth 2.0 ベースの認証をサポートしているため、パターンはその標準を使用してバックエンド APIsを保護します。

次の図は、プロセスフローを示しています。

注記

この図には、データベースのモダナイゼーションの例として Amazon Aurora が含まれていますが、Aurora はこのパターンのステップに含まれていません。

AWS Blu Age アプリケーションの Entra ID ベースの認証のプロセスフロー。

各パラメータの意味は次のとおりです。

  1. ユーザーは Microsoft Entra ID で認証を試みます。

  2. Microsoft Entra ID は、アプリケーションが後続の呼び出しで使用する更新、アクセス、および ID トークンを返します。

  3. MSAL インターセプターは、 AWS Blu Age ランタイムを呼び出す HTTPS リクエストのAuthorizationヘッダーにアクセストークンを含めます。

  4. AWS Blu Age extension-oauthライブラリは、 AWS Blu Age ランタイム設定ファイル (application-main.yml) を使用して ヘッダーからユーザー情報を抽出し、この情報をSharedContextオブジェクトに配置して、ビジネスロジックがそれを消費できるようにします。

    注記

    SharedContext は Blu Age AWS が提供するランタイムコンポーネントで、モダナイズされたアプリケーション全体でアプリケーションのコンテキストと状態情報を管理します。 AWS Blu Age ランタイムのコンポーネントと更新の詳細については、 AWS Mainframe Modernization ドキュメントのAWS 「Blu Age リリースノート」を参照してください。application-main.yml ファイルの詳細については、 AWS Mainframe Modernization ドキュメントのAWS 「Blu Age ランタイムの設定をセットアップする」を参照してください。

  5. AWS Blu Age ランタイムは、トークンが存在するかどうかを確認します。 

    1. トークンが存在する場合、Microsoft Entra ID と通信してトークンの有効性をチェックします。 

    2. トークンが存在しない場合、 AWS Blu Age ランタイムは HTTP ステータスコード 403 のエラーを返します。

  6. トークンが有効な場合、 AWS Blue Age ランタイムはビジネスロジックの継続を許可します。トークンが無効の場合、 AWS Blu Age ランタイムは HTTP ステータスコード 403 のエラーを返します。

OAuth 2.0 ワークフロー

OAuth 2.0 ワークフローの概要図については、Microsoft Entra ドキュメントを参照してください。

ツール

AWS のサービス

  • AWS Mainframe Modernization には、メインフレームから AWS マネージドランタイム環境への移行とモダナイゼーションの計画と実装に役立つツールとリソースが用意されています。 AWS Blu Age が提供するこのサービスのリファクタリング機能を使用して、レガシーメインフレームアプリケーションを変換およびモダナイズできます。

コードリポジトリ

CardDemo アプリケーションが更新され、Microsoft Entra ID との統合が実証されました。このパターンのコードには、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 プロフェッショナルサービスとのエンゲージメント中に AWS Blu Age チームによって提供されます。

このライブラリは、前のコードブロックにapplication-main.yml示されているclaim.claims設定を読み取ります。この設定はリストです。リストの各項目には、 claimNameと の 2 つの値がありますclaimMapValueclaimName はフロントエンドによって送信される JSON ウェブトークン (JWT) のキー名を表し、 のキーの名前claimMapValueを表しますSharedContext。たとえば、バックエンドでユーザー ID をキャプチャする場合は、 claimName を Microsoft Entra ID によってuserId提供される を保持する JWT のキー名に設定し、 をキー名claimMapValueに設定してバックエンドコードでユーザー ID を取得します。

たとえば、 UserIdで を設定した場合claimMapValue、次のコードを使用してユーザー ID を抽出できます。

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) で、JWT 検証が Entra ID アプリケーション登録の正確な発行者 URI とオーディエンス値で正しく設定されていることを確認します。

    トークンの有効期限が切れて更新された場合:

    1. Angular アプリケーションのエラーインターセプターは、MSAL を介して新しいトークンを取得することで 401 レスポンスを処理します。

    2. 新しいトークンは、後続のリクエストとともに送信されます。

    3. 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からユーザー情報を正常に抽出していることを確認します。

  • 特定のクレーム設定。application-main.yml、Microsoft Entra ID から必要なクレームを明示的に定義します。たとえば、ユーザーの E メールとロールをキャプチャするには、以下を指定します。

    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 を設定します。

Microsoft Entra ID B2C (Azure AD B2C) 認証を Angular SPA に追加する方法については、Microsoft のドキュメントを参照してください。具体的には次のとおりです。

  1. アプリケーションとレコード識別子を登録します

  2. カスタムスコープを追加して公開することで、 AWS Blu Age トランザクションエンドポイントを公開します。 https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-configure-app-expose-web-apis#add-a-scope 

  3. スコープと API URL を定義したら、コードリポジトリの environment.tsファイルの apiUriおよび apiScopeプロパティでこれらの値を設定します。

アプリ開発者
タスク説明必要なスキル

GitHub リポジトリをクローンして、認証に必要な Angular コードを取得します。

次のコマンドを実行して、このパターンで提供されている GitHub リポジトリをローカルの現在の作業ディレクトリにクローンします。

git clone https://github.com/aws-samples/sample-microsoft-entra-id-based-auth-in-aws-bluage-modernized-mainframe-app.git
アプリ開発者

AWS Blu Age モダナイズされたコードを Tomcat サーバーにデプロイして認証を実装します。

Tomcat と Angular 開発サーバーを含むローカル環境を設定するには、 AWS プロフェッショナルサービスとのカスタマーエンゲージメントの一環として AWS Blu Age チームが提供するインストール手順に従います。

アプリ開発者
タスク説明必要なスキル

AWS Blu Age ランタイムセキュリティを有効にして、AWS Blu Age REST API エンドポイントを保護します。

AWS Blu Age ランタイムが使用するapplication-main.ymlファイルを次のように設定します。このファイルの例については、このパターンの前半の「コードリポジトリ」セクションを参照してください。

  • spring:security:oauth2:client:* は Spring Security OAuth 2.0 クライアントサポートを有効にします。設定を Microsoft Entra ID 設定に固有の値に置き換えます。

  • spring:security:oauth2:resourceserver は Spring Security OAuth 2.0 リソースサーバーのサポートを有効にします。

  • gapwalk-application.security.issuerUri は、認可エンドポイント、トークンエンドポイントなどの設定情報を取得するための ID プロバイダーの URL を指定します。

  • gapwalk-application.security.identity は に設定する必要がありますoauth

  • gapwalk-application.security.claim.claims は、ユーザー IDsとユーザー名をキャプチャするために必要なクレームのリストを指定します。  例については、このパターンの前半の「コードリポジトリ」セクションを参照してください。

  • gapwalk-application.security は に設定する必要がありますenabled

  • spring.autoconfigure.exclude 認証を有効にするには、 を削除する必要があります。

アプリ開発者

ローカル環境のサンプルコードを Blu Age のモダナイズされた Angular コードベースに組み込みます。

AWS Blu Age のモダナイズされた Angular コードベースに例を組み込む方法については、このパターンの前半のコードリポジトリセクションを参照してください。

アプリ開発者

oauth2-ext ライブラリを共有ディレクトリに配置します。

AWS Blu Age モダナイズされたアプリケーションが使用できるように、oauth2-extライブラリをアプリケーションサーバー の共有ディレクトリに配置します以下の コマンドを実行します。

cd oauth2-ext/target cp extension-oauth-filter-<version>.jar /{app-server-home}/shared/
アプリ開発者
タスク説明必要なスキル

フロントエンドアプリケーションをデプロイします。

次のコマンドを実行して、フロントエンドアプリケーションをローカルで起動します。

npm install ng serve --ssl npm start
注記

ng serve コマンドに --sslフラグを追加すると、開発サーバーは他のプロトコルよりも安全な HTTPS を使用し、本番環境のシミュレーションが向上します。

アプリ開発者

バックエンドアプリケーションを起動します。

Eclipse で Tomcat サーバーを起動します。

アプリ開発者
タスク説明必要なスキル

ログイン機能をテストします。

ローカルにデプロイされたアプリケーションに でアクセスhttp://localhost:4200し、ユーザーが自分の ID を確認するように求められていることを確認します。

注記

ここで HTTP はデモンストレーションの目的で使用されます。本番稼働環境やその他のパブリックアクセス可能な環境では、セキュリティに HTTPS を使用する必要があります。ローカル開発でも、可能であれば HTTPS を設定することをお勧めします。

Microsoft ログインプロンプトが表示され、Microsoft Entra ID で設定されたユーザーにアプリケーションへのアクセスを許可する必要があります。

アプリ開発者

リクエストで認可ヘッダーをテストします。

注記

次の手順では、例として CardDemo アプリケーションを使用します。他の最新のアプリケーションのテスト手順は異なります。

  1. CardDemo アプリケーションでトランザクションを起動CC00します。

  2. ユーザー認証情報を使用してサインインします。例えば、AWS Blu Age レベル 3 セルフペースワークショップを使用している場合は、PASSWORD認証情報に名前USER0001とパスワードを使用できます。

  3. ブラウザの同じタブでデベロッパーツールウィンドウを開きます。

  4. ネットワークタブを開き、バックエンド に送信されたリクエストを確認しますhttp://localhost:8080/gapwalk-application/transaction

  5. リクエストヘッダーをチェックし、 Bearer <token> が Microsoft Entra ID によって生成される<token>値である値を持つ認可ヘッダーが表示されることを確認します。

アプリ開発者

ログアウト機能をテストします。

終了を選択してログアウトし、アプリケーションに再度アクセスしてみてください。新しいログインプロンプトが表示されます。

アプリ開発者

トラブルシューティング

問題ソリューション

Microsoft Entra ID によって発行されたトークンは、Spring Boot OAuth 2.0 セキュリティと互換性がありません。

問題の解決については、OAuth ブログの「Microsoft Entra ID OAuth Flow」を参照してください。 OAuth

トークン関連の一般的な質問。

JWT トークンの内容をデコードして表示するには、https://jwt.io/ ウェブサイトを使用します。

関連リソース