Java Tomcat アプリを Azure App Service にデプロイする
この記事では、Microsoft Entra アカウントによるサインインを使用して Tomcat アプリを Azure App Service にデプロイする方法について説明します。
この記事では、[ローカルで実行] タブのみを使用して次のいずれかの記事を完了し、Azure にデプロイする必要があることを前提としています。 これらの手順は、次の記事の「Azure へのデプロイ」タブの手順と同じです。
- Microsoft Entra ID を使用して Java Tomcat アプリのサインインを有効にする
- Azure Active Directory B2C で MSAL4J を使用して Java Tomcat アプリのサインインを有効にする
- Java Tomcat アプリがユーザーをサインインさせ、Microsoft Graph にアクセスできるようにする
- ロールとロール要求を使用して Java Tomcat アプリをセキュリティで保護する
- グループとグループ要求 を使用して Java Tomcat アプリをセキュリティで保護する
前提 条件
Maven プラグインを構成する
Azure App Service にデプロイすると、デプロイでは Azure CLI からの Azure 資格情報が自動的に使用されます。 Azure CLI がローカルにインストールされていない場合、Maven プラグインは OAuth またはデバイスサインインで認証します。 詳細については、Maven プラグインを使用した認証の
プラグインを構成するには、次の手順に従います。
次のコマンドを実行してデプロイを構成します。 このコマンドは、Azure App Service オペレーティング システム、Java バージョン、Tomcat のバージョンを設定するのに役立ちます。
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
新しい実行構成を作成するには、Yを押し、次に Enterキーを押します。
OS の値を定義するには、Windows の場合は1 、Linux の場合は2 を押し、Enter キー押します。 Java 11 の場合は javaVersion の値を定義しますで 2 を押し、Enter を押します。
WebContainerの値を定義するには、Tomcat 9.0 のために 4 キーを押してから、Enter キーを押してください。
pricingTier の値を定義しますで Enter を押し、既定値である P1v2 層を選択します。
確認で Y を押し、Enter を押します。
次の例は、デプロイ プロセスの出力を示しています。
Please confirm webapp properties
AppName : msal4j-servlet-auth-1707209552268
ResourceGroup : msal4j-servlet-auth-1707209552268-rg
Region : centralus
PricingTier : P1v2
OS : Linux
Java Version: Java 11
Web server stack: Tomcat 9.0
Deploy to slot : false
Confirm (Y/N) [Y]: [INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 37.112 s
[INFO] Finished at: 2024-02-06T08:53:02Z
[INFO] ------------------------------------------------------------------------
選択内容を確認した後、プラグインは必要なプラグイン要素と設定をプロジェクトの pom.xml ファイルに追加して、Azure App Service で実行するようにアプリを構成します。
pom.xml ファイルの関連部分は、次の例のようになります。
<build>
<plugins>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>>azure-webapp-maven-plugin</artifactId>
<version>x.xx.x</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<resourceGroup>your-resourcegroup-name</resourceGroup>
<appName>your-app-name</appName>
...
</configuration>
</plugin>
</plugins>
</build>
App Service の構成は、pom.xmlで直接変更できます。 一般的な構成の一部を次の表に示します。
財産 | 必須 | 説明 |
---|---|---|
subscriptionId |
false | サブスクリプション ID。 |
resourceGroup |
本当 | アプリの Azure リソース グループ。 |
appName |
本当 | アプリの名前。 |
region |
false | アプリをホストするリージョン。 既定値は centralus です。 有効なリージョンについては、「サポートされているリージョン |
pricingTier |
false | アプリの価格レベル。 既定値は、運用ワークロードに対して P1v2 です。 Java の開発とテストに推奨される最小値は B2 です。 詳細については、「App Service の価格」を参照してください。 |
runtime |
誤り | ランタイム環境の構成。 詳細については、「構成の詳細」を参照してください。 |
deployment |
false | デプロイの構成。 詳細については、「構成の詳細」を参照してください。 |
構成の完全な一覧については、プラグインのリファレンス ドキュメントを参照してください。 すべての Azure Maven プラグインは、共通の構成セットを共有します。 これらの構成については、「一般的な構成」を参照してください。 Azure App Service に固有の構成については、Azure アプリ 構成の詳細に関するページを参照してください。
後で使用するために、必ず appName
と resourceGroup
の値を保存してください。
デプロイ用にアプリを準備する
アプリケーションを App Service にデプロイすると、リダイレクト URL がデプロイされたアプリ インスタンスのリダイレクト URL に変更されます。 プロパティ ファイルでこれらの設定を変更するには、次の手順に従います。
次の例に示すように、アプリの authentication.properties ファイルに移動し、
app.homePage
の値をデプロイされたアプリのドメイン名に変更します。 たとえば、前の手順でアプリ名のexample-domain
を選択した場合は、app.homePage
値にhttps://example-domain.azurewebsites.net
を使用する必要があります。 プロトコルもhttp
からhttps
に変更していることを確認してください。# app.homePage is by default set to dev server address and app context path on the server # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net app.homePage=https://<your-app-name>.azurewebsites.net
このファイルを保存した後、次のコマンドを使用してアプリをリビルドします。
mvn clean package
Microsoft Entra ID アプリの登録を更新する
デプロイされたアプリのリダイレクト URI が Azure App Service に変更されるため、Microsoft Entra ID アプリの登録でリダイレクト URI を変更する必要もあります。 この変更を行うには、次の手順に従います。
開発者向け Microsoft アイデンティティ プラットフォームの アプリ登録 ページにアクセスします。
検索ボックスを使用して、アプリの登録 (
java-servlet-webapp-authentication
など) を検索します。名前を選択して、アプリの登録を開きます。
メニューから [認証] を選択します。
[Web - リダイレクト URI] セクションで、[URIを追加] を選択します。
アプリの URI を入力し、
/auth/redirect
(たとえば、https://<your-app-name>.azurewebsites.net/auth/redirect
) を追加します。保存を選択します。
アプリをデプロイする
これで、アプリを Azure App Service にデプロイする準備ができました。 次のコマンドを使用して、デプロイを実行するために Azure 環境にサインインしていることを確認します。
az login
pom.xml ファイル内のすべての構成の準備ができたので、次のコマンドを使用して Java アプリを Azure にデプロイできるようになりました。
mvn package azure-webapp:deploy
デプロイが完了すると、http://<your-app-name>.azurewebsites.net/
でアプリケーションの準備が整います。 ローカル Web ブラウザーで URL を開くと、msal4j-servlet-auth
アプリケーションのスタート ページが表示されます。
シークレット値を削除する
アプリケーションの authentication.properties ファイルには、現在、aad.secret
パラメーターにクライアント シークレットの値が保持されています。 この値をこのファイルに保持することはお勧めしません。 Git リポジトリにコミットすると、リスクが発生する可能性もあります。
セキュリティの追加の手順として、この値を Azure Key Vault
aad.secret
の値を Key Vault に移動し、コードで使用するには、次の手順に従います。
Azure Key Vault インスタンスを作成するには、次のコマンドを使用します。
export RESOURCE_GROUP=<your-resource-group-name> export KEY_VAULT=<your-key-vault-name> az keyvault create \ --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT
次のコマンドを使用して、
aad.secret
のシークレット値を新しいシークレットとしてキー コンテナーに追加します。az keyvault secret set \ --vault-name $KEY_VAULT \ --name "AADSECRET" \ --value "<the-value-of-your-client-secret>"
アプリにキー ボールトへのアクセス権を付与する必要があります。 このタスクを実行するには、まず次のコマンドを使用して、アプリの新しい ID を作成します。
export WEB_APP_NAME=<your-web-app-name> az webapp identity assign \ --resource-group $RESOURCE_GROUP \ --name $WEB_APP_NAME
次のコマンドを使用して、Key Vault 内のシークレットに対してこの ID
get
とlist
アクセス許可を付与します。export IDENTITY=$(az webapp identity show \ --resource-group $RESOURCE_GROUP \ --name $WEB_APP_NAME \ --query principalId \ --output tsv) az keyvault set-policy \ --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT \ --secret-permissions get list \ --object-id $IDENTITY
次のコマンドを使用して、キー コンテナー内のシークレットに対してキー コンテナー参照を使用する設定をアプリに作成します。 この設定により、シークレットの値が環境変数としてアプリで使用できるようになります。
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP \ --name $WEB_APP_NAME \ --settings AADSECRET='@Microsoft.KeyVault(VaultName=$KEY_VAULT;SecretName=AADSECRET)'
環境変数からこの値を読み込むには、次のコードを使用します。 \src\main\java\com\microsoft\azuresamples\msal4j\helpers\Config.java ファイルの 41 行目で、現在のステートメントを次の行に変更します。
public static final String SECRET = System.getenv("AADSECRET");
authentication.properties ファイルから
aad.secret
キーと値を削除できるようになりました。次のコマンドを使用してコードを再構築します。
mvn clean package
次のコマンドを使用して、アプリケーションを再デプロイします。
mvn package azure-webapp:deploy
これでデプロイが完了しました。