Tomcat アプリを Azure App Service にデプロイする
この記事では、Microsoft Entra アカウントによるサインインを使用して、Tomcat アプリを Azure App Service にデプロイする方法について説明します。
この記事は、次のいずれかの記事を [ローカルで実行] タブを使用して完了し、現在 Azure へのデプロイを計画している読者を想定しています。 以降の手順は、次の記事に記載された「Azure へのデプロイ」タブの手順と同じです。
- Microsoft Entra ID を使用して Java Tomcat アプリのサインインを有効にする
- MSAL4J と Azure Active Directory B2C を使用して Java Tomcat アプリのサインインを有効にする
- Java Tomcat アプリでユーザーのサインインと Microsoft Graph へのアクセスを有効にする
- ロールとロール要求を使用して Java Tomcat アプリをセキュリティで保護する
- グループとグループ要求を使用して Java Tomcat アプリをセキュリティで保護する
前提条件
Azure App Service アプリ用の Maven プラグイン
Maven を開発ツールに選択しない場合は、他のツールを使用する次のチュートリアルを参照してください。
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 を押します。
Windows の場合は、OS の値を定義しますで 1 を押し、Linux の場合は 2 を押してから、Enter を押します。
Java 11 の場合は javaVersion の値を定義しますで 2 を押し、Enter を押します。
Tomcat 9.0 の場合は、webContainer の値を定義しますで 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] ------------------------------------------------------------------------
選択内容の確認後、プラグインによって、アプリを Azure App Service で実行するよう構成するのに必要なプラグイン要素および設定が、プロジェクトの pom.xml ファイルに追加されます。
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>
pom.xml 内で App Service の構成を直接変更できます。 一般的な構成をいくつか次の表に示します。
プロパティ | Required | 説明 |
---|---|---|
subscriptionId |
false | サブスクリプション ID です。 |
resourceGroup |
true | アプリの Azure リソース グループ。 |
appName |
true | アプリの名前。 |
region |
false | アプリをホストするリージョン。 既定値は centralus です。 有効なリージョンについては、「サポートされているリージョン」を参照してください。 |
pricingTier |
false | アプリの価格レベル。 運用環境のワークロードでは、既定値は P1v2 です。 Java の開発とテストに推奨される最小値は B2 です。 詳細については、「App Service の価格」を参照してください。 |
runtime |
false | ランタイム環境の構成。 詳細については、「構成の詳細」を参照してください。 |
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 ID プラットフォームの [アプリの登録] ページに移動します。
検索ボックスを使用してアプリの登録を検索します (例:
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 に格納し、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");
これで、
aad.secret
キーと、authentication.properties ファイルの値を削除できます。次のコマンドを使用してコードを再ビルドします。
mvn clean package
次のコマンドを使用して、アプリケーションを再デプロイします。
mvn package azure-webapp:deploy
これでデプロイは完了しました。