翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 Cognito や Microsoft Entra ID
このパターンでは、認証プロバイダーが 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 メインフレームモダナイゼーションリファクタリングツールによって生成されたモダナイズされたアプリケーション。このパターンでは、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 はこのパターンのステップに含まれていません。

各パラメータの意味は次のとおりです。
ユーザーが 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は Blu Age AWS が提供するランタイムコンポーネントで、モダナイズされたアプリケーション全体のアプリケーションコンテキストと状態情報を管理します。 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 が提供するこのサービスのリファクタリング機能を使用して、レガシーメインフレームアプリケーションを変換およびモダナイズできます。
注記
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 プロフェッショナルサービスと
このライブラリは、前のコードブロックに示されている application-main.yml ファイルの claim.claims 設定を読み取ります。この設定はリストです。リストの各項目では、claimName と claimMapValue の 2 つの値が得られます。claimName はフロントエンドによって送信される JSON ウェブトークン (JWT) のキー名を表し、claimMapValue は SharedContext のキーの名前です。例えば、バックエンドでユーザー ID をキャプチャする場合は、claimName を Microsoft Entra ID によって提供される userId を保持する JWT のキー名に設定し、claimMapValue を、バックエンドコードでユーザー ID を取得するためのキー名に設定します。
例えば、claimMapValue で UserId を設定した場合、次のコードを使用してユーザー 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: NATIVEAmazon 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 とオーディエンス値で正しく設定されていることを確認します。トークンの有効期限が切れて更新された場合:
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オブジェクト母集団をチェックして、ライブラリが 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 secondsMsalGuard。不正アクセスを防ぐために、保護するすべてのルートに 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 のドキュメント
| アプリ開発者 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
認証に必要な Angular コードを取得するために、GitHub リポジトリのクローンを作成する。 | 次のコマンドを実行して、このパターンで提供している GitHub リポジトリ
| アプリ開発者 |
認証を実装するために、 AWS Blu Age モダナイズされたコードを Tomcat サーバーにデプロイします。 | Tomcat と Angular 開発サーバーを含むローカル環境を設定するには、 AWS プロフェッショナルサービスとのカスタマーエンゲージメントの一環として AWS Blu Age チームが提供するインストール手順に従います。 | アプリ開発者 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
AWS Blu Age REST API エンドポイントを保護するために、AWS Blu Age ランタイムセキュリティを有効にする。 | AWS Blu Age ランタイムが使用する
| アプリ開発者 |
ローカル環境のサンプルコードを Blu Age によりモダナイズされた Angular コードベースに組み込む。 | AWS Blu Age のモダナイズされた Angular コードベースに例を組み込む方法については、このパターンの前半のコードリポジトリセクションを参照してください。 | アプリ開発者 |
| AWS Blu Age によりモダナイズされたアプリケーションで使用できるように、
| アプリ開発者 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
フロントエンドアプリケーションをデプロイする。 | 以下のコマンドを実行して、フロントエンドアプリケーションをローカルで起動します。
注記
| アプリ開発者 |
バックエンドアプリケーションを起動する。 | Eclipse で Tomcat サーバーを起動します。 | アプリ開発者 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
ログイン機能をテストする。 | ローカルにデプロイされたアプリケーションに 注記ここでは、デモのために HTTP を使用します。本番稼働環境やその他のパブリックにアクセス可能な環境では、セキュリティのために HTTPS を使用する必要があります。ローカル開発であっても、可能であれば HTTPS をセットアップすることをお勧めします。 Microsoft ログインプロンプトが表示され、Microsoft Entra ID で設定されたユーザーにアプリケーションへのアクセスが許可される必要があります。 | アプリ開発者 |
リクエストで送信した認可ヘッダーをテストする。 | 注記以下の手順では、例として CardDemo
| アプリ開発者 |
ログアウト機能をテストする。 | [終了] を選択してログアウトし、アプリケーションにもう一度アクセスしてみてください。新しいログインプロンプトが表示されるはずです。 | アプリデベロッパー |
トラブルシューティング
| 問題 | ソリューション |
|---|---|
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 ID プラットフォームの OAuth 2.0 および OpenID Connect (OIDC) 認証フローについては、Microsoft Entra のドキュメント
を参照してください。