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

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

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

Vishal Jaswani と Rimpy Tewani、Amazon Web Services

概要

注記

AWS Mainframe Modernization サービス (マネージドランタイム環境エクスペリエンス) は、新規のお客様に公開されなくなりました。 AWS Mainframe Modernization サービス (マネージドランタイム環境エクスペリエンス) と同様の機能については、 AWS Mainframe Modernization サービス (セルフマネージドエクスペリエンス) をご覧ください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「AWS Mainframe Modernization  可用性の変更」を参照してください。

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 のサービス (リージョン別)」を参照してください。特定のエンドポイントについては、「Service endpoints and quotas」で、サービスのリンクを選択してご確認ください。

製品バージョン

このパターンの開発には、以下を使用しています。

  • AWS Blu Age ランタイムバージョン 4.1.0 (このパターンは下位互換性があるそれ以降のバージョンでも機能します)

  • MSAL ライブラリ、バージョン 3.0.23

  • Java 開発キット (JDK) バージョン 17。

  • Angular バージョン 16.1

アーキテクチャ

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

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

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

  • Microsoft Entra ID

  • モダナイズされた Java Spring Boot ベースのバックエンド

  • AWS Blu Age ランタイム

  • OAuth 2.0 を使用した Spring Security

  • Angular 単一ページアプリケーション (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 が提供するこのサービスのリファクタリング機能を使用して、レガシーメインフレームアプリケーションを変換およびモダナイズできます。

注記

AWS Mainframe Modernization サービス (マネージドランタイム環境エクスペリエンス) は、新規のお客様に公開されなくなりました。 AWS Mainframe Modernization サービス (マネージドランタイム環境エクスペリエンス) と同様の機能については、 AWS Mainframe Modernization サービス (セルフマネージドエクスペリエンス) をご覧ください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「AWS Mainframe Modernization  可用性の変更」を参照してください。

コードリポジトリ

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 プロフェッショナルサービスとのエンゲージメント中に AWS Blu Age チームによって提供されます。

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

例えば、claimMapValueUserId を設定した場合、次のコードを使用してユーザー 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 オブジェクト母集団をチェックして、ライブラリが JWT からユーザー情報を正常に抽出していることを確認します。

  • 特定のクレーム設定。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 プロパティでこれらの値を設定します。

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

認証に必要な Angular コードを取得するために、GitHub リポジトリのクローンを作成する。

次のコマンドを実行して、このパターンで提供している 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 REST API エンドポイントを保護するために、AWS Blu Age ランタイムセキュリティを有効にする。

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 は、ユーザー ID とユーザー名をキャプチャするために必要なクレームのリストを指定します。  例については、このパターンの前半の「コードリポジトリ」セクションを参照してください。

  • 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 を使用するようにできます。HTTPS は他のプロトコルよりも安全であり、本番環境の優れたシミュレーションが行えます。

アプリ開発者

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

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

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

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

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

注記

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

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

アプリ開発者

リクエストで送信した認可ヘッダーをテストする。

注記

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

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

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

  3. ブラウザの同じタブで [開発者用ツール] ウィンドウを開きます。

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

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

アプリ開発者

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

[終了] を選択してログアウトし、アプリケーションにもう一度アクセスしてみてください。新しいログインプロンプトが表示されるはずです。

アプリデベロッパー

トラブルシューティング

問題ソリューション

Microsoft Entra ID によって発行されたトークンに、Spring Boot OAuth 2.0 セキュリティとの互換性がない。

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

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

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

関連リソース